提问人:Pavel Dubsky 提问时间:3/10/2013 更新时间:10/26/2013 访问量:616
对返回指向私有成员的指针的公共方法进行单元测试
Unit test for public method that returns pointer to a private member
问:
我有这样的代码:
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++ 为 MSVS 2012 中的 C++ 代码编写的
答:
0赞
Andrew White
3/10/2013
#1
我总是建议不要测试琐碎的行为。我会将其归类为微不足道的。在 Java 世界中,这类似于(不完全是,但接近)测试一个 getter,来自 Clean Code 的 Martin 建议不要这样做。
您可以做的最好的事情是测试指针是否为 null,并且其取消引用的值是否符合您的预期。
3赞
Thomas
3/10/2013
#2
你不应该测试类的内部结构,而只是测试它的可观察行为。测试应该是
Asser::AreEqual( *obj.Pointer(), 3 );
评论
0赞
Pavel Dubsky
3/10/2013
我想这是适合我情况的最佳方式。谢谢!
评论
Pointer()