2015-05-27 11 views
9

Mi piace molto il catch.hpp per i test (https://github.com/philsquared/Catch). Mi piace il suo stile BDD e le sue dichiarazioni REQUIRE, la sua versione di asserzioni. Tuttavia, la cattura non viene con una struttura beffarda.Integrazione di Google Mock and Catch.hpp

Il progetto a cui sto lavorando ha GMock e GTest ma abbiamo utilizzato anche alcuni progetti. Mi piacerebbe usare GMock con la cattura.

Ho trovato 2 conflitti nei file di intestazione catch.hpp e gtests per le macro FAIL e SUCCEED. Dal momento che non sto usando lo stile TDD ma invece lo stile BDD li ho commentati, ho controllato che non fossero referenziati da nessun'altra parte in catch.hpp.

Problema: l'utilizzo di EXPECT_CALL() non restituisce nulla o dispone di callback per sapere se è trascorso l'EXPECT. Voglio fare qualcosa di simile:

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

Domanda: Come posso ottenere un callback se EXPECT_CALL fallisce (o un valore di ritorno)

+3

[trompeloeil] (https://github.com/rollbear/trompeloeil) sembra interessante ed è progettato per funzionare con Catch. Personalmente, ci proverei prima del colosso di Google. –

risposta

8

EDIT: capito come integrare e porre esempio in questo github repo https://github.com/ecokeley/catch_gmock_integration


Dopo ore di ricerca sono tornato a gmock e appena letto un mucchio su di esso. Ho trovato questo in "Using Google Mock with Any Testing Framework":

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

Ciò causa un'eccezione per essere gettato in un fallimento. Raccomandano "Handling Test Events" per un'integrazione più perfetta.

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

A causa delle macro FAIL e avere successo nella versione 1.8.0 gmock aggiunto il testo seguente gtest.h:

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

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

Quindi con l'aggiunta di GTEST_DONT_DEFINE_FAIL e GTEST_DONT_DEFINE_SUCCEED alle definizioni del preprocessore eviterete il conflitto

Problemi correlati