4

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 のテスト メカニズムに戻る意味がわかりません。

4

1 に答える 1

7

これは恥ずかしいことですが、言うに値します。自分の質問に答えただけだと思います。

enableTestListenerEvents答えは、ここで説明されているタスク属性の 1 つと思われます: http://ant.apache.org/manual/Tasks/junit.html

ドキュメントに「Ant 1.8.2以降 - Ant 1.7.0から1.8.1は、この属性がデフォルトでtrueであるかのように動作する」と書かれているため、無視しました。私は 1.8.2 を実行していますが、読み間違えました。実際には、1.8.2 ではデフォルトでオフになっていると言っています。

したがって、修正はbuild.xmlで私のタスクを変更することです:

<junit haltonfailure="true" printsummary="on" fork="yes" dir=".">

<junit haltonfailure="true" printsummary="on" fork="yes" dir="."
    enableTestListenerEvents="true">

NetBeans は、テストの進行状況に応じて、テスト名を含む最新の情報を [テスト結果] ペインに表示するようになりました。全体のフィードバック エクスペリエンスは、はるかに豊富です。友達に教えて :)

于 2012-04-19T05:39:30.297 に答える