2011-10-28 15 views
31

में अतिरिक्त आउटपुट प्रिंट करना मैं googletest C++ testing framework का उपयोग कर रहा हूं। आम तौर पर एक परीक्षण चलाने का शाब्दिक उत्पादन इस तरह दिखता है:Google टेस्ट

 
[ RUN  ] MyTest.Fuzz 
[   ] random seed = 1319760587 
[  OK ] MyTest.Fuzz (1867 ms) 

मैं googletest दस्तावेज में Logging Additional Information पाया है:

 
[ RUN  ] MyTest.Fuzz 
[  OK ] MyTest.Fuzz (1867 ms) 

मैं उत्पादन उसी प्रारूप में कुछ अतिरिक्त डेटा उदाहरण के लिए, चाहते हैं लेकिन यह केवल एक्सएमएल आउटपुट में संरचित डेटा भेजता है, न कि मानक कंसोल आउटपुट।

क्या कोई googletest फ़ंक्शन है जिसे मैं अपने यूनिट परीक्षण के अंदर कॉल कर सकता हूं जो इस प्रारूप में टेक्स्ट आउटपुट करता है? cout पर मैन्युअल रूप से डेटा भेजना, लेकिन इसमें सामान्य रंगीन आउटपुट शामिल नहीं है, इसलिए मुझे 13 रिक्त स्थान या जो कुछ भी प्रिंट करके आउटपुट को स्पष्ट रूप से इंडेंट करना होगा।

+6

सहायक जवाब: http://stackoverflow.com/a/29155677/92957 – Eugene

उत्तर

0

नहीं, हेडर के माध्यम से खोज की गई और मध्य में अपने स्वयं के लॉग जोड़ने के बारे में कुछ भी नहीं है। अनुरोध करने के लिए कुछ हो सकता है। यदि आप http://code.google.com/p/googletest/issues/list

पर ध्यान रखना चाहते हैं तो आप एक वृद्धि कार्य लॉग कर सकते हैं।

9

आप परीक्षण प्रिंटर को प्रिंट करने के लिए डिफ़ॉल्ट प्रिंटर PrettyUnitTestResultPrinter के लिए एक रैपर भी लिख सकते हैं। आप listeners.default_result_printer() (नीचे देखें) के साथ डिफ़ॉल्ट प्रिंटर प्राप्त कर सकते हैं। आप EmptyTestEventListener को लागू करने और प्रक्रिया में परिवर्तन करना होता PrettyUnitTestResultPrinter::OnTestEnd() (in gtest.cc) और परिणाम गुण का उपयोग करें: XML आउटपुट के लिए प्रिंटर की तरह test_info.result()->GetTestProperty(i):

String XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes(
    const TestResult& result) { 
    Message attributes; 
    for (int i = 0; i < result.test_property_count(); ++i) { 
    const TestProperty& property = result.GetTestProperty(i); 
    attributes << " " << property.key() << "=" 
     << "\"" << EscapeXmlAttribute(property.value()) << "\""; 
    } 
    return attributes.GetString(); 
} 

तो फिर आप अपने परीक्षण के लिए डिफ़ॉल्ट श्रोता की जगह ले सकता है जैसे कि यह में किया है google test sample:

UnitTest& unit_test = *UnitTest::GetInstance(); 
if (terse_output) { 
    TestEventListeners& listeners = unit_test.listeners(); 
    delete listeners.Release(listeners.default_result_printer()); 
    listeners.Append(new TersePrinter); 
} 
int ret_val = RUN_ALL_TESTS(); 
11

बस stderr पर प्रिंटिंग डिफ़ॉल्ट परीक्षण कॉन्फ़िगरेशन में काम करेगा।

std::cerr << "[   ] random seed = " << random_seed << std::endl; 
+1

क्या मैंने कहा कि मेरे सवाल में किया था, और उत्पादन लेखन इस तरह से करता है सामान्य रंगीन आउटपुट शामिल नहीं है। –

+2

यह बहुत अच्छा है लेकिन कॉउट दिखाई नहीं देता है। – thang

+1

std :: cout मेरे लिए काम नहीं करता है लेकिन std: cerr दिखाता है – user501743

0

मैं सिर्फ linux में एएनएसआई रंग कोड के साथ std::cout का इस्तेमाल किया है, लेकिन मेरा मानना ​​है कि कोड जीत 10 वीं वर्षगांठ अद्यतन के बाद से खिड़कियों में काम करते हैं।

std:cout << "\033[0;32m" << "[   ] " << "\033[0;0m" 
<< "random seed = " << random_seed << lend; 

या सिर्फ एक हेडर फाइल और कुछ #define बयान बना सकते हैं और इसे अपने परीक्षण में शामिल हैं। मैं पाठ को थोड़ा और भी छूने के लिए प्रारूपित करना चाहता हूं।

#define ANSI_TXT_GRN "\033[0;32m" 
#define ANSI_TXT_MGT "\033[0;35m" //Magenta 
#define ANSI_TXT_DFT "\033[0;0m" //Console default 
#define GTEST_BOX "[  cout ] " 
#define COUT_GTEST ANSI_TXT_GRN << GTEST_BOX //You could add the Default 
#define COUT_GTEST_MGT COUT_GTEST << ANSI_TXT_MGT 

तो मेरी कोड होगा:

cout << COUT_GTEST_MGT << "random seed = " << random_seed << ANSI_TXT_DFT << endl; 
संबंधित मुद्दे