c++ visual-studio-2010 mocking googlemock

c++ - EXPECT_CALL de googlemock lleva a "archivo desconocido: error: excepción SEH con código 0xc0000005 arrojado en el cuerpo de prueba"



visual-studio-2010 mocking (2)

Soy un principiante de googlemock. Mi proyecto actual necesita googlemock para usar. He aprendido de los conceptos básicos de gmock del sitio de ayuda de Google. Pero cuando intenté implementar el mismo en mi proyecto, lancé la SEH exception with code 0xc0000005 error. Mi proyecto tiene varios hilos, uno de ellos llamado RUN_ALL_TESTS. El código anterior lleva a la SEH exception

herramientas: 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); }


0xC0000005 es un "acceso a la memoria que no existe". No puedo ver exactamente en qué parte de su código esto sucede en este momento. Pero eso es definitivamente lo que sale mal. Es posible que desee ejecutar con un depurador y ver dónde cree que sale mal.


El único punto que supongo que es el motivo para acceder (muy probablemente) al puntero NULL es

void OSapiTestFunc::RunTests() { int argc=0; char **argv = 0; ::testing::InitGoogleMock(argc, argv); }

Por lo general, cuando se llama a esto desde una función main() como se pretende, al menos argv nunca sería NULL porque el primer argumento siempre contiene el nombre del ejecutable.

ACTUALIZAR:
¡Note mi edición cómo se pasa argc ! ¡Simplemente el valor, no la dirección !