2010-11-25 10 views
8

Ich weiß, ähnliche Fragen wurden gestellt, z. here, aber nachdem ich eine Suche gemacht habe, bin ich auf eine Lösung gestoßen, mit der ich viel glücklicher bin. hereInjizieren Mock Beans in Spring-Kontext zum Testen

Mein einziges Problem jedoch ist, dass ich nicht sicher bin, wie diese Lösung implementiert werden soll.

Was ich tun möchte, ist über die HotswappableTargetSource überschreiben die Bean Definitionen von ausgewählten Beans in meinem Anwendungskontext mit meinen Testversionen und führen Sie dann den Test.

Dann würde ich für jeden Testfall angeben, welche Beans ich Hot-Swap-fähig sein möchte, und dann muss jeder Test in der Lage sein, eigene Mock-Versionen zu erstellen und diese auszutauschen und wieder zurück zu tauschen.

Ich bin in der Lage, den Anwendungskontext zu erhalten, mit dem der Test läuft, aber was ich nicht weiß ist, wie man eine Bean als Hot-Swap-fähig konfiguriert. Ich weiß, wie man es macht, wenn ich Beans mit xml konfiguriere, aber ich möchte nicht wieder xml verwenden, um Beans zu konfigurieren.

Antwort

9

UPDATE: Es gibt eine Bibliothek, die es tut!

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

Die Lösung wird wie folgt dar:

Sie müssen die Feder Kontext Ihrer Anwendung Proxy ändern, um die Bohne Sie tauschen wollen:

<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 ist der Proxy auf diese BeanSwap.
  • beanSwappable ist die Bohne, die Sie verweisen, wenn Sie die Bohne
  • beanToSwap ist die Standardimplementierung der Bohne

So eine Änderung des zu testenden Systems ist notwendig, tauschen wollen.

Und in Ihrem Test wird der Code wie folgt aussehen:

@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

Aber jetzt gibt es eine Bibliothek, es zu tun sehr leicht ... https://bitbucket.org/kubek2k/springockito/wiki/springockito-annotations –

Verwandte Themen