2015-05-27 28 views
9

Test için catch.hpp'yi gerçekten seviyorum (https://github.com/philsquared/Catch). BDD stilini ve REQUIRE deyimlerini, onun önerilerini beğendim. Ancak, yakalama alaycı bir çerçeve ile gelmez.Google Mock ve Catch.hpp Entegrasyonu

Üzerinde çalıştığım projede GMock ve GTest var ama birkaç proje için de yakalandık. GMock'u catch ile kullanmak isterim.

catch.hpp dosyasında 2 çakışma bulundu ve FAIL ve SUCCEED makroları için başlık dosyalarını döndürdüm. TDD stilini kullanmadığımdan ancak BDD stili onları yorumladıktan sonra, catch.hpp'de başka bir yerde referans olmadıklarını kontrol ettim.

Sorun: EXPECT_CALL()'un kullanılması, EXPECT'in iletilip iletilmediğini öğrenmek için hiçbir şey döndürmez veya geri aramaları yoktur.

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

Soru: Ben böyle bir şey yapmak istiyorum EXPECT_CALL (veya bir dönüş değeri) başarısız olursa bir geri arama alabilirsiniz nasıl

+3

[trompeloeil] (https://github.com/rollbear/trompeloeil) ilginç görünüyor ve Catch ile çalışmak üzere tasarlanmıştır. Şahsen, bunu Google’ın belası olmadan denemeliyim. –

cevap

8

DÜZENLEME: entegre ve bir koymak nasıl çözdü I arama saat sonra bu github repo https://github.com/ecokeley/catch_gmock_integration


örnek gmock ve sadece bu konuda bir demet okumak için geri dönmüş. "Using Google Mock with Any Testing Framework" bu Bulunan:

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

Bu bir başarısızlık üzerine atılmasına bir duruma neden olur. Daha sorunsuz entegrasyon için "Handling Test Events"'u önerirler. Yani

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

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

itilaftan önleyecektir önişlemci tanımlara GTEST_DONT_DEFINE_FAIL ve GTEST_DONT_DEFINE_SUCCEED ekleyerek: Çünkü makro

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

FAIL ve sürümünde SUCCEED 1.8.0 gmock gtest.h için aşağıdaki eklendi