我正在使用谷歌测试/模拟框架进行单元测试。我在我的 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中ToTestObject的地址,Test_Function_1和Function_1中的地址是一样的。但是SetUp和Test_Function_1中sptr的地址与Function_1的地址不同。因此,当我在执行测试时单步执行 Function_1 时,sptr 没有内存,因为它指向 NULL,并且当它尝试访问 sptr->bool 处的内存时执行失败。
我不确定是什么导致了这个问题。非常感谢任何帮助!