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。誰かがこの状況のた​​めのいくつかの素晴らしい解決策を手伝ってくれませんか?テストクラス/関数を友達にすることはできますが、本当に好きではありません。

たぶんそれはテストされるべき方法ではありません。しかし、私が知る限り、すべてのパブリックメソッドをテストする必要があります。

テストは、MSVS2012のC++コード用にC++で記述されています

4

2 に答える 2

3

クラスの内部をテストするのではなく、観察可能な動作だけをテストする必要があります。テストはする必要があります

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

些細な振る舞いをテストしないことを常にお勧めします。私はこれを些細なこととして分類します。Javaの世界では、これはClean CodeのMartinがアドバイスするゲッターのテストに似ています(正確ではありませんが近いです)。

できる最善の方法は、ポインターがnullではなく、その逆参照された値が期待どおりであることをテストすることです。

于 2013-03-09T23:20:12.243 に答える