@ Nicolas_Filotto答えに加えて、Junit Theoriesも使用できます。より読みやすく、Parameterized
と違って、すべての可能なパラメータの組み合わせでテストを実行します。
@RunWith(Theories.class)
public class MyTest {
@DataPoints("cols")
public static int[] rowValues(){
return new int[]{0, -1, 1, 2};
}
@DataPoints("rows")
public static int[] colValues(){
return new int[]{0, -1, 4, 5};
}
@Theory
public void upperBoundIsChecked(@FromDataPoints("cols") int col,
@FromDataPoints("rows") int row){
assumeTrue(row >= ROWS || col >= COLS);
try {
check(col, row);
fail("Should have thrown IllegalArgumentException");
} catch (IllegalArgumentException ignore){}
}
@Theory
public void lowerBoundIsChecked(@FromDataPoints("cols") int col,
@FromDataPoints("rows") int row){
assumeTrue(row < 0 || col < 0);
try {
check(col, row);
fail("Should have thrown IllegalArgumentException");
} catch (IllegalArgumentException ignore){}
}
@Theory
public void validIndicesNoException(@FromDataPoints("cols") int col,
@FromDataPoints("rows") int row){
assumeTrue(row >= 0 && col >= 0 && row < ROWS && col < COLS);
try {
check(col, row);
} catch (Exception e){
fail("Should not have thrown an exception: " + e.getMessage());
}
}
}
各理論は、理論の仮定に一致する可能性のあるすべての行と列の組み合わせをチェックします。
あるいは、COLSと行のリストが同じであれば、それも簡単に行うことができる:ユニットテストについての最も基本的なチュートリアルと同様に
@RunWith(Theories.class)
public class MyTest {
@DataPoints
public static int[] values(){
return new int[]{0, -1};
}
@Theory
public void validateIndices(int col, int row){
check(col,row);
}
}
は言う:試験方法ごとにテスト条件を1つ。したがって、4回の 'check'呼び出しのために少なくとも4つ必要です。 – Tom
@トムはそれを4回繰り返すことは非常に重複しませんか? – jam
*「それを4回繰り返しても大したことはありませんか?」それはあなた次第です。失敗した 'validateIndices'メソッドが必要な場合や、これらの呼び出しのどれが失敗したかを手動で確認する必要がある場合は、' testCheck_invalidSecondArgument'のような専用メソッドがあります。 – Tom