JUnitを使用して、アサーションの失敗で終了せず、ログに記録するにはどうすればよいですか?
私の目標は、ログメッセージが存在する場合は失敗し、それらを印刷することです。大きなリストを繰り返し処理したいので、どの要素が失敗したかを知りたいからです。
JUnitが失敗しても壊れないようにするにはどうすればよいですか?
ty
たぶん、ErrorCollectorルールがあなたを助けるでしょう
最初の理由だけでなく、テストが失敗した可能性のあるすべての理由を確認したい場合は、テストが失敗した理由のリストを作成し、リストが最後に空でない場合はエラーをスローする必要があります。
テストをそのままにして、標準のJUnitでやりたいことを行うことはできません。問題は、assertXXXメソッドが実際に例外(AssertionError)をスローするため、通常のアサートを使用して、例外がスローされた後の時点から再開できないことです。JUnitはこれらのAssertIonErrorsをキャッチし、正しいことを行います。
Ludwigが提案したように、1つの代替方法は、ErrorCollectorルールを使用することですが、これは、私が想像するテストのかなりの部分を書き直すことを意味します。
大きなリストを反復処理することが目標である場合は、Parameterizedを参照してください。これにより、毎回異なるデータを使用して、単一のテストメソッドを反復処理できます。
@RunWith(Parameterized.class)
public class FibonacciTest {
@Parameters
public static List<Object[]> data() {
return Arrays.asList(new Object[][] {
{ 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }
});
}
private int fInput;
private int fExpected;
public FibonacciTest(int input, int expected) {
fInput= input;
fExpected= expected;
}
@Test
public void test() {
assertEquals(fExpected, Fibonacci.compute(fInput));
}
}
data()はObject[]のリストを返します。リスト内の各Object[]は、テストクラスのコンストラクターに渡されます。したがって、テストクラスの新しいインスタンスがリストの各エントリに使用されます。
Object []のエントリの数は、コンストラクターのパラメーターの数に対応している必要があり、タイプも対応している必要があります。
junitタスクでantのようなビルドツールを使用している場合は、テストが失敗したときにビルドプロセスが停止しないように設定haltonfailure
できるプロパティがあります。no