一つの方法で唯一の「アサート」を使用することです。
いいえ、テスト方法でシナリオをテストする必要はありません。それは同じことではありません。もし範囲に従って許容可能な値を有する場合
String failuresMsg = "";
if(9 != var1)
failuresMsg += "[var1 <9," + var1+">]";
if(9 != var2)
failuresMsg += "[var2 <9," + var2+">]";
if(9 != var3)
failuresMsg += "[var3 <9," + var3+">]";
if(9 != var4)
failuresMsg += "[var4 <9," + var4+">]";
assertEquals("", failuresMsg);
一般には、少なくともこの範囲の限界及び範囲の1つまたはいくつかの内部の値をテストする必要があります。
あなたのテストを取る場合、それは(物事を見ての方法に従って、またはそれ以上)2つのテストの方法を与えるだろう、私は二つの異なるシナリオを持っているので、場合:
許容できない、私は、コードとテストのメンテナンス性が良いとどまる場合、私は必要なすべてのアサーションを行うようにしてもよいです。ここで
はサンプルコードです:間隔はあまり重要でない場合
@Test
public void doMethodWithAcceptableValues(){
int testValue = 0;
Assert.assertTrue(objUnderTest.doMethod(testValue));
testValue = 100; // limit value
Assert.assertTrue(objUnderTest.doMethod(testValue));
testValue = 50; // middle value 50. it is an example
Assert.assertTrue(objUnderTest.doMethod(testValue));
}
@Test
public void doMethodWithNotAcceptableValues(){
int testValue = -1;
Assert.assertFalse("-1 not acceptable", objUnderTest.doMethod(testValue));
testValue = 101; // limit value
Assert.assertFalse("101 not acceptable", objUnderTest.doMethod(testValue));
}
何もあなたはそれのために(パラメータ化テスト)をJUnitのメカニズムを使用したりを作成することができ、区間の全ての値をテストすることができなくありませんこのロジックをループなどで実行する独自のメソッドです。
多くの場合、ホーム処理はよりシンプルで読みやすく保守が容易です。
私は指定しませんでした、変数は強く縛られています、そして、このテストは単一のアイデアをチェックすることに対応します。 同じテストでいくつかのアサートを持つ問題は、いくつかの失敗の場合、最初の失敗の結果のみを表示します。 –
実際には問題はありません。なぜなら、テストが失敗したときにはどのシナリオが失敗するのか理解できないからです。シナリオのテスト方法が失敗した場合は、通常、エラーメソッドを修正してテストを再実行して問題が修正されているかどうかを確認する必要があるため、テスト中に他のアサーションが失敗しないかどうかは関係ありません。メソッド内で各アサーションを分割すると、テストとテストコードの複雑さが増します。それはコストがあります。なぜなら、コードがあり、読みにくく、複雑で、保守が難しいからです。 – davidxxx
OK、この明白な答えをありがとう。 –