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

I am novice to googlemock. My current project needs googlemock to use. I have learned from basics of gmock from Google help site. But when I have tried to implement the same in my project it threw SEH exception with code 0xc0000005 error. My project has multiple threads, one of the thread call RUN_ALL_TESTS The above code leads to SEH exception

инструменты: VS2010, windows 7

Попробуйте высмеять функцию класса

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
nl ja de
Почему вы наследуете MockedOSCPPApis из OsCPPApis , а не из OsInterfaceCPP ? Насколько я могу судить, нечего издеваться над OsCPPApis , он реализует add_test() .
добавлено автор πάντα ῥεῖ, источник

2 ответы

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

4
добавлено

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

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

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

UPDATE:
Note my edit how argc is passed! Simply the value not the address!

2
добавлено
Не могли бы вы рассказать подробнее? Потому что, когда я запускаю программу с помощью Gmock , я тоже получил ту же ошибку.
добавлено автор Rasmi Ranjan Nayak, источник
@RasmiRanjanNayak Тогда это может быть проблемой с реализацией класса MockedOSCPPApis , как я упоминал в своем комментарии к вопросу.
добавлено автор πάντα ῥεῖ, источник
@ πάνταῥεῖ Как это будет работать? InitGoogleMock excepcts a & int и путь в качестве аргументов.
добавлено автор Konstantin A. Magg, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest