谷歌模拟析构函数

时间:2013-05-18 17:18:20

标签: c++ mocking googletest googlemock

我正在努力熟悉Google的模拟框架,这样我就可以更轻松地将一些TDD应用到我的C ++开发中。我有以下界面:

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

我想验证删除实例时是否调用了析构函数。所以我有以下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(); }
};

注意:我在上面省略了包含警戒,但它们在我的头文件中。

我还没有达到我实际测试任何东西的程度。我有以下内容:

#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,Die()) 分段错误(核心转储)

我花了最近几个小时搜索谷歌并尝试不同的东西,但要知道有用。有没有人有任何建议?

1 个答案:

答案 0 :(得分:4)

我发现在我的构建配置中将gtest_disable_pthreads设置为ON可以解决问题。