2013-05-18 16 views
10

Próbuję zapoznać się z szyderczym schematem Google, dzięki czemu mogę łatwiej zastosować niektóre TDD do mojego rozwoju C++. Mam następujący interfejs:Google Mock Destructor

#include <string> 

class Symbol { 
public: 
    Symbol (std::string name, unsigned long address) {} 
    virtual ~Symbol() {} 
    virtual std::string getName() const = 0; 
    virtual unsigned long getAddress() const = 0; 
    virtual void setAddress(unsigned long address) = 0; 
}; 

Chcę sprawdzić, czy destruktor jest wywoływany podczas usuwania instancji. Więc mam następujące klasy MockSymbol:

#include "gmock/gmock.h" 
#include "symbol.h" 

class MockSymbol : public Symbol { 
    public: 
     MockSymbol(std::string name, unsigned long address = 0) : 
      Symbol(name, address) {} 
     MOCK_CONST_METHOD0(getName, std::string()); 
     MOCK_CONST_METHOD0(getAddress, unsigned long()); 
     MOCK_METHOD1(setAddress, void(unsigned long address)); 
     MOCK_METHOD0(Die, void()); 
     virtual ~MockSymbol() { Die(); } 
}; 

Uwaga: Mam pominięta include strażników w powyższym ale są one w moich plikach nagłówkowych.

Nie byłem w stanie dojść do punktu, w którym faktycznie testuję cokolwiek. Mam następujący:

#include "gmock/gmock.h" 
#include "MockSymbol.h" 

TEST(SymbolTableTests, DestructorDeletesAllSymbols) { 
    ::testing::FLAGS_gmock_verbose = "info"; 
    MockSymbol *mockSymbol = new MockSymbol("mockSymbol"); 
    EXPECT_CALL(*mockSymbol, Die()); 
} 

Kiedy wykonać mojego testu biegacza, inne moje testy wykonać i przekazać jak oczekuję im. Jednak, gdy powyższe badanie wykonuje się następujący błąd:

SymbolTableTests.cpp: 11: EXPECT_CALL (* mockSymbol, Die()) wywołany winy segmentacji (rdzeń po cenach dumpingowych)

Spędziłem ostatnie kilka godzin przeszukiwania Google i próbowania różnych rzeczy, ale wiedzieć, że skorzystają. Czy ktoś ma jakieś sugestie?

+0

Nie podano żadnej (domyślnej) akcji dla 'Die()' lub żadnej z innych wyśmianych metod ... –

+0

Zgodnie z [dokumentacją] (https://code.google.com/p/googlemock/wiki/ CheatSheet # Setting_Default_Actions), nie powinienem określać domyślnej akcji, ponieważ wszystkie moje metody używają jednego z typów pierwotnych. Czy czegoś brakuje? –

+4

Używam Cygwin na Windows 7. Po pewnym kopaniu, stwierdziłem, że ustawienie gtest_disable_pthreads na ON w mojej konfiguracji kompilacji rozwiązuje problem. –

Odpowiedz

4

Znalazłem, że ustawienie gtest_disable_pthreads na ON w mojej konfiguracji kompilacji rozwiązuje problem.