복붙노트

[SPRING] Spring JUnit 테스트에서 자동 모의 인스턴스 생성

SPRING

Spring JUnit 테스트에서 자동 모의 인스턴스 생성

통합 테스트를 작성하고자하는 Spring XML bean 정의가있다. XML bean 정의는 를 사용하여 여러 파일이 포함 된 더 큰 응용 프로그램 컨텍스트의 일부입니다. 정의 안에서, 나는 다른 파일에서 오는 여러 빈을 참조한다.

내 통합 테스트를 위해 독립 실행 형 정의를 인스턴스화하고 다른 모든 빈에 대해 Mockito 모의를 사용하고 싶습니다. 지금까지는 다음과 같은 것을 사용하고 있습니다.

FooIntegrationTest.java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class FooIntegrationTest {
  @Autowired private ClassUnderTest underTest;
  @Autowired private MockedClass mock;

  @Test
  public void testFoo() {
  }
}

FooIntegrationTest-context.xml

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  <import resource="part-to-test.xml" />

  <bean id="mockedClassReferencedByName" class="org.mockito.Mockito" factory-method="mock" c:classToMock="SomeMockedClass" />
  <bean class="org.mockito.Mockito" factory-method="mock" c:classToMock="OtherMockedClassReferencedByType" />
  <bean class="org.mockito.Mockito" factory-method="mock" c:classToMock="MockedClass" />
  ...
</beans>

오히려 지루한 조롱 섹션을 자동화하고 싶습니다. 이상적으로, 응용 프로그램 컨텍스트에서 찾을 수없는 모든 bean을 자동으로 조롱하게하고 싶습니다. part-to-test.xml은 이름 참조를 사용하여 설정된 빈뿐만 아니라 @Autowired를 사용합니다. XML Bean 정의 파일 만 사용하며 @Configuration 클래스 나 @Component 주석을 사용하지 않습니다.

@ContextConfiguration (loader = ...)에서 사용자 정의 컨텍스트 로더를 사용하는 방법을 살펴 보았습니다. 그러나 그렇게하기위한 적절한 확장 점을 아직 찾지 못했습니다. Sprinockito이 문제를 해결하지 않는 것 같습니다.

이미이 문제를 해결 한 다른 프로젝트가 있습니까? 그렇지 않다면 자동으로 mock을 만들기 위해 Spring을 어디에서 확장할까요?

해결법

  1. ==============================

    1.다음은 코드 예제가 담긴 짧은 기사입니다. BeanDefinitionRegistryPostProcessor 구현은 부족한 각 빈 정의에 대한 모의 객체를 생성합니다. 생성 부분은 MocksFactory로 수행되며, 여기에 그러한 팩토리의 예제가 있습니다.

    다음은 코드 예제가 담긴 짧은 기사입니다. BeanDefinitionRegistryPostProcessor 구현은 부족한 각 빈 정의에 대한 모의 객체를 생성합니다. 생성 부분은 MocksFactory로 수행되며, 여기에 그러한 팩토리의 예제가 있습니다.

  2. ==============================

    2.누구든지이 질문에 관심이있는 경우 Yves Martin이 언급 한 코드에서 상속, @Inject 등의 지원을 확장했으며 여기 Github 프로젝트를 만들었습니다. https://github.com/ 리노 토 / 스프링 오토 모크

    누구든지이 질문에 관심이있는 경우 Yves Martin이 언급 한 코드에서 상속, @Inject 등의 지원을 확장했으며 여기 Github 프로젝트를 만들었습니다. https://github.com/ 리노 토 / 스프링 오토 모크

  3. from https://stackoverflow.com/questions/10247297/automatic-mock-instantiation-in-a-spring-junit-test by cc-by-sa and MIT license