복붙노트

[SPRING] Spring 문맥에 모의 삽입하기 [duplicate]

SPRING

Spring 문맥에 모의 삽입하기 [duplicate]

Spring 컨텍스트를 사용하는 테스트가 있습니다. 이러한 맥락에서 많은 bean이 선언된다. 나는 MOCK을 사용하고자하는 경우를 제외하고, 테스트가 문맥의 빈의 실제 구현을 사용하기를 원한다.

@Configuration 어노테이션으로 구성 컴포넌트를 테스트하려고 시도했지만 XML이 @Bean 어노테이션보다 우선 순위가 높은 것처럼 보이므로 작동하지 않는다.

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"context1.xml", "context2.xml", ...})
@Configuration
public class MyTest{

    @Inject
    private MyTargetBean target;

    private AnotherBean myMock = mock(AnotherBean.class);

    @Bean
    public AnotherBean myMock() { return myMock; }

    .....

XML에서 Mock을 정의 할 수 있다는 것을 알고 있지만,이를 위해 각 테스트에서 XML 파일을 추가로 작성해야합니다. 나는이 복잡성을 피하고 싶다.

XML보다는 문맥에서 빈 (모의 같은)을 삽입하는 방법이 있습니까?

고맙습니다!

해결법

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

    1.네, 맞습니다. @Configuration 클래스에 모의 객체 @Bean을 두는 것이 한 가지 방법이며, 저는 제 경험을 설명 할 것입니다 :

    네, 맞습니다. @Configuration 클래스에 모의 객체 @Bean을 두는 것이 한 가지 방법이며, 저는 제 경험을 설명 할 것입니다 :

    그 트릭은 테스트를 위해 순전히 다른 .xml 파일 집합을 사용해야한다는 것입니다.이 집합은 해당 빈의 라이브 버전을 제외합니다.

    @ContextConfiguration(locations = {"context1-test.xml", "context2-test.xml", ...})
    

    "-test-xml"파일은 src / test / resources에 있습니다.

    적어도 그것은 같은 일을하는 나의 경험이었습니다. 어쩌면 빈을 모의 버전으로 "오버 라이딩 (override)"할 수있는 방법이 있을지 모르지만, 아직 알지 못합니다.

    나는 또한 모의 (나는 그들 중 5 개를 가지고 있었다)를 모두 함께 자신의 구성에 넣기로 결심했다.

    @Configuration
    public class MockServicesProvider {
         @Bean
         public AnotherBean myMock() { return mock(AnotherBean.class); }
    }
    

    이 문제의 또 다른 흥미로운 부분은 initMocks (this)의 일반적인 사용법입니다. 테스트 클래스의 @Before 메소드에서.

    mock이 다른 장소에서 사용된다면 (그래서 그것들을 연결하는 것입니다 ...) initMocks (이것)은 시험 사이에 그들을 날려 버릴 것입니다. (말 그대로 - 새로운 mock이 생성 될 것입니다. 다른 물건에 모의 된 물건은 "잃어 버릴"것입니다).

    이에 대한 해결책은 각 테스트 전에 @Before 메서드에서 mockito reset (mock Object)을 호출하는 것이 었습니다. 새로운 mock을 만들지 않고 동일한 mock이 재설정됩니다 (모든 when과 interactions).

    리셋을위한 Mockito 문서는이 메서드가 의존성 삽입을 통해 적용되는 모의 컨텍스트를 제외하고는 일반적으로 사용되지 않아야한다는 것을 매우 엄격하게 말합니다. 우리가 실제로이 경우에 수행하고 있습니다. :)

    재미있어!

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

    2.참으로

    참으로

    봄 콩으로 모키 토 모의 주입

    Springockito-annotation은 내가 찾고 있었던 것입니다.

    https://bitbucket.org/kubek2k/springockito/wiki/springockito-annotations

  3. from https://stackoverflow.com/questions/19808326/how-to-inject-a-mock-in-a-spring-context by cc-by-sa and MIT license