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++ 编写的,用于 MSVS 2012 中的 C++ 代码

4

2 回答 2

3

您不应该只测试类的内部结构,而只是测试其可观察到的行为。测试应该是

Asser::AreEqual( *obj.Pointer(), 3 ); 
于 2013-03-09T23:31:51.187 回答
0

我总是建议不要测试琐碎的行为。我会将其归类为微不足道的。在 Java 世界中,这类似于(不完全但接近)测试来自 Clean Code 的 Martin 反对的吸气剂。

您可以做的最好的事情是测试指针不为空,并且它的取消引用值是您所期望的。

于 2013-03-09T23:20:12.243 回答