对返回指向私有成员的指针的公共方法进行单元测试

Unit test for public method that returns pointer to a private member

提问人:Pavel Dubsky 提问时间:3/10/2013 更新时间:10/26/2013 访问量:616

问:

我有这样的代码:

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++ 代码编写的

C++ 单元测试

评论

0赞 Beta 3/10/2013
您可以调用两次并比较结果。这几乎涵盖了您可以从此设计中获得的所有(定义的)行为。Pointer()

答:

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
我想这是适合我情况的最佳方式。谢谢!