2015-05-27 8 views
9

Ich mag catch.hpp wirklich zum Testen (https://github.com/philsquared/Catch). Ich mag seinen BDD-Stil und seine REQUIRE-Anweisungen, seine Version von Behauptungen. Fang ist jedoch kein spöttischer Rahmen.Google Mock und Catch.hpp Integration

Das Projekt, an dem ich arbeite, hat GMock und GTest, aber wir haben auch für ein paar Projekte Catch verwendet. Ich würde gerne GMock mit Fang verwenden.

Ich habe 2 Konflikte in den Headerdateien catch.hpp und gtests für die Makros FAIL und SUCCEED gefunden. Da ich nicht den TDD-Stil verwende, sondern den BDD-Stil, habe ich sie auskommentiert, habe ich überprüft, dass sie nirgendwo sonst in catch.hpp referenziert wurden.

Problem: Mit EXPECT_CALL() gibt nichts zurück oder haben Rückrufe zu wissen, ob die EXPECT bestanden. Ich mag wie etwas tun:

REQUIRE_NOTHROW(EXPECT_CALL(obj_a, an_a_method()).Times(::testing::AtLeast(1))); 

Frage: Wie kann ich einen Rückruf, wenn EXPECT_CALL fehlschlägt (oder einen Rückgabewert)

+3

[Trompeloeil] (https://github.com/rollbear/trompeloeil) klingt interessant und ist so konzipiert, mit Catch zu arbeiten. Persönlich würde ich das vor Googles Ungetüm versuchen. –

Antwort

8

EDIT: herausgefunden, wie es zu integrieren und stellt eine Beispiel in diesem gitHub Repo https://github.com/ecokeley/catch_gmock_integration


nach Stunden der ich die Suche ging nach gmock zurück und lesen, wenn ich nur ein paar. Fand diese in "Using Google Mock with Any Testing Framework":

::testing::GTEST_FLAG(throw_on_failure) = true; 
::testing::InitGoogleMock(&argc, argv); 

Dies verursacht eine Ausnahme bei einem Fehler geworfen werden. Sie empfehlen "Handling Test Events" für eine nahtlose Integration.

class MinimalistPrinter : public ::testing::EmptyTestEventListener { 
    // Called after a failed assertion or a SUCCEED() invocation. 
    virtual void OnTestPartResult(const ::testing::TestPartResult& test_part_result) { 
    printf("%s in %s:%d\n%s\n", 
     test_part_result.failed() ? "*** Failure" : "Success", 
     test_part_result.file_name(), 
     test_part_result.line_number(), 
     test_part_result.summary()); 
    } 
} 
0

Aufgrund der Makros FAIL und SUCCEED in Version 1.8.0 gmock hinzugefügt folgendes gtest.h:

#if !GTEST_DONT_DEFINE_FAIL 
    # define FAIL() GTEST_FAIL() 
#endif 

#if !GTEST_DONT_DEFINE_SUCCEED 
    # define SUCCEED() GTEST_SUCCEED() 
#endif 

So von GTEST_DONT_DEFINE_FAIL und GTEST_DONT_DEFINE_SUCCEED den Präprozessordefinitionen Hinzufügen Sie den Konflikt vermeiden