2012-02-07 4 views
37

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

क्या इस तरह से प्रदर्शन का परीक्षण करने के लिए जुनीट सही उपकरण है? इकाई (विधि और वर्ग) स्तर पर प्रदर्शन का परीक्षण करने के लिए बेहतर उपकरण हैं?

उत्तर

37

बेहतर दृष्टिकोण हो सकते हैं, लेकिन कुछ ढांचे भी हैं जो जुनीट के साथ बेंचमार्किंग को लागू करने में मदद करते हैं। कुछ उपयोगी प्रथाएं गर्मजोशी से चलती हैं, सांख्यिकीय मूल्यांकन। पर JUnitBenchmarks और JUnitPerf

संपादित लग रहा है के बाद से सवाल कहा गया है JUnitBenchmarks पदावनत किया गया है की तरह एक नजर डालें। प्रोजेक्ट के रखरखावकर्ता JMH पर जाने की अनुशंसा करते हैं। हेड-अप के लिए बैरी एनएल धन्यवाद।

+1

मैंने इसे स्वीकार कर लिया क्योंकि मैं और मेरी टीम के पास इन विकल्पों के साथ जुनीट एकीकरण के लिए एक मजबूत संबंध है। @ पेंजेना के पास जूनिट एकीकरण के बेंचमार्किंग के लिए एक अच्छा जवाब था। – Freiheit

+1

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

+0

कूल, खुशी है कि यह उत्तर अभी भी उपयोगी है :) – kostja

21

सं। जुनीट इकाई परीक्षण के लिए डिज़ाइन किया गया है। जावा में प्रदर्शन परीक्षण लिखते समय ऐसी कई चीजें हैं जिनकी देखभाल की जानी चाहिए। Google Caliper का उपयोग करें जो विशेष रूप से माइक्रो-बेंचमार्क परीक्षण लिखने के लिए डिज़ाइन किया गया है। How do I write a correct micro-benchmark in Java?

+0

बिल्कुल मैं जो सिफारिश करने वाला था :) – Brice

+0

Google कैलिपर एक सफल प्रोजेक्ट प्रतीत नहीं होता है। वे अभी भी 2 साल से बीटा में हैं। – JeanValjean

6

आपका परीक्षण पर

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

यदि आपको वास्तविक प्रदर्शन परीक्षण की आवश्यकता है तो जेएमटर के बारे में सोचें।

-5

JUnit अधिक इकाई परीक्षण के लिए डिज़ाइन किया गया है, हो सकता है TestNG इस मामले में एक बेहतर विकल्प हो जाएगा, विशेष रूप से, अपने @Dataprovider सुविधा:

//This method will provide data to any test method that declares that its Data Provider 
//is named "test1" 
@DataProvider(name = "test1") 
public Object[][] createData1() { 
return new Object[][] { 
    { "Cedric", new Integer(36) }, 
    { "Anne", new Integer(37)}, 
}; 
} 

//This test method declares that its data should be supplied by the Data Provider 
//named "test1" 
@Test(dataProvider = "test1") 
public void verifyData1(String n1, Integer n2) { 
System.out.println(n1 + " " + n2); 
} 

यहाँ specific doc है।

+2

के अनुसार उत्तर अपडेट किया गया है JUnit बहुत समान @ पैरामीटरकृत का समर्थन करता है। – nes1983