我正在努力熟悉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()) 分段错误(核心转储)
我花了最近几个小时搜索谷歌并尝试不同的东西,但要知道有用。有没有人有任何建议?
答案 0 :(得分:4)
我发现在我的构建配置中将gtest_disable_pthreads设置为ON可以解决问题。