GoogleTest में विशिष्ट परीक्षण मामले कैसे चलाएं


125

मैं अपनी परियोजना के लिए एक फ़ंक्शन / विधि लिखने की कोशिश कर रहा हूं, जो उपयोगकर्ता से पूछेगा कि आप कौन से परीक्षण मामले चलाने जा रहे हैं? यह नीचे की तरह दिखता है ...

Test_Cases_1
         |_TestNo1
         |_TestNo2....so on
Test_Cases_2
         |_TestNo1
         |_TestNo2....so on
....
....so on
Test_Cases_N
         |_TestNo1
         |_TestNo2....so on

इसलिए, परियोजना को चलाने के दौरान अब चुनौती यह है कि मुझे शीघ्रता करनी चाहिए कि आप सभी परीक्षण मामलों को निष्पादित करना चाहते हैं? अगर मैं चयन Test_Cases_1और Test_Cases_N। फिर इसे इन दो परीक्षण मामलों को निष्पादित करना चाहिए और अन्य सभी को बाहर करना चाहिए Test_Cases_2 to ....। परिणाम विंडो में भी मैं के परिणामों को देखने के लिए करना चाहते Test_Cases_1हैं और Test_Cases_N

इसलिए, यदि मैं GoogleTest देखूंगा, तो एक विधि है test_case_to_run_count(); लेकिन सभी test casesTest_F () पद्धति से पंजीकृत हो रहे हैं। इसलिए, मैंने बहुत विश्लेषण किया, लेकिन फिर भी कोई हल नहीं निकला। क्रिप्या मेरि सहायता करे।

जवाबों:


181

Google परीक्षण चलाने के लिए आप उन्नत विकल्पों का उपयोग कर सकते हैं ।

केवल कुछ यूनिट परीक्षणों को चलाने के लिए आप --gtest_filter=Test_Cases1*कमांड लाइन विकल्प का उपयोग मूल्य के साथ कर सकते हैं जो कई परीक्षणों के साथ मिलान के लिए *और ?वाइल्डकार्ड स्वीकार करता है । मुझे लगता है कि यह आपकी समस्या को हल कर देगा।

युपीडी:

खैर, सवाल यह था कि विशिष्ट परीक्षण मामलों को कैसे चलाया जाए । आपके GUI के साथ gtest का एकीकरण एक और बात है, जिसे मैं वास्तव में टिप्पणी नहीं कर सकता, क्योंकि आपने अपने दृष्टिकोण का विवरण नहीं दिया था। हालाँकि मेरा मानना ​​है कि निम्नलिखित दृष्टिकोण एक अच्छी शुरुआत हो सकती है:

  1. के साथ परीक्षण चलाकर सभी टेस्टकेस प्राप्त करें --gtest_list_tests
  2. इस डेटा को अपने GUI में पार्स करें
  3. परीक्षण मामलों का चयन करें जो आप आरओ रन चाहते हैं
  4. विकल्प के साथ परीक्षण निष्पादन योग्य चलाएँ --gtest_filter

मैं इसकी सलाह दूंगा, और यदि आपको एक प्रॉम्प्ट-आधारित प्रणाली की आवश्यकता है, तो मैं सुझाव दूंगा कि एक रैपर स्क्रिप्ट बनाई जाए जो उपयोगकर्ता इनपुट प्राप्त करे और तदनुसार परीक्षण कार्यक्रम चलाए।
बॉयसी

@nogard: हाँ, तुम ठीक कह रहे हैं, लेकिन मेरा / हमारा उद्देश्य एक जीयूआई है, जो होगा करने के लिए है Treeकी TestCasesऔर TestNo। तो, क्या आपको लगता है कि --gtest_filter=..मदद मिलेगी?
रस्मी रंजन नायक

@nogard: मदद के लिए बहुत बहुत धन्यवाद ... मैं आगे बढ़ूंगा जैसा कि आपने निर्देशित किया है .. मैं एक बार जब मैं करूँगा तो आपको बता दूंगा।
रसमी रंजन नायक

1
@nogard: जैसा आपने निर्देशित किया है, मैं वैसा ही कर रहा हूं; int main(int argc, char **argv) { //::testing::GTEST_FLAG(list_tests) = true; // For Testing InitGoogleTest(&argc, argv); ::testing::GTEST_FLAG(list_tests) = true; ........ RUN_ALL_TEST();...}लेकिन यह केवल टेस्टकेस और टेस्टनो को प्रिंट करता है। और लेकिन यह परीक्षण नहीं चलाता है। तो, अब मैं परीक्षण कैसे चला सकता हूं?
रस्मी रंजन नायक

@RasmiRanjanNayak: मैंने मुख्य को बिल्कुल नहीं बदलने का प्रस्ताव रखा। मैं दो बार परीक्षण चलाने का प्रस्ताव करता हूं: 1 बार --gtest_list_tests के साथ चलने के लिए, फिर विकल्प के साथ चयनित परीक्षणों के लिए 2 रन --gtest_filter
nogard

91

संक्षेप @Rasmi रंजन नायक और @nogard जवाब और एक अन्य विकल्प जोड़ने:

कंसोल पर

आपको ध्वज का उपयोग करना चाहिए --gtest_filter, जैसे

--gtest_filter=Test_Cases1*

(आप इसे संपत्तियों में भी कर सकते हैं। विन्यास गुण | डिबगिंग | कमांड आर्गुमेंट्स)

पर्यावरण पर

आप चर सेट करना होगा GTEST_FILTERकी तरह

export GTEST_FILTER = "Test_Cases1*"

कोड पर

आपको एक ध्वज स्थापित करना चाहिए filter, जैसे

::testing::GTEST_FLAG(filter) = "Test_Cases1*";

ऐसा है कि आपका मुख्य कार्य कुछ इस तरह हो जाता है

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    ::testing::GTEST_FLAG(filter) = "Test_Cases1*";
    return RUN_ALL_TESTS();
}

आप जिस स्ट्रिंग का उपयोग कर रहे हैं उसके सिंटैक्स पर अधिक जानकारी के लिए टेस्ट की एक सबसेट रनिंग अनुभाग देखें ।


6
बहुत उपयोगी भाग "कोड पर" !! यह वही है जिसे मैं देख रहा था!!
Iero

28

अंत में मुझे कुछ जवाब मिला, ::test::GTEST_FLAG(list_tests) = true;// आपके प्रोग्राम से, न कि wrt कंसोल।

अगर आप --gtest_filter =*; /* =*, =xyz*... etc*/// का उपयोग करना चाहते हैं, तो आपको उन्हें कंसोल में उपयोग करने की आवश्यकता है।

इसलिए, मेरी आवश्यकता उन्हें प्रोग्राम से उपयोग करने के लिए है न कि कंसोल से।

Updated:-

अंत में मुझे प्रोग्राम से उसी को अपडेट करने का जवाब मिला।

 ::testing::GTEST_FLAG(filter) = "*Counter*:*IsPrime*:*ListenersTest.DoesNotLeak*";//":-:*Counter*";
      InitGoogleTest(&argc, argv);
RUN_ALL_TEST();

तो, सभी उत्तर के लिए धन्यवाद।

आप लोग महान हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.