2013-03-09 81 views
1

我有這樣的代碼:公共方法單位測試返回指向私有成員

class Foo 
{ 
private : 

    int m_nValue; 

public : 

    explicit Foo(const int nValue) : 
     m_nValue(nValue) 
    { 
    } 

    const int* Pointer() const 
    { 
     return &m_nValue; 
    } 
}; 

void Test() 
{ 
    Foo obj(3); 

    // I want to do something like this. 
    //Assert::AreEqual(&obj.m_nValue, obj.Pointer()); 
} 

我想測試Pointer()方法返回私有字段m_nValue的地址。有人可以幫助解決這種情況的一些很好的解決方案。我可以讓測試課/功能成爲朋友,但我真的不喜歡它。

也許這不是應該測試的方法。但據我所知,所有公共方法都應該進行測試。

測試是用C++編寫的C++代碼在2012年MSVS

+0

您可以調用'Pointer()'兩次並比較結果。這只是涵蓋了您可以從此設計中獲得的所有(定義的)行爲。 – Beta 2013-03-09 23:27:34

回答

3

你不應該在類的內部測試它的可觀察行爲。測試應該是

Asser::AreEqual(*obj.Pointer(), 3); 
+0

我想這是我的情況最好的方式。謝謝! – 2013-03-09 23:47:22

0

我總是建議不測試瑣碎的行爲。我會把這個分類爲微不足道的。在Java世界裏,這與測試一個來自Clean Code的Martin提出的建議是否相似(不完全相近)。

你能做的最好的就是測試指針是否爲空,並且它的解除引用值是你期望的。