4

私はgooglemockの初心者です。私の現在のプロジェクトでは、googlemock を使用する必要があります。Google ヘルプ サイトから gmock の基本を学びました。しかし、プロジェクトに同じものを実装しようとすると、SEH exception with code 0xc0000005エラーが発生しました。私のプロジェクトには複数のスレッドがあり、そのうちの 1 つが 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);
}
4

2 に答える 2

5

0xC0000005は、「存在しないメモリにアクセスした」です。あなたのコードのどこでこれが起こっているのか正確にはわかりません。しかし、それは間違いなく間違っていることです。デバッガーを使用して実行し、どこで問題が発生したかを確認することをお勧めします。

于 2012-12-28T10:20:17.217 に答える
2

(おそらく)NULLポインターアクセスの理由であると私が推測する唯一のポイントは

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

通常、これが意図したとおりに関数から呼び出される場合、最初の引数には常に実行可能ファイル名が含まれるため、main()少なくともNULL になることはありません。argv

更新:
私の編集がどのようargcに渡されるかに注意してください! アドレスではなく単にです。

于 2012-12-28T10:35:13.440 に答える