2012-09-23 14 views
5

मेरे पास बड़ी संख्या में टेस्ट केस हैं जो प्रत्येक टेस्ट पर निम्नलिखित एनोटेशन के साथ स्प्रिंग जुनीट सपोर्ट के साथ चलता है।स्प्रिंग + जुनीट टेस्ट कॉन्फ़िगर एनोटेशन वाले कस्टम एनोटेशन का निर्माण और उपयोग कैसे करें?

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations="classpath:spring/applicationContext.xml") 
@TransactionConfiguration(transactionManager="transactionManager") 
@Transactional 
@ActiveProfiles("test") 

प्रत्येक टेस्ट क्लास पर इन सभी टिप्पणियों को डालने के बजाय मैं एक कस्टम एनोटेशन बनाना चाहता हूं और इसका उपयोग करना चाहता हूं।

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations="classpath:spring/applicationContext.xml") 
@TransactionConfiguration(transactionManager="transactionManager") 
@Transactional 
@ActiveProfiles("test") 

@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE }) 
@Retention(RetentionPolicy.RUNTIME) 
@Inherited 
public @interface SpringJUnit4TestConfig { 

} 

लेकिन जब मैं इस कस्टम एनोटेशन का उपयोग करता हूं तो वसंत इंजेक्शन बिल्कुल नहीं हो रहा है।

@SpringJUnit4TestConfig 
public class UserServiceTest 
{ 
} 

मुझे यहां क्या याद आ रही है?

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

+0

मुझे केवल @Target ({ElementType.TYPE} का उपयोग करना चाहिए) मुझे नहीं लगता कि आप इसे किसी फ़ील्ड या पैरामीटर में उपयोग करेंगे, या आप करेंगे? – Koitoer

+0

आप सही हैं। यह कस्टम एनोटेशन केवल ElementType.TYPE पर आवेदन होना चाहिए। –

+0

मैं भी वही करना चाहता था। प्रश्न और उत्तर पढ़ना मैंने एक एनोटेशन बनाया जो '@ रनविथ' को छोड़कर सभी कॉन्फ़िगरेशन का उपयोग करता है और अब तक अच्छा काम कर रहा है। मैं प्रत्येक टेस्टकेस कक्षा पर '@RunWith (SpringJUnit4ClassRunner.class) 'का उपयोग करता हूं। – ykesh

उत्तर

2

मुझे नहीं लगता कि यह दृष्टिकोण काम करेगा, क्योंकि @RunWith जुनीट एनोटेशन है, इसलिए इसके लिए काम करने के लिए जुनीट एनोटेशन ट्रांजिटिव होना चाहिए।

जब एक वर्ग @RunWith साथ एनोटेट या एक वर्ग @RunWith साथ एनोटेट फैली है, JUnit वर्ग यह है कि वर्ग JUnit में बनाया गया धावक के बजाय में परीक्षण चलाने के लिए संदर्भ देता आह्वान करेंगे। हमने इस सुविधा को देर से विकास में जोड़ा। हालांकि यह शक्तिशाली लगता है कि हम धावक एपीआई को बदलने की उम्मीद करते हैं क्योंकि हम सीखते हैं कि लोग वास्तव में इसका उपयोग कैसे करते हैं। वर्तमान में आंतरिक कक्षाओं में से कुछ को परिष्कृत किया जाएगा और सार्वजनिक हो जाएगा।

तो परीक्षण करें कि जुनीट परीक्षण आविष्कार केवल विरासत कक्षाओं के लिए काम करता प्रतीत होता है।

वसंत का सवाल है, यह एक बात विन्यास स्थानों के लिए context configuration inheritance कहा जाता है का समर्थन करता है, मैं काफी यकीन है कि यह अन्य एनोटेशन प्रकार के लिए काम करना चाहिए नहीं कर रहा हूँ (कृपया, प्रलेखन के लिए मुझे इंगित करता है, तो आप अन्यथा लगता है) वास्तव में, यह परीक्षण कॉन्फ़िगरेशन क्लास विरासत के मामले में अन्य एनोटेशन के लिए काम करेगा क्योंकि @Transactional एनोटेशन स्वयं को इस मामले के लिए @Inherited के साथ घोषित किया गया है।

तो इस मामले में, यह जुनीट एनोटेशन के गायब होने के कारण नहीं चलता है।

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