2010-11-25 18 views
8

test etmek için bahar içeriğine enjekte ederek benzer sorular sordum, örn. here fakat bir arama yaptıktan, ben ancak heresahte fasulyeleri

Benim tek sorun ile çok mutluyum çözüm üzerine geldim, ben bu çözümü nasıl uygulanacağı emin değilim olmasıdır.

Yapabileceğim şey, HotswappableTargetSource aracılığıyla benim uygulama sürümlerimdeki belirli çekirdeklerin fasülye tanımlarını geçersiz kılmak ve ardından sınamayı çalıştırmaktır.

Daha sonra, her test vakası için hangi fasulyelerin çalışırken değiştirilebilir olmasını istediğimi ve her bir testin kendi sahte sürümlerini oluşturup bunları değiştirebildiğini ve tekrar takas yapabildiğini belirtmek istiyorum.

Testin Çalıştığı Uygulama Bağlamını elde edebiliyorum ancak bilmediklerim çekirdeğin çalışırken değiştirilebilir olarak nasıl yapılandırılacağıdır. Fasulyeyi xml ile yapılandırırken nasıl yapacağımı biliyorum ama fasulyeleri yapılandırmak için xml kullanmaya geri dönmek istemiyorum.

cevap

9

GÜNCELLEME: Bunu yapan bir kütüphane var!

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

çözüm aşağıdaki gibidir:

Sen proxy takas etmek istediğiniz fasulye başvurunuzun bahar içeriği değiştirmek gerekir:

<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 olduğunu bu beanSwap üzerine proxy.
  • beanSwappable fasulyesi

Böylece test edilen sistemin bir değişikliği gerekli varsayılan uygulaması Fasulye

  • beanToSwap takas etmek istediğinizde başvurabileceğiniz fasulye olmasıdır.

    Ve testinde kod gibi görünecektir:

    @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

    Ama şimdi ... çok kolay bunu yapmak için bir kütüphane var https://bitbucket.org/kubek2k/springockito/wiki/springockito-annotations –