-
在Qt中设置预编译器
如果不设置预编译器会报错
main.obj? error: LNK2019: 无法解析的外部符号 “class testing::internal::Mutex testing::internal::g_gmock_mutex” (?g_gmock_mutex@internal@testing@@3VMutex@12@A),该符号在函数 “public: virtual __cdecl testing::internal::FunctionMocker<class std::basic_string<char,struct std::char_traits,class std::allocator > __cdecl(void)>::~FunctionMocker<class std::basic_string<char,struct std::char_traits,class std::allocator > __cdecl(void)>(void)” (??1? F u n c t i o n M o c k e r @ FunctionMocker@ FunctionMocker@ A 6 A ? A V ? A6A?AV? A6A?AV?basic_string@DU? c h a r t r a i t s @ D @ s t d @ @ V ? char_traits@D@std@@V? chartraits@D@std@@V?allocator@D@2@@std@@XZ@internal@testing@@UEAA@XZ) 中被引用
根据论坛描述找到解决方案
DEFINES +=GTEST_LINKED_AS_SHARED_LIBRARY -
测试代码
class FooInterface {
public:
virtual ~FooInterface() {}
virtual std::string getArbitraryString() = 0;
virtual int getPosition() = 0;
};
class MockFoo : public FooInterface {
public:
MOCK_METHOD0(getArbitraryString, std::string());
MOCK_METHOD0(getPosition, int());
};
int main(int argc, char *argv[])
{
testing::InitGoogleMock(&argc, argv);
int n = 100;
string value = "Hello World!";
MockFoo mockFoo;
EXPECT_CALL(mockFoo, getArbitraryString())
.Times(1)
.WillOnce(Return(value));
string returnValue = mockFoo.getArbitraryString();
cout << "Returned Value: " << returnValue << endl;
EXPECT_CALL(mockFoo, getPosition())
.Times(2)
.WillRepeatedly(Return(n++));
int val = mockFoo.getPosition(); //100
cout << "Returned Value: " << val << endl;
return EXIT_SUCCESS;
}