कैसे अमरूद इकाई परीक्षण स्वचालित रूप से उत्पन्न हुए हैं?


31

अमरूद में यूनिट टेस्ट के मामले स्वतः उत्पन्न होते हैं :

अमरूद में इकाई परीक्षणों की संख्या बहुत अधिक है: जुलाई 2012 तक, अमरूद-परीक्षण पैकेज में 286,000 से अधिक व्यक्तिगत परीक्षण मामले शामिल हैं। इनमें से अधिकांश स्वचालित रूप से उत्पन्न होते हैं, जो हाथ से नहीं लिखे जाते हैं, लेकिन अमरूद का परीक्षण कवरेज बेहद संपूर्ण है, विशेष रूप से com.google.common.collect के लिए।

वे कैसे उत्पन्न हुए थे? उन्हें डिजाइन और तैयार करने के लिए किन तकनीकों और तकनीकों का उपयोग किया गया था?


मुझे याद है कि इस विषय को छूने वाले कुछ Google दोस्त ने एक बात देखी। नाम के बारे में कोई सुराग नहीं, हालांकि, कुछ जावा सम्मेलन में मुझे लगता है कि बात थी
Zavior

3
पैकेज com.google.common.collect.testing के पास अपने नाम में "जेनरेटर" के साथ बहुत सी कक्षाएं हैं - यह परीक्षण पीढ़ी के लिए एक रूपरेखा जैसा दिखता है। परीक्षणों के लिए "कंकाल" या "आधार वर्ग" के रूप में प्रलेखित कक्षाओं के साथ उप-पैकेज भी हैं ...
gnat

1
@gnat हां, मुझे यकीन था कि मैंने इसे कहीं देखा है। com.google.common.collect.testing.features उदाहरण के लिए tfeatures / बाधाओं को दर्शाता है कि एक संग्रह वर्ग को संतुष्ट होना चाहिए, और एक परीक्षण मामला उनमें से एक संयोजन है। इस तरह से वे कर सकते हैं parametrize परीक्षण
dzieciou


इस सवाल पर समुदाय का बहुत ध्यान गया लेकिन अब तक कोई उचित जवाब नहीं मिला है, इसलिए मैंने मार्टिन के सुझाव का पालन किया है और इसे यहां रखा है: sqa.stackexchange.com/questions/5214/…
dzieciou 8

जवाबों:


8

इस बड़े पैमाने पर परीक्षणों का एक बड़ा हिस्सा अमरूद संग्रह कार्यान्वयन के लिए है। उन्होंने जेनेरिक परीक्षण लिखे हैं जो संग्रह इंटरफेस को पूरी तरह से परखते हैं, और यह कार्यान्वयन के लिए एक सूट उत्पन्न करता है। उदाहरण के लिए, कहा जाता कक्षाओं के लिए देखें, CollectionAddAllTester, ListIndexOfTester

यह सब एक पुस्तकालय द्वारा समर्थित है जिसे टेस्टलिब कहा जाता है, जो अमरूद के हिस्से के रूप में जहाज करता है। यह काफी सामान्य है। यह किसी भी इंटरफ़ेस (न केवल संग्रह) के लिए सामान्य परीक्षण लिखने का समर्थन करता है। आप Featureसंभावित कार्यान्वयन को निर्दिष्ट कर सकते हैं और उन का परीक्षण कर सकते हैं (जैसे कि यदि आपका सेट असम्बद्ध है, तो आप इससे भिन्न परिणाम की अपेक्षा करते हैं set.add()), और जब आप परीक्षण चलाते हैं तो आप निर्दिष्ट करते हैं कि आपके कार्यान्वयन का समर्थन कौन करता है।

यह JUnit 3 पर आधारित है। 4 नहीं। आम तौर पर, आपके पास TestCaseनामित तरीकों से भरा एक वर्ग है testSomething(), और JUnit उन्हें प्रतिबिंबित रूप से चलाता है। टेस्टलिब लाइब्रेरी इन परीक्षणों के चलने में हुक करती है ताकि जीवनचक्र इस तरह दिखे:

  • प्रत्येक कार्यान्वयन के लिए आप परीक्षण करना चाहते हैं
  • प्रत्येक (लागू) परीक्षण विधि के लिए
  • TestCaseउदाहरण बनाएँ
  • इनिशियलाइज़ TestSubjectGenerator- यह टेस्टलिब इंटरफ़ेस है जिसे आप विस्तारित करते हैं जहां आप वास्तव में टेस्ट विषय बनाते हैं
  • चिंतनपूर्वक परीक्षण विधि चलाएं। इस पद्धति के दौरान, getSubjectGenerator()परीक्षण विषय तक पहुंच देता है

कुंजी बिट अतिरिक्त प्रारंभिक चरण है जो उन्हें जेनेरिक परीक्षण मामले में एक विशिष्ट परीक्षण विषय को इंजेक्ट करने की अनुमति देता है।

मैंने अपने स्वयं के इंटरफेस के लिए टेस्टीब जनरेटिंग स्वीट्स लिखने के तरीके पर एक पोस्ट लिखा था

( Sqa साइट पर भी इसी सवाल पर पोस्ट किया गया ।)


6

यूनिट टेस्ट जनरेटर हैं। उदाहरण के लिए, .NET दुनिया में, Microsoft Pex जैसा कुछ कर सकता है।

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


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

और मुझे पता है कि खुश रास्ते के लिए परीक्षण उत्पन्न करने के तरीके और उपकरण हैं (उदाहरण के लिए, इस उत्तर को देखें ), लेकिन मुझे यह दिलचस्पी है कि यह अमरूद के विशेष मामले में कैसे किया गया
dzieciou
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.