2009-04-28 14 views
2

NUnitおよびMbUnitには、異なるテストセットを1つのテストに送信できるRowTest属性があります。単体テストでRowTestを使用することをお勧めします

[RowTest] 
[Row(5, 10, 15)] 
[Row(3.5, 2.7, 6.2)] 
[Row(-5, 6, 1)] 
public void AddTest(double firstNumber, double secondNumber, double result) 
{ 
    Assert.AreEqual(result, firstNumber + secondNumber); 
} 

私はこの機能の巨大なファンであった。私はどこでもそれを使用しました。しかし、最近、単体テストでRowTestを使用することをお勧めしますか?ここにはさらに理由があります:

単体テストは非常に簡単でなければなりません。バグがある場合、テストで何がテストされているか把握するのに多くの時間を費やしたくありません。複数の行を使用する場合、各行には送信されたパラメータセットが異なり、異なるテストが行​​われます。

また、TestDriven.NETを使用しているので、私のIDE、Visual Studioからユニットテストを実行できます。 TestDrivent.NETでは、特定の行を実行するように指示することはできません。すべての行が実行されます。したがって、私がデバッグするとき、私は他のすべての行をコメントアウトし、私が作業しているものだけを残す必要があります。私はまだ時折RowTest属性を使用することを言っ

[Test] 
public void Add_with_positive_whole_numbers() 
{ 
    Assert.AreEqual(5, 10 + 15); 
} 

[Test] 
public void Add_with_one_decimal_number() 
{ 
    Assert.AreEqual(6.2, 3.5 + 2.7); 
} 

[Test] 
public void Add_with_negative_number() 
{ 
    Assert.AreEqual(1, -5 + 6); 
} 

が、私はこの後で作業する必要がある場合、私を遅くするつもりはないと信じていた場合にのみ:

は今日ここに私のテストを書くだろうか例です。

ユニットテストでこの機能を使用することをお勧めしますか?

答えて

6

はい。これは基本的に同じ入力テストを何度も何度も実行しているため、入力の組み合わせごとに繰り返す必要がありません。
したがって、「一度だけ」またはDRYの原則を守ってください。したがって、このテストを更新する必要がある場合は、1つのテスト(複数対)テストを更新するだけです。

各行は異なるセットからの代表入力でなければなりません。つまり、この入力は他のすべての行とは異なります。この関数の動作。 RowTestは実際にはNUnitの機能のためにたくさん求められていました。私はSchlapsiをNUnitの拡張モジュールとして書いたと思います。 NUnit GUIは、GUI内の1つのノードの下にあるすべてのRowTestをグループ化し、どの入力が失敗/通過したかを示します。これはクールです。

「デバッグする必要がある」という小さな欠点は、私が個人的に暮らすことができるものです。すべての行の属性を一時的にコメントアウトしてしまいました。まず、ほとんどの場合、 ScenarioXが失敗し、ステップスルーを必要とせずに解決する)、逆にテストをコピーして固定(問題のある)入力を一時的に渡す

+1

また、私はそれが私の固有の怠惰でうまくいきます。 – Gishu