복붙노트

[SPRING] 하나의 컨텍스트에서 Spring bean을 다른 컨텍스트의 mock 버전으로 대체하십시오.

SPRING

하나의 컨텍스트에서 Spring bean을 다른 컨텍스트의 mock 버전으로 대체하십시오.

시작하는 동안 응용 프로그램 컨텍스트 xml이 초기화되는 통합 테스트를 작성하고 있습니다. 테스트 클래스에는 특정 bean 'X'(이미 xml에 정의되어 있음)를 사용하는 몇 가지 테스트 메소드가 있습니다. 내 실제 요구 사항은 테스트 메소드 중 하나에 대해서만 bean X를 조롱하는 것이다.

테스트 메소드 내부 : ClassPathXMLApplicationContext를 사용하여 모의 빈 'M'만 사용하여 별도의 애플리케이션 컨텍스트를 만들려고했다.

이제 두 개의 응용 프로그램 컨텍스트 (AC)가 있습니다. 1. 테스트 케이스가 시작될 때 생성 된 하나의 bean (실제 bean X 포함)과 2. 테스트 메소드 (Mock bean M이 있음) 내에서 ClassPathXMLApplicationContext를 사용하여 생성 된 메소드.

AC : 2의 mock bean 정의 'M'을 사용하여 AC : 1 내의 실제 빈 정의 'X'를 대체하려고합니다.

누군가 제발 좀 비켜 줄래?

해결법

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

    1.빈 페이지를 닫고 다시 새로 고치지 않는 한 새로 고친 ApplicationContext에서 빈을 대체하는 명확한 방법이 없습니다.

    빈 페이지를 닫고 다시 새로 고치지 않는 한 새로 고친 ApplicationContext에서 빈을 대체하는 명확한 방법이 없습니다.

    이를 에뮬레이션하기 위해 일반적인 접근법은 런타임에 대상을 바꾸고 변경하려는 빈의 프록시를 사용하는 것입니다.

    프레임 워크 AOP 지원 클래스를 사용하면 쉽게 할 수 있습니다.

    <bean id="realBean" class="RealClass" />
    <bean id="mockBean" class="MockClass" />
    <bean id="targetSource" class="org.springframework.aop.target.HotSwappableTargetSource">
        <constructor-arg ref="realBean" />
    </bean>
    
    <bean id="bean" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="targetSource" ref="targetSource" />
    </bean>
    

     

    @Test
    public void testWithMockBean() {
    Object real = targetSource.swap(mock);
    ....
    // do your test work
    ...
    targetSource.swap(real);
    
    }
    
  2. ==============================

    2.할 수있는 일 :

    할 수있는 일 :

    그리고 나는 더 많은 옵션이 있다고 확신한다.

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

    3.다음을 사용하여 테스트 응용 프로그램 컨텍스트 만들기

    다음을 사용하여 테스트 응용 프로그램 컨텍스트 만들기

    <beans>
        <import resource="classpath*:appContext.xml" />
        <bean id="mockbeanOfX" class=....../>
    </beans>
    

    이 테스트 애플리케이션 컨텍스트를 테스트 케이스에로드한다. 이제 응용 프로그램 컨텍스트에서 mock bean을 가져 와서 필요할 때마다 전달할 수 있습니다.

  4. from https://stackoverflow.com/questions/12800769/replace-spring-bean-in-one-context-with-mock-version-from-another-context by cc-by-sa and MIT license