2011-10-28 15 views
31

googletest C++ testing framework kullanıyorum. Normalde test yaparken metinsel çıktı şuna benzer: Ben googletest belgelerinde Logging Additional Information buldukGoogle Test'te ek çıktı yazdırma

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

:

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

Ben mesela çıkış aynı biçimde bazı ek veriler, istiyorum Ancak bu sadece standart çıktıya değil, XML çıktısına yapısal veri göndermek gibi görünüyor.

Bu formatta metin çıkaran birim testimin içinde arayabileceğim bir googletest işlevi var mı? Verileri cout'a manuel olarak gönderiyor, ancak normal renkli çıktı içermiyor, bu nedenle 13 boşluk veya her ne basıyorsa çıktıyı açık bir şekilde girmem gerekiyor.

+6

Faydalı cevap: http://stackoverflow.com/a/29155677/92957 – Eugene

cevap

9

Ayrıca, test özelliklerini yazdırmak için varsayılan yazıcı PrettyUnitTestResultPrinter için bir sarıcı yazabilirsiniz. Varsayılan yazıcıyı listeners.default_result_printer() (aşağıya bakınız) ile alabilirsiniz. Sen PrettyUnitTestResultPrinter::OnTestEnd()EmptyTestEventListener uygulamak ve yöntemini değiştirmek için (in gtest.cc) ve sonuçları özelliklerini kullanır: test_info.result()->GetTestProperty(i) XML çıkışı için yazıcı gibi:

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(); 
} 

Sonra testler için varsayılan dinleyici yerini alabilir içeri bitti gibi 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

Sadece stderr varsayılan test yapılandırmasında çalışacaktır.

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

Sorumun içinde söz yaptım ve çıktısını yazma bu şekilde yapar olağan renkli çıktıyı içermez. –

+2

Bu harika ama cout görünmüyor. – thang

+1

std :: cout benim için çalışmıyor ama std: cerr gösteriyor – user501743

0

Sadece linux da ansi renk kodları ile std::cout kullandık ama kodları kazanmak 10 yıldönümü güncellemesinden beri pencerelerde çalışmak inanıyoruz.

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

ya da sadece bir başlık dosyası ve bazı #define ifadeleri oluşturmak ve bu benim testlerde sayılabilir. Ayrıca metni biraz daha fazla yapışacak şekilde biçimlendirmek istiyorum.

#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 

Yani benim kod şöyle olacaktır:

cout << COUT_GTEST_MGT << "random seed = " << random_seed << ANSI_TXT_DFT << endl; 
İlgili konular