यह मैक्रो सिद्धांत का प्रदर्शन करता है।
typeid
तुलना एक विशेष उपयोग केस है, इसलिए इसका उपयोग करना या नहीं हो सकता है - यह मैक्रो को परीक्षण में असफल होने की अनुमति देता है, भले ही फेंक दिया गया अपवाद उस व्यक्ति से लिया गया हो जिसे आप परीक्षण कर रहे हैं। अक्सर आप यह नहीं चाहते हैं, लेकिन मैंने इसे किसी भी तरह फेंक दिया!
#define EXPECT_THROW(func, exceptionClass) \
{ \
bool caught = false; \
try { \
(func); \
} catch (exceptionClass& e) { \
if (typeid(e) == typeid(exceptionClass)) { \
cout << "Caught" << endl; \
} else { \
cout << "Derived exception caught" << endl; \
} \
caught = true; \
} catch (...) {} \
if (!caught) { cout << "Nothing thrown" << endl; } \
};
void throwBad()
{
throw std::bad_exception();
}
void throwNothing()
{
}
int main() {
EXPECT_THROW(throwBad(), std::bad_exception)
EXPECT_THROW(throwBad(), std::exception)
EXPECT_THROW(throwNothing(), std::exception)
return EXIT_SUCCESS;
}
रिटर्न:
Caught
Derived exception caught
Nothing thrown
QTest
के लिए अनुकूल करने के लिए आप एक QFAIL
के साथ विफल के लिए मजबूर करने की आवश्यकता होगी।
क्यूटी दुनिया में अपवाद बहुत आम नहीं हैं। इसके लिए QTest में afaik कोई विशिष्ट मैक्रो नहीं है, लेकिन आप क्विकिफ़ी के साथ परीक्षण को ट्रैक करने का प्रयास कर सकते हैं। वैकल्पिक रूप से आप क्यूटी के साथ Google टेस्ट का भी उपयोग कर सकते हैं (जो कि कई कारणों से, qtest imho से काफी बेहतर है) – TWE
हां, इस समय तक मैं महसूस कर रहा हूं कि gtest QTest से कहीं बेहतर है। धन्यवाद! – Killrazor
इसके अलावा, gtest gmock का समर्थन करता है जबकि QTest के लिए ऐसा कुछ भी नहीं है। क्यूटेस्ट वास्तव में केवल आरामदायक उपयोग के लिए है, न कि अच्छे यूटी के लिए। QTest से आपको केवल एक चीज चाहिए, यदि आप gtest का उपयोग करते हैं, तो QSignalSpy है। Gtest में अन्य सभी चीजें बहुत बेहतर हैं। – ixSci