2013-05-18 6 views
10

Ich versuche, mich mit dem spottenden Framework von Google vertraut zu machen, damit ich etwas TDD leichter auf meine C++ - Entwicklung anwenden kann. Ich habe die folgende Schnittstelle: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; 
}; 

Ich möchte sicherstellen, dass der Destruktor aufgerufen wird, wenn eine Instanz gelöscht. Also ich habe folgende MockSymbol Klasse:

#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(); } 
}; 

Anmerkung: Ich weggelassen habe die Wachen in der oben ist, aber sie sind in meinen Header-Dateien.

Ich war nicht in der Lage, zu einem Punkt zu kommen, an dem ich eigentlich noch nichts teste. Ich habe folgendes:

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

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

Wenn ich meine Test-Runner ausführen, meine andere Tests durchführen und übergeben, wie ich erwarten, dass sie zu. Wenn jedoch der obige Test ausführt bekomme ich folgende Fehlermeldung:

SymbolTableTests.cpp: 11: EXPECT_CALL (* mockSymbol, Die()) aufgerufen Segmentation fault (core dumped)

ich das letzte verbracht habe einige Stunden lang Google suchen und verschiedene Dinge ausprobieren, aber wissen, nützen. Hat jemand irgendwelche Vorschläge?

+0

Es gibt keine (Standard) -Aktion für 'Die()' oder eine der anderen verspotteten Methoden ... –

+0

Laut der [Dokumentation] (https://code.google.com/p/googlemock/wiki/ CheatSheet # Setting_Default_Actions), ich sollte keine Standardaktion angeben müssen, da alle meine Methoden einen der primitiven Typen verwenden. Fehle ich etwas? –

+4

Ich führe Cygwin unter Windows 7 aus. Nach einigen Grabungen habe ich festgestellt, dass die Einstellung gtest_disable_pthreads in meiner Build-Konfiguration auf ON gesetzt ist, um das Problem zu lösen. –

Antwort

4

Ich habe festgestellt, dass die Einstellung gtest_disable_pthreads auf ON in meiner Build-Konfiguration das Problem löst.