我是googlemock的新手。我目前的项目需要googlemock才能使用。我从谷歌帮助网站的gmock基础知识中学到了什么。但是,当我尝试在我的项目中实现相同时,它会引发SEH exception with code 0xc0000005
错误。
我的项目有多个线程,其中一个线程调用RUN_ALL_TESTS
上面的代码会导致SEH exception
工具:VS2010,Windows 7
Try to mock the function of a class
using ::testing::Return;
using ::testing::Test;
using ::testing::NiceMock;
class OsInterfaceCPP
{
public:
OsInterfaceCPP(void){};
virtual ~OsInterfaceCPP(void){};
virtual int add_test(int a, int b) = 0;
int calladdtest(int aa, int bb)
{
return add_test(aa,bb);
}
};
class OsCPPApis : public OsInterfaceCPP
{
public:
OsCPPApis(void){};
virtual ~OsCPPApis(void){};
virtual int add_test(int aa, int bb)
{
return (aa+bb);
}
};
class MockedOSCPPApis : public OsCPPApis
{
public:
MockedOSCPPApis(void){};
virtual ~MockedOSCPPApis(void){};
MOCK_METHOD2(add_test, int(int aaa, int bbb));
};
OSapiTestFunc::OSapiTestFunc(void){}
OSapiTestFunc::~OSapiTestFunc(void){}
void OSapiTestFunc::SetUp(){}
void OSapiTestFunc::TearDown(){}
void OSapiTestFunc::RunTests()
{
int argc=0;
char **argv = 0;
::testing::InitGoogleMock(&argc, argv);
}
TEST_F(OSapiTestFunc, OS_Test1)
{
OsCPPApis TestOscppapis;
MockedOSCPPApis Testmockosapi;
int a, b;
a = 2;
b = 5;
bool test1var = true;
EXPECT_CALL(Testmockosapi,add_test(a, b));
TestOscppapis.add_test(5,3);
}
答案 0 :(得分:4)
0xC0000005是“您访问的内存不存在”。我现在无法确切地看到代码中的确切位置。但那肯定是出了什么问题。您可能希望使用调试器运行并查看它认为出错的位置。
答案 1 :(得分:2)
我唯一想要成为(很可能)NULL指针访问的原因是
void OSapiTestFunc::RunTests()
{
int argc=0;
char **argv = 0;
::testing::InitGoogleMock(argc, argv);
}
通常当从main()
函数调用它时,至少argv
永远不会为NULL,因为第一个参数总是包含可执行文件名。
<强>更新强>
请注意我的编辑argc
如何通过!只需值而不是地址!