2010-11-25 3 views
8

나는 비슷한 질문을했습니다. here, 검색을 수행했지만, 나는 훨씬 더 행복해 보이는 해결책을 찾았습니다 here테스트를 위해 봄 컨텍스트에 모의 빈을 삽입

그러나이 솔루션을 구현하는 방법은 확실하지 않습니다.

내가 할 수 있기를 원하는 것은 HotswappableTargetSource를 통해 응용 프로그램 컨텍스트의 선택 빈의 bean 정의를 내 테스트 버전으로 대체 한 다음 테스트를 실행하는 것입니다.

다음 각 테스트 케이스에 대해 나는 어떤 핫 스왑이 가능한 bean을 지정하고 각 테스트는 자신의 mock 버전을 만들어 스왑하고 다시 스왑 할 수 있어야한다.

테스트가 실행되는 응용 프로그램 컨텍스트를 얻을 수 있지만 잘 모르는 것은 빈을 핫 스왑 가능하게 구성하는 방법입니다. XML을 사용하여 빈을 구성 할 때이를 수행하는 방법을 알고 있지만 xml을 사용하여 빈을 구성하는 것으로 돌아가고 싶지는 않습니다.

답변

9

업데이트 : 거기에 라이브러리가 있습니다!

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

이 솔루션은 다음과 같다 :

당신은 프록시 당신이 교환 할 빈 응용 프로그램의 스프링 컨텍스트를 변경해야합니다

<bean id="beanSwappable" class="org.springframework.aop.framework.ProxyFactoryBean"> 
    <property name="targetSource" ref="beanSwap" /> 
</bean> 

<bean id="beanSwap" class="org.springframework.aop.target.HotSwappableTargetSource"> 
    <constructor-arg ref="beanToSwap" /> 
</bean> 
  • beanSwap 인을 이 beanSwap에 대한 프록시.
  • beanSwappable는 빈

따라서 테스트중인 시스템에 변화가 필요의 기본 구현은 빈에게

  • beanToSwap를 교환 할 때 참조하는 콩입니다.

    그리고 테스트의 코드는 다음과 같이 표시됩니다

    @RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration(locations = { "test.xml", "spring.xml" }) 
    public class Test { 
    
        @Resource(name="beanSwappable") 
        Bean b; 
    
        @Resource(name = "beanSwap") 
        HotSwappableTargetSource beanSwap; 
    
        public void swap() { 
         Bean b = << create mock version >> 
         beanSwap.swap(b); 
         // run test code which 
    
        } 
    } 
    
  • +3

    하지만 지금은 ... 아주 쉽게 할 수있는 라이브러리있다 https://bitbucket.org/kubek2k/springockito/wiki/springockito-annotations –

    관련 문제