2016-05-16 5 views
0

私はTDDとJUnitの新機能ですが、コードで実装しているメソッドのテストケースを記述することができます。JUnitで複数のアサーションテストケースの各アサーションを追跡する方法はありますか?

もちろん、メソッドの実装が問題ないことを確認するためにいくつかのコーナーケースをテストする必要があるメソッドがあります。一般的には、コード内でメソッドごとに1つのテストメソッドを保持するのが良い方法ですから、この答えで説明したように、そのようなメソッドに対して複数のアサーションを追加する必要があります。 https://stackoverflow.com/a/762582/5715934

public void testValueOf() { 
    assertEquals(1, Integer.valueOf("1").intValue()); 
    assertEquals(0, Integer.valueOf("0").intValue()); 
    assertEquals(-1, Integer.valueOf("-1").intValue()); 
    assertEquals(Integer.MAX_VALUE, Integer.valueOf("2147483647").intValue()); 
    assertEquals(Integer.MIN_VALUE, Integer.valueOf("-2147483648").intValue()); 
.... 
} 

しかし、私はテストケースを実行していたとき、私は、テストメソッド内の各アサーションに(パス/フェイル)テストステータスを取得しておりません。代わりに、1つのアサーションが失敗した場合でも「赤」を表示し、すべてが成功した場合は緑を表示します。

各アサーションのトラックでデバッグを簡単にするのは簡単ですか?それを行うための正式な道具/回避策はありますか(JUnit 4)?

+1

1つの方法で1つのテストを行うことは、*悪い習慣*です。さまざまなテストケースについて、常に別々のテストを行う必要があります。 –

+0

リンクのその答えが説明するように、1つのテスト方法の内部でさえ、異なるケース(それぞれ異なるアサーションとして)があります。 –

+0

@krzykが正しいです。すべてのテストケースを分けて、どちらが失敗したのか、どのような理由で失敗するのかを知ることができます。これにより、テストケースが失敗する理由を簡単に伝えることができます。また、他のテストケースでテストケースが1つも失敗しないようにするには、相互に独立している必要があります。 – Dale

答えて

1

まず最初に、単一のメソッドに対して1つのテストメソッドを持たせるのは良い考えではありません。上のコードでは、各アサーションは実際には個別のテストメソッドである必要があります。 これは、テストメソッドで常に単一のアサートを持つことを意味するものではなく、これは最も単純なアサートの場合にのみ当てはまります。例えば、このオブジェクトが良好であることを検証するより多くのアサーションを持つオブジェクトを返します。

しかし、最も重要なことは、テスト中のメソッドが通常1回だけ呼び出されることです。

どのアサーションが失敗したかを知る唯一の方法は、メッセージ/スタックトレースを調べることです。しかし、一般的に、テストが失敗した場合、何かが間違っていることが分かっている場合は、IDEを開いてテストを見てください。

関連する問題