2010-04-02 11 views
30

में ASSERT और EXPECT का उपयोग करते हुए ASSERT_ * मैक्रोज़ परीक्षण केस को समाप्त करने का कारण बनता है, EXPECT_ * मैक्रोज़ इसके मूल्यांकन को जारी रखते हैं। मैं जानना चाहता हूं कि एक या दूसरे का उपयोग करना है या नहीं।GoogleTest

उत्तर

33

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

नियम अंगूठे का है: EXPECT का उपयोग करें जब तक कि आपको परीक्षण के लिए पूरी तरह से काम करने के लिए कुछ चाहिए, इस मामले में आपको ASSERT का उपयोग करना चाहिए क्योंकि यह अर्थहीन है।


यह primer भीतर गूँजती है:

आमतौर पर EXPECT_* पसंद किया जाता है, के रूप में वे एक से अधिक विफलताओं एक परीक्षण में सूचित किया जाना करने की अनुमति। हालांकि, आपको ASSERT_* का उपयोग करना चाहिए यदि प्रश्न में दावा विफल होने पर जारी रखने के लिए यह समझ में नहीं आता है।

+7

मानक उदाहरण: कंटेनर की सामग्री की जांच करने से पहले आप इसका आकार स्वीकार करते हैं, क्योंकि उन वस्तुओं पर EXPECTATION की जांच करने के लिए यह समझ में नहीं आता है, जो मौजूद नहीं हो सकते हैं (इसके अलावा, यदि आप एनएच तत्व प्राप्त करने का प्रयास करते हैं तो आपके परीक्षण में सबसे अधिक संभावना दुर्घटना होगी खाली डिब्बा)। – chalup

+1

यह नहीं है कि आप अपने _program_ को चलाने के लिए चाहते हैं या नहीं, यह इस बारे में है कि आप _test suite_ को जारी रखना जारी रखना चाहते हैं या नहीं। एक EXPECT विफलता का मतलब यह होना चाहिए कि जिस कोड का आप परीक्षण कर रहे हैं वह दोषपूर्ण है। एक एएसएसईआरटी विफलता का मतलब यह होना चाहिए कि परीक्षण सूट स्वयं दोषपूर्ण है या, जो कोड आप परीक्षण कर रहे हैं वह इतना गड़बड़ है कि इसका परीक्षण करने की कोशिश जारी रखने में कोई बात नहीं है। –

14

उपयोग EXPECT_ जब आप

  • जब

    • यह मतलब नहीं है जब जारी रखने के लिए अपने परीक्षण में एक से अधिक विफलता रिपोर्ट करना चाहते हैं

    उपयोग ASSERT_ दावा

विफल रहता है

चूंकि ASSERT_ विफल होने पर तुरंत आपके फ़ंक्शन को बंद कर देता है, संभव क्लीनअप कोड छोड़ दिया जाता है। अपने डिफ़ॉल्ट के रूप में EXPECT_ पसंद करें।

4

निम्न लिंक देखें: Effective C++ Testing Using GoogleTest (स्लाइड 23)। EXPECT बनाम एएसएसईआरटी के उपयोग पर एक अच्छा दिशानिर्देश/सलाह है।

0

पिछले जवाब के अलावा ...

ASSERT_ परीक्षण मामले के निष्पादन को समाप्त नहीं करता है। यह जो भी फ़ंक्शन का उपयोग किया जाता है, उससे लौटाता है। परीक्षण मामले में विफल होने के अलावा, यह return; का मूल्यांकन करता है, और इसका मतलब है कि इसे void के अलावा किसी अन्य चीज़ को वापस करने वाले फ़ंक्शन में उपयोग नहीं किया जा सकता है। जब तक आप संकलक चेतावनी के साथ ठीक न हों, वह है।

EXPECT_ परीक्षण मामले में विफल रहता है लेकिन return; नहीं है, इसलिए इसे किसी भी वापसी प्रकार के कार्यों के अंदर उपयोग किया जा सकता है।

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