2013-03-22 3 views
5

हमारे पास वसंत 3 में लिखा गया बड़ा आवेदन है। मुझे कुछ सेवा के जुनीट परीक्षण जांच व्यवहार को लिखने की आवश्यकता है। यह एक इकाई नहीं है बल्कि एक प्रणाली का हिस्सा है। कुछ सेवाएं और रिपोजिटरी एक साथ काम कर रही हैं -> अंदर इंजेक्शन सेम के बहुत सारे हैं। ऐप पहलुओं का भी उपयोग करता है।वसंत में जुनीट परीक्षण - अन्य कॉन्फ़िगरेशन कक्षाओं से बीन्स को ओवरराइड करना और अनदेखा करना

मेरा प्रश्न है। परीक्षण के इस मामले में कॉन्फ़िगरेशन और सेम का प्रबंधन कैसे करें? मुझे ऐप कॉन्फ़िगरेशन में परिभाषित बीन्स का उपयोग करने की आवश्यकता है और परीक्षणों में केवल एक एम्बेडेड डीबी के साथ काम करने के लिए दृढ़ता का उपयोग करके सेम को फिर से परिभाषित करना है। तो मुझे स्रोतों से बीन्स का उपयोग करने की आवश्यकता है क्योंकि उन्हें परिभाषित किया गया है और केवल कुछ कारणों को परेशान करने के लिए ओवरराइड (लगातार बीन्स, वेबसाइसेस का उपयोग करने वाले बीन्स, ...) परीक्षण पैकेज में मैंने एचएसक्यूएल के लिए डेटासोर्स का उपयोग करते हुए निरंतरता के लिए कॉन्फ़िगर क्लास निश्चित बीन्स बनाया है। लेकिन मुझे नहीं पता कि अगला क्या है। मैंने परीक्षण कॉन्फ़िगरेशन क्लास को एनोटेट करने की कोशिश की:

@Configuration 
@EnableAspectJAutoProxy 
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ, proxyTargetClass = true) 
@ComponentScan(basePackages = "com.example.our.app") 
public class MyTestConfig implements TransactionManagementConfigurer { 

संपूर्ण एप्लिकेशन स्कैन करने और src फ़ोल्डर से सेम की कॉन्फ़िगरेशन का उपयोग करने के लिए। लेकिन यह समस्या के कारण अन्य परीक्षणों से विन्यास भी लेता है। क्या यह पूरी अच्छी रणनीति है या नहीं? अब क्या - अन्य टेस्ट कॉन्फ़िगरेशन को हटाने के लिए फ़िल्टर को बहिष्कृत करें? या यह रणनीति पूरी तरह खराब है?

धन्यवाद

उत्तर

2

मुझे लगता है कि यहाँ का सबसे अच्छा तरीका का उपयोग करने के Spring profiles है। प्रोफाइल के साथ here now to use H2 for tests देखें।

+0

हाँ अच्छा बिंदु लेकिन आप होगा रहे हैं applicationContext.xml से जावा में कॉन्फ़िगरेशन को स्थानांतरित करने के लिए – vsingh

2

आप @ContextHierarchy एनोटेशन द्वारा प्रदान की गई विलय विलय कार्यक्षमता के साथ बीन्स को चुनिंदा रूप से ओवरराइट कर सकते हैं।

आदेश आपके उपयोग के मामले के लिए यह काम कर पाने के लिए आप एक आधार संदर्भ कि वसंत सेम के लिए अपने अनुप्रयोग को स्कैन करता है बनाना पड़ेगा में:

@Configuration 
@ComponentScan({"com.example.our.app"}) 
public class MyTestConfig implements TransactionManagementConfigurer { 

फिर एक आधार वर्ग कि इस संदर्भ और यह नाम का इस्तेमाल करता बनाने - यह नामित संदर्भों के साथ काम नहीं करेगा!:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextHierarchy({ 
    @ContextConfiguration(name="testContext", classes = MyTestConfig.class), 
}) 
public class BaseTest { 

और अंत में एक इकाई परीक्षण है कि आधार वर्ग एक परीक्षण विशिष्ट विन्यास के साथ व्यक्तिगत सेम अधिलेखित करने के लिए प्रदान करता है और एक ही नाम के तहत एक नया संदर्भ में परिभाषित करता है लिखें:

@ContextHierarchy(@ContextConfiguration(name="testContext", classes = OneUnitTest.Config.class)) 
    public class OneUnitTest extends AggroBaseTest { 
     @Configuration 
     static class Config {  
      .. 
     } 
0

तुम भी ओवरराइड कर सकते हैं एक और आयात

<beans> 
    <import resource="classpath*:applocationContext.xml" /> 
    <bean id="dataSourceFactory" class=com.demo.MyNewClass/> 
</beans> 

साथ और तुम कक्षा में अगर आप

this.applicationContext.getBean("dataSourceFactory"); 

वर्ग को पुनः प्राप्त करने के लिए, आप नए वर्ग के उदाहरण

आगे देखना होगा

<bean id="dataSourceFactory" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > 
    <property name="driverClassName" value="${jdbc.driverClassName}"/> 
    <property name="url" value="${jdbc.url}"/> 
    <property name="username" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
</bean> 

तो वहाँ अलग अलग तरीकों से आप डिफ़ॉल्ट व्यवहार को ओवरराइड कर सकते हैं

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