JUnitを使用してアサーションの失敗で終了せずにログに記録するにはどうすればよいですか?JUnitはログに失敗するだけですか?
私の目標は、ログメッセージが存在する場合は失敗し、それらを印刷することです。大きなリストを反復して、どの要素が失敗したのかを知りたいからです。
JUnitで強制的に障害が発生しないようにするにはどうすればよいですか?
TY
JUnitを使用してアサーションの失敗で終了せずにログに記録するにはどうすればよいですか?JUnitはログに失敗するだけですか?
私の目標は、ログメッセージが存在する場合は失敗し、それらを印刷することです。大きなリストを反復して、どの要素が失敗したのかを知りたいからです。
JUnitで強制的に障害が発生しないようにするにはどうすればよいですか?
TY
をするのに役立ちます。問題は、assertXXXメソッドが実際にExceptions(AssertionError)をスローするため、例外がスローされた後に通常のアサートを使用してポイントから再開できないことです。 JUnitはこれらのAssertIonエラーをキャッチし、正しいことを行います。
代わりに、Ludwigが提案したように、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 []内のエントリの数は、コンストラクタへのパラメータの数に対応していなければならず、型も同様に対応する必要があります。
この音が欲しい。しかし、もし私が例えば6つのパラメータを持っていたら? 3はメソッドをテストするための入力、3は結果を確認するか? – membersound
コンストラクタは、必要な数のパラメータをとります。上記の例で@Parameters、data()としてアノテートされたメソッド内のオブジェクトの適切な数を定義するだけです。 –
あなたがいうだけで最初のものよりも、テストが失敗したかもしれないすべての理由を確認したい場合は、リストがない場合、あなたはテストが失敗した理由のリストを作成して、エラーをスローする必要があります最後は空です。
私はこれもかなり多く行います。 –
あなたはjunitタスクとアリのようなビルドツールを使用している場合は、テストが失敗したとき、それはあなたのビルドプロセスを停止しないように、あなたがno
に置くことができるhaltonfailure
プロパティがあります。
これは悪い考えです。いったん障害が発生すると、悪い状態になる可能性が高くなります。実際の問題のために、初期の状態が悪いほど多くの障害が発生する可能性があります。小さなテスト方法を持っていて、失敗したときにそれらを終了させるという点は、開始状態がよく知られているためです。より小さな独立したテストがより多く存在するように、テストを修正することを検討してください。 –
@NathanHughesがあなたが望むことをするために他のどのトリックよりも提案したことを好むでしょう。 –
ここに@Nathanと完全に同意します。アサーションが満たされない場合、テストは失敗しなければならない。 –