2

assumeThatJUnit4のエラー メッセージを表示するにはどうすればよいですか?

このテストは成功しますが、何も出力されません。その理由は、 でテストを実行するにはread1、 である必要bがあるからですtruebであるためfalse、テストは適用されません。

boolean b = false;
byte[] read1 = null;
assumeThat("b shold be true to continue testing", b, is(true));
assertThat("read1 should not be null", read1, is(notNullValue()));

assumeThatメッセージを含むログは見つかりませんでした。ここでの問題は、仮定 X が失敗したために合格したが完了しなかったテストを知りたいということです。メッセージ (たとえば、アサーションが失敗した場合と同様) がまだ仮定のために出力されているとよいでしょう。

奇妙に思えるかもしれませんが、この問題に関するコメントを見つけることができませんでした (JUnit ページを含む)。そのため、何か間違ったことを行っているか、間違った場所でメッセージを探している可能性があります。エクリペを使用しています。

4

3 に答える 3

0

仮定の失敗はエラーではないため、エラーは出力されません。メソッドは、assume1 つ以上のオブジェクト (またはプリミティブ) の値または状態のために実行されるべきではないテストを短絡するために使用されます。仮定は Theories ランナー用に設計されていますが、他のランナーでも使用できます。

仮定の一般的な使用方法の 1 つは、実際のテスト ケース ロジックを実行する前に、オブジェクトを特定の状態にするために一連の操作を実行する必要がある複数のテスト メソッドがある場合です。

仮定の前に、各テストはオブジェクトを目的の状態にし、その状態にあることをアサートして続行します。たとえば、スタックのテストでは、多くのテストで空でないスタックが必要になるため、スタックを作成し、アイテムをプッシュし、スタックが空ではないことをアサートしてから、残りのテストを実行します (アイテムをポップし、プッシュします)。別のアイテムなど)。

このパターンを複数のテストで実行すると問題が発生し、これらのテストすべてが失敗するバグが発生します (たとえば、isEmpty()常に true を返す)。テストを実行すると、非常に多くの失敗が発生するため、どこから始めればよいかわかりません。

その代わりに、項目を空のスタックにプッシュするとisEmpy()false が返されることを確認する 1 つのテストがあります。次に、空でないスタックを必要とするテストは次のようになります。

Stack<Object> stack = new Stack<>();
stack.push(new Object());
assumeFalse(stack.isEmpty());
// Continue with the test methods

エラー メッセージが必要な場合は、おそらくアサーションを使用する必要があります。

于 2016-12-02T09:20:38.027 に答える
0

私があなたのことを正しく理解していれば、

assertThat("read1 should not be null", read1, is(notNullValue()));

の場合にのみ実行する必要がありますが、 ?b == trueの場合はエラーではありません。b == false

それでは、次のようにしてみませんか。

if(b) {
    assertThat("read1 should not be null", read1, is(notNullValue()));
} else {
    log.warn("b == false, Test on read1 skipped");
}

? または、それが発生した場合に、特別なテスト結果の状態 (「成功したが疑わしい」) が必要ですか?

更新: Assume のドキュメントを読み直しました。仮定が失敗した場合、テスト全体が「意味がない」と見なされ、「無視」としてマークされると述べています。通常、必要なすべての情報を提供する、小規模で焦点を絞ったテストを使用します。

Update2: 手元にある Eclipse 4.2 の JUnit 4.8 で試してみました。これは、テストが成功したことを示すだけです。したがって、Eclipse の JUnit ランナーはその機能を正しくサポートしていない可能性があります。

于 2013-03-22T13:13:08.090 に答える