2012-07-03 23 views
52

Bir dağıtılan WAR'in XML Spring yapılandırmasını denetleyen bazı testler yazmak istiyorum. Ne yazık ki bazı fasulye bazı ortam değişkenleri veya sistem özelliklerinin ayarlanmasını gerektirir. @ContextConfiguration ile uygun test stilini kullanırken yay çekirdeklerinin ilklendirilmesinden önce bir ortam değişkenini nasıl ayarlayabilirim?Yay testlerinde ortam değişkeni veya sistem özelliği nasıl ayarlanır?

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:whereever/context.xml") 
public class TestWarSpringContext { ... } 

Ben ek açıklamalarla uygulama bağlamını yapılandırmak, ben bahar bağlam başlatılmadan önce bir şeyler yapabilirim kancayı görmüyorum.

cevap

75

Statik bir in başlatıcısı Sistem özelliğini başlatabilir: bahar uygulama bağlamı başlatılmadan önce

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:whereever/context.xml") 
public class TestWarSpringContext { 

    static { 
     System.setProperty("myproperty", "foo"); 
    } 

} 

statik başlatıcı kod çalıştırılacaktır.

+8

Aptal ben - Tamam, işe yarayacak. Daha da iyisi: Sistem özelliğini ayarlamak için '@ BeforeClass' yöntemi ve onu kaldırmak için' @ AfterClass' yöntemi de işe yarayacak ve güzel bir şekilde kendi kendini temizleyecektir. (Ancak, denemedim.) –

+1

@BeforeClass çalıştı - ve diğer özellikleri test örneğinde ayarlanmadan önce sistem özelliklerini ayarlamak için iyi çalıştı – wbdarby

+0

Bunun için teşekkürler. Statik şey işe yaramadı ama @BeforeClass ile küçük bir yöntem çalıştı! –

45

Bunu yapmak için doğru yol, Bahar 4.1 ile başlayarak, @TestPropertySource ek açıklamasını kullanmaktır. Spring docs ve Javadocs yılında

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:whereever/context.xml") 
@TestPropertySource(properties = {"myproperty = foo"}) 
public class TestWarSpringContext { 
    ...  
} 

Bkz @TestPropertySource.

+1

Bu ek açıklamanın özellikleri dosya yolunu da destekler. – MigDus

+2

Spring Cloud Config Client etiketini '@TestPropertySource (properties = {" spring.cloud.config.label = feature/branch "})' –

+0

kullanarak testler sırasında değiştirebilirim. Bahar 4.2.9, mülkiyet her zaman boştu. Sadece statik blok çalıştı ... Uygulama özellikleri için çalıştı, ancak sistem özellikleri için değil. – Gregor

4

biri de bir sistem özelliği başlatmak için bir test ApplicationContextInitializer kullanabilirsiniz:

public class TestApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> 
{ 
    @Override 
    public void initialize(ConfigurableApplicationContext applicationContext) 
    { 
     System.setProperty("myproperty", "value"); 
    } 
} 

ve ardından Bahar bağlam yapılandırma dosyası konumları ek olarak deney sınıfı yapılandırmak:

@ContextConfiguration(initializers = TestApplicationContextInitializer.class, locations = "classpath:whereever/context.xml", ...) 
@RunWith(SpringJUnit4ClassRunner.class) 
public class SomeTest 
{ 
... 
} 

Bu Tüm birim testleri için belirli bir sistem özelliği ayarlanması gerekiyorsa yol kodu çoğaltılması önlenebilir. Eğer değişkenler tüm testler için geçerli olmasını istiyorsanız

0

, (varsayılan olarak: src/test/resources) test kaynakları dizininde bir application.properties dosya olabilir şuna benzer hangi:

MYPROPERTY=foo 

Bu daha sonra olacak @TestPropertySource veya benzeri bir yöntemle tanımlarınız olmadıkça yüklenmeli ve kullanılmalıdır - özelliklerin yüklendiği tam sıra, 24. Externalized Configuration Yay belgeleri belgesinde bulunabilir.

İlgili konular