2012-07-03 8 views
52

मैं कुछ परीक्षण लिखना चाहता हूं जो एक तैनात युद्ध की एक्सएमएल स्प्रिंग कॉन्फ़िगरेशन की जांच करें। दुर्भाग्य से कुछ बीन्स की आवश्यकता है कि कुछ पर्यावरण चर या सिस्टम गुण सेट हैं। @Context कॉन्फ़िगरेशन के साथ सुविधाजनक परीक्षण शैली का उपयोग करते समय वसंत बीन्स शुरू होने से पहले मैं पर्यावरण चर सेट कैसे कर सकता हूं?वसंत परीक्षणों में पर्यावरण चर या सिस्टम संपत्ति कैसे सेट करें?

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

अगर मैं एनोटेशन के साथ आवेदन संदर्भ कॉन्फ़िगर करते हैं, मैं एक हुक से पहले वसंत संदर्भ आरंभ नहीं हो जाता है, जहां मैं कुछ कर सकते हैं नहीं दिख रहा।

उत्तर

75

आप एक स्थिर प्रारंभकर्ता में सिस्टम संपत्ति को प्रारंभ कर सकते हैं: पहले वसंत आवेदन संदर्भ आरंभ नहीं हो जाता

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

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

} 

स्थिर प्रारंभकर्ता कोड निष्पादित किया जाएगा।

+8

मुझे मूर्खतापूर्ण - ठीक है, यह काम करेगा। इससे भी बेहतर: सिस्टम प्रॉपर्टी को सेट करने के लिए शायद '@ फ्रंटक्लास' विधि और इसे हटाने के लिए '@ आफ्टर क्लास' विधि भी काम करेगी, और अच्छी तरह से साफ हो जाएगी। (हालांकि इसे आजमाया नहीं गया।) –

+1

@BeforeClass का प्रयास किया - और यह परीक्षण गुणों में सेट किए जाने से पहले सिस्टम गुणों को सेट करने के लिए ठीक काम किया – wbdarby

+0

इसके लिए धन्यवाद। स्थैतिक चीज काम नहीं कर सका लेकिन @BeforeClass के साथ एक छोटी सी विधि काम किया! –

45

स्प्रिंग 4.1 के साथ शुरू करने का सही तरीका @TestPropertySource एनोटेशन का उपयोग करना है।

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

@TestPropertySource देखें Spring docs और Javadocs में।

+1

यह एनोटेशन एक गुण फ़ाइल पथ का भी समर्थन करता है। – MigDus

+2

मैं '@TestPropertySource (गुण = {"spring.cloud.config.label = सुविधा/शाखा"} का उपयोग कर परीक्षण के दौरान स्प्रिंग क्लाउड कॉन्फ़िगर क्लाइंट लेबल स्विच कर सकता हूं) –

+0

अच्छा जवाब, लेकिन दुख की बात है कि मेरे लिए काम नहीं किया वसंत 4.2.9, संपत्ति हमेशा खाली थी। केवल स्थिर ब्लॉक काम किया ... आवेदन गुणों के लिए काम किया, लेकिन सिस्टम गुणों के लिए नहीं। – Gregor

4

एक भी एक प्रणाली संपत्ति प्रारंभ करने के लिए एक परीक्षण ApplicationContextInitializer उपयोग कर सकते हैं:

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

और फिर वसंत संदर्भ कॉन्फ़िग फ़ाइल स्थानों के अलावा परीक्षण वर्ग पर यह कॉन्फ़िगर करें:

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

यह यदि सभी यूनिट परीक्षणों के लिए एक निश्चित सिस्टम प्रॉपर्टी सेट की जानी चाहिए तो रास्ता कोड डुप्लिकेशन से बचा जा सकता है।

0

आप अपने चर सभी परीक्षणों के लिए मान्य होना चाहते हैं, तो आप एक application.properties फ़ाइल अपने परीक्षण संसाधन निर्देशिका में (डिफ़ॉल्ट रूप से: src/test/resources) हो सकता है कुछ इस तरह दिखेगा जो:

MYPROPERTY=foo 

यह तो होगा लोड और उपयोग किया जाए जब तक कि आपके पास @TestPropertySource या इसी तरह की विधि के माध्यम से परिभाषाएं नहीं हैं - सटीक क्रम जिसमें गुण लोड किए जाते हैं, वसंत प्रलेखन अध्याय 24. Externalized Configuration में पाया जा सकता है।

संबंधित मुद्दे