web-dev-qa-db-ja.com

JUnitでアサートと結果を出力する方法

私はこのようないくつかのテストがあります:

_@Test
public void test01()
{
    Position p = getPositionAt('a', 1);
    assertNotNull("a1 exists", p);
    assertNotNull("figure exists a1", p.getFigure());

    p = getPositionAt('a', 2);
    assertNotNull("exists a2", p);
    assertNull("figure exists a2", p.getFigure());

    p = getPositionAt('b', 1);
    assertNotNull("exists b1", p);
    assertNull("figure exists b1", p.getFigure());
}
_

テストの実行中に必要なのは、各アサートメッセージを標準出力に出力してから、アサートの結果を出力することです。

これは、テストクラスの形式が必要です。

_a1 exists -success
figure exists a1 -success
exists a2 -success
figure exists a2 -succcess
exists b1 -succcess
figure exists b1 -failed
_

しかし、それを行う方法は?私はJUnitを使って作業するのはかなり新しいので、見当がつきません。 runnerssuitesを使用する方法はありますか?または、assertSuccess()assertFailed()メソッドが存在しますか?ヒントをありがとう。

28
Petr Přikryl

まず、1つではなく2つの問題があります。アサーションが失敗すると、AssertionError例外がスローされます。これにより、このポイントを超えるアサーションがチェックされなくなります。これに対処するには、 ErrorCollector を使用する必要があります。

第二に、私はこれを行うためにJUnitに組み込まれた方法があるとは思わない。ただし、アサーションをラップする独自のメソッドを実装できます。

public static void assertNotNull(String description, Object object){
     try{
          Assert.assertNotNull(description, object);
          System.out.println(description + " - passed");
     }catch(AssertionError e){
          System.out.println(description + " - failed");

        throw e;
     }
}
19
John B

すべてのassertXXXメソッドには、エラー時に文字列を表示できるフォームがあります。

assertNotNull("exists a2", p); // prints "exists a2" if p is null

成功時にメッセージを出力することに特別な価値はありません。

[〜#〜] edit [〜#〜]

Junitは通常、2つの形式のアサートを提供します。上記の例を実行するには、2つの方法のいずれかでnull値をテストできます。

assertNotNull(p)

または

assertNotNull("my message on failure", p)

フレームワークは、他の作業を必要とせずにエラーメッセージを出力します(フレームワークによって提供されます)。

例外をテストするには、次のパターンを使用します。

try{
    someCall();
catch(Exception e){
    fail(): // exception shouldn't happen, use assertTrue(true) if it should
}

繰り返しますが、メッセージを追加するこれらのメソッドのバージョンがあります

[〜#〜] api [〜#〜] を確認します

10
Romski

最後の手段の1つは、各アサートを対応するSystem.out.printlnとペアにすることですが、明らかに理想的ではありません。それでも、他のすべてが失敗した場合、問題を解決します。

2
durron597