2010-03-30 17 views
37

क्या मेरे जावा एप्लिकेशन के अंदर से जुनीट परीक्षण चलाने में संभव है?मैं अपने जावा एप्लिकेशन के अंदर से जुनीट परीक्षण कैसे चला सकता हूं?

क्या परीक्षण ढांचे का उपयोग मैं कर सकता हूं (जैसे JUnit.jar?), या क्या मैं परीक्षण फाइलों को ढूंढने के लिए मजबूर हूं, विधियों का आह्वान करता हूं और अपवादों को ट्रैक करता हूं?

कारण मैं पूछ रहा हूं कि मेरे आवेदन को लॉन्च शुरू करने के लिए बहुत सारे काम की आवश्यकता है (निर्भरता और कॉन्फ़िगरेशन आदि) और बाहरी परीक्षण उपकरण (जैसे जुनीट चींटी कार्य) का उपयोग करने के लिए बहुत सारे काम की आवश्यकता होगी अप।

एप्लिकेशन शुरू करना आसान है और फिर एप्लिकेशन के अंदर मेरे परीक्षण चलाएं।

क्या कोई आसान परीक्षण ढांचा है जो जावा एप्लिकेशन के अंदर से परीक्षण और आउटपुट परिणाम चलाता है या क्या मुझे अपना खुद का ढांचा लिखने के लिए मजबूर किया गया है?

+0

आप अपने संसाधनों या जो कुछ भी नकली कर सकते हैं, चल जावा आवेदन में परीक्षण मेरे लिए कोई मतलब नहीं है .. jmock.org – ant

उत्तर

74

हाँ, आप कर सकते हैं। मैं उत्पादन प्रणालियों में नैदानिक ​​/ धूम्रपान परीक्षण चलाने के लिए इसे दो बार कर रहा था।इस कोड को लागू JUnit का महत्वपूर्ण हिस्सा का एक टुकड़ा है:

JUnitCore junit = new JUnitCore(); 
Result result = junit.run(testClasses); 

JUnit.main का उपयोग नहीं करते अपने आवेदन के अंदर, यह System.exit आह्वान के बाद परीक्षण पूरा हो जाएगा और इस प्रकार यह JVM प्रक्रिया बंद कर सकता है।

आप जुनीट के "नियमित" कंसोल आउटपुट (डॉट्स और सरल रिपोर्ट) को कैप्चर करना चाहते हैं। इसे आसानी से TextListener पंजीकृत करके किया जा सकता है (यह कक्षा इस सरल रिपोर्ट को प्रदान करती है)।

कृपया यह भी विधि के इस प्रकार का उपयोग कर कई जटिलताओं के बारे में पता होना:

किसी भी "परीक्षण रूपरेखा" के
  1. परीक्षण, इतना छोटा एक सहित, हालांकि काफी सरल भ्रमित हो सकता है। उदाहरण के लिए यदि आप परीक्षण करना चाहते हैं कि क्या आपका "टेस्ट फ्रेमवर्क" रिटर्न विफलता परिणाम तब होता है जब परीक्षणों में से कोई एक विफल हो जाता है, तो आप नमूना JUnit परीक्षण बना सकते हैं जो हमेशा विफल रहता है और "परीक्षण ढांचे" के साथ उस परीक्षण को निष्पादित करता है। इस मामले में परीक्षण मामले में असफलता वास्तव में परीक्षण डेटा है और इसे "सामान्य" जुनीट के रूप में निष्पादित नहीं किया जाना चाहिए। ऐसे परीक्षणों के उदाहरण के लिए आप जुनीट के आंतरिक परीक्षण मामलों का उल्लेख कर सकते हैं।

  2. यदि आप अपनी कस्टम रिपोर्ट तैयार/प्रदर्शित करना चाहते हैं तो आपको अपना खुद का RunListener पंजीकृत करना चाहिए, क्योंकि जुनीट द्वारा लौटाए गए परिणाम में पास किए गए परीक्षणों और परीक्षण विधि के बारे में जानकारी (सीधे) नहीं है (यह केवल "हार्डकोडेड" है परीक्षण Description का एक हिस्सा)।

+0

पर एक नज़र यह अद्भुत है ले लो। मैं कस्टम वेब सर्वर पर एक स्वचालित जुनीट टेस्ट सूट चलाने की कोशिश कर रहा हूं, इसलिए मैं इकाई परीक्षणों को लॉन्च करने और रात के परिणामों पर रिपोर्ट करने के लिए कुछ cronjobs सेट कर सकता हूं; यह वही है जो मैंने ढूंढने की आशा की थी। –

+1

आपके मुख्य में जुनीट शुरू करने के लिए कोड है और मानक आउटपुट में मूल आउटपुट है: 'जुनीटकोर जूनिटकोर = नया जुनीटकोर(); junit.addListener (नया टेक्स्ट लिस्टनर (System.out)); junit.run ( .class); 'प्रारूप के लिए खेद है, लेकिन यह एक टिप्पणी में मैं सबसे अच्छा कर सकता हूं। :) – RobMcZag

11

JUnit FAQ में दस्तावेज के रूप में:

public static void main(String args[]) { 
    org.junit.runner.JUnitCore.main("junitfaq.SimpleTest"); 
} 
2

JUnit एपीआई के अनुसार, JUnitCore जावा के अंदर परीक्षण निष्पादित करने के लिए कई तरीके हैं।

इसे इंगित करने के लिए टॉमस्लावा नासिक-अल्फिरेविक के लिए धन्यवाद।

http://junit.sourceforge.net/javadoc/org/junit/runner/JUnitCore.html

10

कारण है कि मैं पूछ रहा हूँ मेरी आवेदन शुरू लांच करने के लिए (आदि निर्भरता के बहुत सारे और विन्यास,) बहुत काम की आवश्यकता है और (JUnit की तरह एक बाहरी परीक्षण उपकरण का उपयोग है चींटी कार्य) को सेट अप करने के लिए बहुत सारे काम की आवश्यकता होगी।

आपको इन निर्भरताओं को आपके द्वारा परीक्षण किए जा रहे कोड से हटाने की आवश्यकता है। निर्भरता और विन्यास ठीक वही हैं जो आप परीक्षण ढांचे को लिखते समय टालने की कोशिश कर रहे हैं। प्रत्येक परीक्षण के लिए, आपको किसी एप्लिकेशन के सबसे छोटे टेस्टेबल भाग को लक्षित करना चाहिए।

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

यह पहले बहुत सारे काम की तरह लग सकता है, लेकिन इस प्रकार का रिफैक्टरिंग बिल्कुल आपके परीक्षण ढांचे को मांसपेशियों से बाहर करना चाहिए। आपको अपनी निर्भरताओं को कम करने के संदर्भ के रूप में सॉफ्टवेयर परीक्षण पर एक पुस्तक प्राप्त करने के लिए उपयोगी हो सकता है। यह आपके चल रहे एप्लिकेशन के अंदर से JUnit बूटस्ट्रैप करने की कोशिश करने से बहुत अधिक भुगतान करेगा।

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

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