2012-04-20 12 views
11

में स्वचालित नकली तात्कालिकता मेरे पास एक स्प्रिंग एक्सएमएल बीन परिभाषा है जिसे मैं एकीकरण परीक्षण लिखना चाहता हूं। एक्सएमएल बीन परिभाषा एक बड़े अनुप्रयोग संदर्भ का हिस्सा है जहां ऐसी कई फाइलें <import> का उपयोग कर शामिल हैं। परिभाषा के अंदर, मैं कई बीन्स का संदर्भ देता हूं जो अन्य फाइलों से आ रहे हैं।स्प्रिंग जुनीट परीक्षण

मेरे एकीकरण परीक्षण के लिए मैं परिभाषा स्टैंडअलोन को तुरंत चालू करना चाहता हूं और अन्य सभी बीन्स के लिए मॉकिटो मोक्स का उपयोग करना चाहता हूं। अब तक, मैं कुछ इस तरह उपयोग कर रहा हूँ:

FooIntegrationTest.java

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration 
public class FooIntegrationTest { 
    @Autowired private ClassUnderTest underTest; 
    @Autowired private MockedClass mock; 

    @Test 
    public void testFoo() { 
    } 
} 

FooIntegrationTest-context.xml

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
    <import resource="part-to-test.xml" /> 

    <bean id="mockedClassReferencedByName" class="org.mockito.Mockito" factory-method="mock" c:classToMock="SomeMockedClass" /> 
    <bean class="org.mockito.Mockito" factory-method="mock" c:classToMock="OtherMockedClassReferencedByType" /> 
    <bean class="org.mockito.Mockito" factory-method="mock" c:classToMock="MockedClass" /> 
    ... 
</beans> 

मैं नहीं बल्कि थकाऊ मजाक खंड स्वचालित करने के लिए चाहते हैं : आदर्श रूप में, मैं उन सभी बीन्स को प्राप्त करना चाहता हूं जो एप्लिकेशन संदर्भ में स्वचालित रूप से मजाक नहीं पाए जाते हैं। part-to-test.xml@Autowired के साथ-साथ नाम संदर्भों का उपयोग करके सेट किए गए बीन्स का उपयोग करता है। मैं केवल एक्सएमएल बीन परिभाषा फाइलों का उपयोग करता हूं, और न ही @Configuration कक्षाओं और न ही @Component एनोटेशन का उपयोग करता हूं।

मैंने @ContextConfiguration(loader=...) में एक कस्टम संदर्भ लोडर का उपयोग करने के तरीके में देखा है, लेकिन मुझे अभी तक ऐसा करने के लिए उचित एक्सटेंशन बिंदु नहीं मिला है। Sprinockito इस समस्या को हल करने के लिए प्रतीत नहीं होता है।

क्या वहां कोई अन्य परियोजना है जो पहले से ही इस समस्या को हल करती है? यदि नहीं, तो मैं स्वचालित रूप से मॉक्स बनाने के लिए वसंत का विस्तार कहाँ करूं?

+0

क्या आपने मॉकिटो @ इंजेक्टमोक्स एनोटेशन की कोशिश की है? आपकी आवश्यकता से कम कैसे होता है? –

+0

@ डेविडवालेस '@ इंजेक्टमोक्स' यूनिट परीक्षणों के लिए बेहद अच्छी तरह से काम करता है, यानी एक विशेष कक्षा का परीक्षण जहां परीक्षण मॉक ऑब्जेक्ट्स का उपयोग कर रहा है। हालांकि, मैं स्प्रिंग बीन परिभाषा में संदर्भित सभी वस्तुओं का नकल करना चाहता हूं। इसका मतलब है कि मुझे स्प्रिंग एप्लिकेशन संदर्भ (संभावित रूप से नामित) मैक्स के साथ पॉप्युलेट करने की आवश्यकता है - मुझे पता नहीं है कि कैसे @ इंजेक्टमैक्स 'ऐसा करने में मदद करता है। –

+0

ठीक है, मैं इसके बारे में कुछ और सोचूंगा। –

उत्तर

3

यहां एक short article with a code example है। BeanDefinitionRegistryPostProcessor कार्यान्वयन प्रत्येक कमी बीन परिभाषा के लिए एक नकली वस्तु उत्पन्न करता है। पीढ़ी का हिस्सा MocksFactory के साथ किया जाता है, यहां an example for such a factory है।

+0

यह उत्तर समस्या से निपटने के लिए सही प्रारंभिक बिंदु था: 'बीनडिफिनिशन रजिस्ट्रीपोस्टप्रोसेसर' का उपयोग करना गायब बीन्स के लिए बीन परिभाषाओं का आत्मनिरीक्षण करना संभव बनाता है। मैंने सेटर्स का उपयोग करके इंजेक्शन वाले बीन्स का ख्याल रखने के लिए कोड उदाहरण बढ़ाया, लेकिन ऐसा एक्सटेंशन अपेक्षाकृत छोटा है। –

+0

दूसरा लिंक मर चुका है। R.I.P. पुराना लेख –

2

शायद ज़रुरत पड़े किसी को अब भी इस सवाल में रुचि है, मैं लेख आदि विरासत के साथ यवेस मार्टिन, @Inject के लिए समर्थन, ने उल्लेख में कोड विस्तार किया है ... और एक Github परियोजना यहाँ बनाया: https://github.com/rinoto/spring-auto-mock

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