测试对象在谷歌测试中被构造函数传递后不保留该值

时间:2013-01-17 02:42:45

标签: c++

我正在使用谷歌测试/模拟框架进行单元测试。我调用我在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时的内存时执行失败。

我不确定导致此问题的原因。任何帮助都非常感谢!

1 个答案:

答案 0 :(得分:0)

看来,你正在使用C ++,为什么不避免使用不必要的mallocNULLTRUE并使用智能指针来避免内存泄漏?

除此之外,sptr的类型为TestStruct*,而您为其分配RandomStruct*并期望成员sptr->bool位于同一内存位置。这不是关于googletest的问题,而是关于C ++编程的问题。

此外,bool是保留关键字,不应按此处显示的方式使用,而TestStruct没有代码。关键字new也拼写错误,从大'N'开始,无法编译,除非你有一个宏。