में ASSERT और EXPECT का उपयोग करते हुए ASSERT_ * मैक्रोज़ परीक्षण केस को समाप्त करने का कारण बनता है, EXPECT_ * मैक्रोज़ इसके मूल्यांकन को जारी रखते हैं। मैं जानना चाहता हूं कि एक या दूसरे का उपयोग करना है या नहीं।GoogleTest
उत्तर
ASSERT
का उपयोग करें जब परीक्षण महत्वपूर्ण हो। (उदाहरण के लिए, यदि यह पास नहीं होता है तो शेष कार्यक्रम काम नहीं करेगा।) EXPECT
का उपयोग करें जब यह एक परीक्षण है जो असफल हो सकता है (और आपको अपना प्रोग्राम चलाने की अनुमति देगा।)
नियम अंगूठे का है: EXPECT
का उपयोग करें जब तक कि आपको परीक्षण के लिए पूरी तरह से काम करने के लिए कुछ चाहिए, इस मामले में आपको ASSERT
का उपयोग करना चाहिए क्योंकि यह अर्थहीन है।
यह primer भीतर गूँजती है:
आमतौर पर
EXPECT_*
पसंद किया जाता है, के रूप में वे एक से अधिक विफलताओं एक परीक्षण में सूचित किया जाना करने की अनुमति। हालांकि, आपकोASSERT_*
का उपयोग करना चाहिए यदि प्रश्न में दावा विफल होने पर जारी रखने के लिए यह समझ में नहीं आता है।
उपयोग EXPECT_
जब आप
- जब
- यह मतलब नहीं है जब जारी रखने के लिए अपने परीक्षण में एक से अधिक विफलता रिपोर्ट करना चाहते हैं
उपयोग
ASSERT_
दावा
चूंकि ASSERT_
विफल होने पर तुरंत आपके फ़ंक्शन को बंद कर देता है, संभव क्लीनअप कोड छोड़ दिया जाता है। अपने डिफ़ॉल्ट के रूप में EXPECT_
पसंद करें।
निम्न लिंक देखें: Effective C++ Testing Using GoogleTest (स्लाइड 23)। EXPECT बनाम एएसएसईआरटी के उपयोग पर एक अच्छा दिशानिर्देश/सलाह है।
पिछले जवाब के अलावा ...
ASSERT_
परीक्षण मामले के निष्पादन को समाप्त नहीं करता है। यह जो भी फ़ंक्शन का उपयोग किया जाता है, उससे लौटाता है। परीक्षण मामले में विफल होने के अलावा, यह return;
का मूल्यांकन करता है, और इसका मतलब है कि इसे void
के अलावा किसी अन्य चीज़ को वापस करने वाले फ़ंक्शन में उपयोग नहीं किया जा सकता है। जब तक आप संकलक चेतावनी के साथ ठीक न हों, वह है।
EXPECT_
परीक्षण मामले में विफल रहता है लेकिन return;
नहीं है, इसलिए इसे किसी भी वापसी प्रकार के कार्यों के अंदर उपयोग किया जा सकता है।
- 1. GoogleTest: परीक्षण कैसे छोड़ें?
- 2. googletest: कैसे सेटअप करें?
- 3. GoogleTest: एक परीक्षण से पर्यावरण तक पहुंच
- 4. googletest के साथ stdout/stderr कैप्चर कैसे करें?
- 5. श्रेणियों द्वारा Googletest यूनिट परीक्षणों को समूहित करना
- 6. googletest इकाई परीक्षणों को आमंत्रित करने के लिए Makefile.am लिखना
- 7. GoogleTest में सुविधाजनक विधि बराबर की तुलना में एक डबल तुलना के लिए?
- 8. msw के साथ mingw का उपयोग कर विंडोज़ पर googletest को संकलित कैसे करें?
- 9. Google टेस्ट और std :: वेक्टर रेंज अपवाद
- 10. क्या गूगल टेस्ट कर रहे हैं, मौत टेस्ट
- 11. Google टेस्ट
- 12. क्या विभिन्न कंपाइलर झंडे
- 13. एक क्रॉस प्लेटफॉर्म सी ++ प्रोजेक्ट
- 14. mingw और C++ 0x के साथ _stricmp मौजूद नहीं है?
- 15. सी ++ में बीडीडी की वर्तमान स्थिति क्या है?
- 16. उपकरण को एक समामेलन बनाने/सी/सी ++ के लिए लाइब्रेरी की सभी स्रोत फ़ाइलों को गठबंधन करने के लिए टूल?
- 17. सी ++ मॉक/टेस्ट बूस्ट :: asio :: io_stream- आधारित असिंच हैंडलर
- 18. एमएसटीएस्ट
- 19. मौजूदा प्रोजेक्ट
- 20. pthreads: कोड को कैसे जोर देना एक थ्रेड किए गए संदर्भ में चलाया जाता है
- 21. मेकफ़ाइल
- 22. एक यूनिट परीक्षण से वीसी ++ .EXE प्रोजेक्ट से कक्षाओं का संदर्भ देना .EXE प्रोजेक्ट
- 23. कोई परीक्षण जब cmake साथ gtest का उपयोग कर पाया/ctest
- 24. emacs गोले में सभी ansi रंग कोडों को स्ट्रिप्स
- 25. GoogleMock मेरा साझा_ptr क्यों लीक कर रहा है?
- 26. डेटा-संचालित परीक्षण खराब है?
- 27. क्या सी ++ में नकली ऑब्जेक्ट्स हमेशा वर्चुअल तरीके या टेम्पलेट की आवश्यकता होती है?
- 28. क्लैंग/मैकोज़ एक्स
मानक उदाहरण: कंटेनर की सामग्री की जांच करने से पहले आप इसका आकार स्वीकार करते हैं, क्योंकि उन वस्तुओं पर EXPECTATION की जांच करने के लिए यह समझ में नहीं आता है, जो मौजूद नहीं हो सकते हैं (इसके अलावा, यदि आप एनएच तत्व प्राप्त करने का प्रयास करते हैं तो आपके परीक्षण में सबसे अधिक संभावना दुर्घटना होगी खाली डिब्बा)। – chalup
यह नहीं है कि आप अपने _program_ को चलाने के लिए चाहते हैं या नहीं, यह इस बारे में है कि आप _test suite_ को जारी रखना जारी रखना चाहते हैं या नहीं। एक EXPECT विफलता का मतलब यह होना चाहिए कि जिस कोड का आप परीक्षण कर रहे हैं वह दोषपूर्ण है। एक एएसएसईआरटी विफलता का मतलब यह होना चाहिए कि परीक्षण सूट स्वयं दोषपूर्ण है या, जो कोड आप परीक्षण कर रहे हैं वह इतना गड़बड़ है कि इसका परीक्षण करने की कोशिश जारी रखने में कोई बात नहीं है। –