2013-05-18 28 views
10

Googleの模擬フレームワークに慣れ親しむようになっているので、C++開発にTDDを簡単に適用することができます。私は次のインタフェースを持っています:Google Mockデストラクタ

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

インスタンスが削除されたときにデストラクタが呼び出されることを確認したいと思います。私はインクルードは上記で警備員を含め、省略しましたが、彼らは私のヘッダファイルにあります。

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

注:だから私は、次のMockSymbolクラスを持っています。

実際に何かを実際にテストしているところまでは到達できませんでした。

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

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

私はテストランナーを実行すると、他のテストが実行され、私が期待した通りに通過します。

SymbolTableTests.cpp:11:上記のテストが実行されたときしかし、私は次のエラーを取得EXPECT_CALLを(* mockSymbolは、ダイ())私は最後を費やしてきた

セグメンテーションフォールトを(コアダンプ)が呼び出さGoogleを検索したり、さまざまなことを試したりすることはありません。誰にも何か提案はありますか?

+0

Die()や他のモックされたメソッドに対して(デフォルト)アクションが指定されていません... –

+0

[documentation](https://code.google.com/p/googlemock/wiki/)によると、 CheatSheet#Setting_Default_Actions)、私のメソッドはすべてプリミティブ型の1つを使用するので、デフォルトのアクションを指定する必要はありません。何か不足していますか? –

+4

私はWindows 7でCygwinを実行しています。掘り下げた後、gtest_disable_pthreadsをONに設定すると、問題が解決されます。 –

答えて

4

私のビルド設定でgtest_disable_pthreadsをONに設定すると問題が解決することがわかりました。