ユニットテストにグーグルテスト/モックフレームワークを使用しています。SetUp関数でテストしている基本クラスのコンストラクターを呼び出します。SetUpで生成されたオブジェクトを使用してクラスの特定のプライベートメンバーを設定し、テストの動作を変更しました。テスト関数がテストしている基本関数を呼び出すと、プライベートメンバー変数のアドレスが変更されるため、テストのセグメンテーション違反が発生します。私がテストしている別の同様のファイルでは発生しないため、このような動作の原因を特定する必要があります。
//Class to test
//base code
//header file
class To_Test
{
friend My_test_class;
private:
TestStruct* sptr; //pointer to a structure, set by some random function elsewhere
public:
To_Test();
~To_Test();
boolean Function_1();
}
//cpp file
To_Test::To_Test()
{
sptr = NULL;
}
boolean To_Test::Function_1()
{
boolean variable;
variable = sptr->bool;
if (variable)
{
do something
return TRUE;
}
return FALSE;
}
//Test framework
//test class header file
#include "To_Test.h"
class My_test_class : public :: testing :: Test
{
public:
To_Test *ToTestObj;
virtual void SetUp();
void Test_Function_1();
}
//gtest.cpp file
My_test_class::SetUp()
{
ToTestObj = New To_test;
}
My_test_class::Test_Function_1()
{
ToTestObject->sptr = (RandomStruct*) malloc (sizeof(RandomStruct));
sptr->bool = TRUE;
ASSERT_TRUE(TRUE = ToTestObject->Function_1());
}
SetUp、Test_Function_1、およびFunction_1のToTestObjectのアドレスは同じです。ただし、SetUpおよびTest_Function_1のsptrのアドレスは、Function_1のアドレスとは異なります。したがって、テストの実行中にFunction_1をステップスルーすると、sptrはNULLを指しているためメモリがなく、sptr->boolでメモリにアクセスしようとすると実行が失敗します。
この問題の原因がわかりません。どんな助けでも本当にありがたいです!