복붙노트

[SPRING] Spring @Autowired의 동작을 재정의하는 방법

SPRING

Spring @Autowired의 동작을 재정의하는 방법

작은 배경 :

나는 Spring 2.5와 Spring IOC와 주석을 사용하고있다.

내 코드에서 @Autowired를 사용하고 있습니다 (Autowiring은 유형별로 수행됩니다). 클래스를 자동 배선에 노출 시키려면 @Component를 사용하십시오.

아래에 설명 된 상황이 내 코드를 테스트하는 동안 발생했습니다.

이제 문제 :

참고 : 나는 Test 환경을 위해 다른 Spring Context를 사용한다.

나는 클래스 FOO를 @Autowired하지만 테스트 컨텍스트에서 같은 유형의 다른 클래스 MockFoo (FOO 확장)를 사용하려고합니다.

물론 Spring 설정은 FOO 클래스의 Dependency Injection에 대한 여러 옵션 때문에 자동으로 실패합니다 (FOO 및 MockFOO는 모두 유형 검사를 준수합니다).

원래 빈 대신 테스트 빈을 삽입하는 방법을 찾고있다.

Spring이 컨텍스트 설정 파일을 사용하여 빈 삽입을 무시하거나 Spring에게 특정 빈을 autowire하지 않도록 명령 할 것을 기대했다.

그러나

이 모든 옵션은 원래 Spring Context Configuration 파일에 정의 된 bean에만 존재하는 것으로 보인다.

해결법

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

    1.ReflectionTestUtils를 사용하여 수동으로 모의 객체를 autowired 의존성 대신에 설정하십시오 (모의이 스프링 관리가되어서 모호성이 없어야합니다)

    ReflectionTestUtils를 사용하여 수동으로 모의 객체를 autowired 의존성 대신에 설정하십시오 (모의이 스프링 관리가되어서 모호성이 없어야합니다)

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

    2.나는이 질문이 꽤 오래되었다는 것을 알고 있지만, 나는 대답이 여전히 다른 사람들에게 유용 할 수 있다고 생각한다.

    나는이 질문이 꽤 오래되었다는 것을 알고 있지만, 나는 대답이 여전히 다른 사람들에게 유용 할 수 있다고 생각한다.

    당신이 컨텍스트 내에서 Foo와 MockFoo를 혼합하고 싶지 않을 것이므로, 컴포넌트 스캐닝에서 Foo를 제거 할 것을 제안합니다. 예를 들어 에 include / exclude 필터를 지정하여이 작업을 수행 할 수 있습니다.

    그러나 단위 테스트를 구현하는 경우 Spring 컨텍스트를 사용하지 않고 수동으로 종속성의 모형을 주입하여 "순수한"단위 테스트를 구현하여 단일 클래스 만 테스트하도록 제안합니다. 이것은 Mockito와 같은 조롱 프레임 워크를 사용하여보다 쉽게 ​​달성 할 수 있습니다.

  3. ==============================

    3.Didier와 나는 동의한다. 다음은 테스트 애플리케이션 컨텍스트에서 조롱하려는 구현을 제외하는 방법의 예이다.

    Didier와 나는 동의한다. 다음은 테스트 애플리케이션 컨텍스트에서 조롱하려는 구현을 제외하는 방법의 예이다.

    <context:component-scan base-package="com.company" >
        <context:exclude-filter type="regex" expression="com\.abc\.service\.XDaoImpl"/>    
    </context:component-scan>
    

    다음과 같이 테스트에이 응용 프로그램 컨텍스트를 포함시킵니다.

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations={"classpath:/applicationContext-test.xml"})
    public class MyTest {....}
    
  4. from https://stackoverflow.com/questions/2843281/how-to-override-the-behavior-of-spring-autowired by cc-by-sa and MIT license