2009-07-23 16 views
3

Ich lerne im Moment, wie ich die Boost-Test-Bibliothek verwende, und ich kann nicht scheinen, dass Test-Suites korrekt funktionieren. Im folgenden Code schlägt 'test_case_1' fehl, aber es wird gemeldet, dass er in der Master Test Suite statt in 'test_suite_1' enthalten ist.Boost-Unit-Testfehler in falscher Testsuite erkannt

Wer weiß, was ich falsch mache?

#define BOOST_AUTO_TEST_MAIN 
#include <boost/test/auto_unit_test.hpp> 

BOOST_AUTO_TEST_SUITE(test_suite_1); 

BOOST_AUTO_TEST_CASE(test_case_1) { 
    BOOST_REQUIRE_EQUAL(1, 2); 
} 

BOOST_AUTO_TEST_SUITE_END(); 

edit:

Ovanes' Antwort führte mich besser die Suite Hierarchie zu verstehen - in diesem Fall test_suite_1 ist eine Unter Suite der Root-Suite, die standardmäßig den Namen ist 'Master-Test-Suite'. Die Standard-Logging zeigt nur die Root-Suite, die nicht das ist, was ich erwartet habe :)

Sie können den Root-Suite-Namen festlegen, indem Sie BOOST_TEST_MODULE - so eine alternative Version des obigen Beispiels, die die gibt erwartete Fehlermeldung ist:

+0

Ich bin froh, dass ich diese gefunden zu definieren, aber ich bin ganz auf dieses Verhalten gob-schmatzte . Da Sie "BOOST_TEST_MODULE" nur einmal verwenden können, heißt das nicht, dass es im Prinzip eine Suite pro Testdatei gibt? Und dass alle Testfehler als Mitglieder dieser Suite gemeldet werden, ohne Sub-Suite-Namen? Bestimmt vermisse ich hier etwas. Bearbeiten: Formatieren –

Antwort

2

Es hängt davon ab, wie Sie Ihren Logger konfigurieren, um den Bericht zu erstellen. Zum Beispiel vorbei an Ihr Beispiel --log_level = alle in der folgenden Ausgabe führen:

Running 1 test case... 
Entering test suite "Master Test Suite" 
Entering test suite "test_suite_1" 
Entering test case "test_case_1" 
d:/projects/cpp/test/main.cpp(9): fatal error in "test_case_1": critical check 1 == 2 failed [1 != 2] 
Leaving test case "test_case_1" 
Leaving test suite "test_suite_1" 
Leaving test suite "Master Test Suite" 

*** 1 failure detected in test suite "Master Test Suite" 

Hier ist der Link zu den Kommandozeilen-Konfigurationsoptionen von Boost Test Framework.

Grüße,
Ovanes

0

Auch, wenn Sie BOOST_TEST_MODULE definieren, brauchen Sie nicht BOOST_AUTO_TEST_MAIN