EXPECT_CALL googlemock приводит к «неизвестному файлу: ошибка: исключение SEH с кодом 0xc0000005, добавленным в тело теста»

Я новичок в GoogleMock. Мой текущий проект нуждается в googlemock. Я узнал об основах gmock с сайта справки Google. Но когда я попытался реализовать то же самое в моем проекте, это бросило 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);
}

3

Решение

0xC0000005 — это «доступ к памяти, которой не существует». Я не могу точно увидеть, где в вашем коде это происходит прямо сейчас. Но это определенно то, что идет не так. Возможно, вы захотите запустить с отладчиком и посмотреть, где он думает, что идет не так.

4

Другие решения

Единственная точка, которая, как я полагаю, будет причиной (скорее всего) доступа к нулевому указателю,

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

Обычно, когда это вызывается из main() функционировать как задумано, по крайней мере argv никогда не будет NULL, потому что первый аргумент всегда содержит имя исполняемого файла.

ОБНОВИТЬ:
Обратите внимание, мой редактировать как argc передается! Просто значение не адрес!

2

По вопросам рекламы [email protected]