3

私は一般的にTDDと単体テストをいじっています。私が見たすべての例は値を返しますが、それが最も簡単なケースのようです。しかし、関数が値を返さない場合はどうなるでしょうか?

たとえば、Actor クラスがあり、その「健康」を高める方法が必要だとします。以下のような単体テストを作って、それを満足するように Actor クラスを作ったのですが、これでいいのでしょうか?単体テストでプロパティを使用する例はあまり見当たりません。この種のことで別の考え方をする必要がありますか?

    [TestMethod]
    public void IncreaseHealth_PositiveValue_PositiveHealth()
    {
        Actor a = new Actor();

        int beforeHealth = a.Health;

        a.IncreaseHealth(5);

        int afterHealth = a.Health;

        Assert.AreEqual(beforeHealth + 5, afterHealth);
    }
4

1 に答える 1

4

このテストは良いスタートです。ただし、値を返すメソッドをテストする場合と同様に、副作用のあるメソッドの境界条件をテストする必要があります。この場合、次のことも確認する必要があります。

  • あなたのメソッドはネガを取りません(またはネガを取り、期待どおりに機能します)
  • 整数をオーバーフローする大きな値でヘルスをインクリメントすると、結果は予測可能のままです(たとえば、ヘルスはある値に制限されます)
  • 現在のヘルスよりも大きい値でヘルスを減少させた場合、残りのヘルスがマイナスになることはありません (それが許可されている場合を除く)。
  • ヘルスがゼロになると、トリガーされる可能性のある他のすべてのものをトリガーする必要があります。

ローカルで初期化されたオブジェクトを使用しても問題ありませんが、単体テスト オブジェクトに配置して、[Setup]メソッドで初期化することもできます。

于 2013-10-12T16:12:06.483 に答える