JUnit 4 を使用して、タスクで junit を呼び出す私の ant ビルド スクリプトは、常にテスト クラス名を「不明」と報告します。TestCase から派生させずにこれを修正する方法はありますか?
@Test アノテーションを使用してテスト メソッドを宣言します。
SomeTest.java:
public class SomeTest {
@Test
public void doSomething() { .. }
}
それらを TestSuite にまとめます。
AllTests.java:
@RunWith(Suite.class)
@Suite.SuiteClasses( {
SomeTest.class
})
public class AllTests {
}
次に、NetBeans を介して Ant タスクを呼び出します。NetBeans は、JUnit 実行の結果を出力するための優れた統合サポートを備えています。テスト名が常に「不明」であることを除いて、すべてが見つかったようです。
6 tests passed, 2 tests failed, 2 tests caused an error (8.4s)
com.mystuff.AllTests FAILED
Unknown passed (0.0s)
Unknown passed (0.0s)
Unknown passed (0.0s)
Unknown passed (0.0s)
Unknown passed (0.0s)
Unknown passed (0.0s)
Unknown FAILED (0.0s)
Unknown caused an ERROR: at org.hibernate.somethingorother.java:1234 (0.0s)
..etc..
テストは正しく動作し、通常はログに記録されたスタック トレースから障害点を突き止めることができますが、「不明」と報告されるものはすべて単純に煩わしく、わかりにくいものです。
いくつかの SO 投稿を読んだ結果、テストを設定するには 2 つの方法があることがわかりました。古い JUnit 3 の TestCase から派生する方法と、新しい Junit 4 の @Test アノテーションを使用する方法です。
テストが Eclipse で TestCase(Junit) を拡張するときに、@Test アノテーションを使用してテストを実行できない
JUnit の混乱: 'extends TestCase' または '@Test' を使用しますか?
そして、この投稿では、「JUnit 4 では、テスト クラスは共通のフレームワーク クラスを拡張しなくなりました。そのため、継承されたメソッド getName はもうありません」 実行時に JUnit 4 でテスト ケース名を取得する方法は?
TestCase からテスト ケースを拡張しようとしましたが、これにより名前が正しく報告されましたが、この 1 つの変更によりライフサイクルの一部が台無しになり、テストは奇妙な方法で失敗しました。私の理解では、JUnit ランナーがテスト クラスが TestCase から派生したものであることを確認すると、JUnit 3 テスト ケースとして実行されるため、@Before、@After などの注釈はすべて無視されます。JUnit 3 のテスト メカニズムに戻る意味がわかりません。