2013-01-17 18 views
0

我使用谷歌測試/模擬框架單元測試後的值。我調用我在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()); 
} 

ToTestObject的SETUP中的地址,在Test_Function_1和Function_1是相同的。 然而,特徵碼指針的安裝程序和Test_Function_1地址不同於Function_1的不同。因此,當餘步驟通過Function_1當測試執行時,特徵碼指針沒有記憶,因爲它指向NULL和當它試圖在sptr-> BOOL訪問存儲器中的執行失敗。

我不知道是什麼原因造成了這個問題。任何幫助真的很感激!

+0

這是不是一個真正的關於googletest問題 –

回答

0

看來,你正在使用C++,爲什麼不避免不必要的malloc,NULL,TRUE,並通過使用智能指針避免內存泄漏?

除此之外似乎sptrTestStruct*類型,而你分配一個RandomStruct*給它,並期望成員sptr->bool是在相同的內存位置。這不是一個關於googletest的問題,而是關於C++編程。

另外,bool是一個保留關鍵字,不應按照此處顯示的方式使用,而不存在TestStruct的代碼。關鍵字new也是拼寫錯誤,從大'N'開始,除非您有宏,否則無法編譯。