web-dev-qa-db-ja.com

JUnitが@Ignoreアノテーションを無視する原因は何ですか?

MyEclipseを使用して、いくつかのJUnitテストケースを自動的に生成しました。生成されたメソッドの1つは次のようになります。

_@Ignore("Ignored") @Test
public void testCreateRevision()
{
    fail("Not yet implemented"); // TODO
}
_

_@Ignore_アノテーションを手動で追加しました。ただし、テストを実行すると、JUnitはそのメソッドなどを無視するのではなく、「失敗」の下に一覧表示します(関連: JUnitの失敗とエラーの違いは何ですか? )。また、「無視」メッセージの代わりに「まだ実装されていません」メッセージが表示されます。明らかに、fail()が呼び出されている必要があるため、_@Ignore_アサーションは機能していません。

何が起きてる?これを機能させるために有効にする必要がある設定はありますか?

編集:
これまでに検討/試行したこと:

  • 私はJUnit4を使用しているので、バージョンの問題ではありません。
  • _org.junit.Ignore_をインポートしているので、間違ったIgnoreが使用されているわけではありません。
  • _@Ignore_だけ、_@Ignore @Test_および@Ignore("message") @Testを使用してみました。すべて失敗します。

編集2:
MyEclipseで_New > Other; Java > JUnit > JUnit Test Case; New JUnit 4 test_を介してテストを作成し、ビルドパスのライブラリはJUnit 4です。antでビルドしていて、実際にMyEclipseでケースを実行しています。

28
Pops
  1. 正しい@Ignoreをインポートしていることを確認してください。必ず@org.junit.Ignoreを明示的に使用してください。

  2. テストが3ではなくJUnit4によって実行されているかどうかを再確認します。これを行う最も簡単な方法は、テスト名を変更して、プレフィックスがtestにならないようにすることです(現在はまったく実行されないはずです)。そして、JUnit 4はとにかくこのプレフィックスを必要としません)またはテストケースの継承階層を調べます:それはすべきではありませんjunit.framework.TestCaseから直接または間接的に拡張します(JUnit 3の要件)。

43

JUnit 3がクラスパスにない場合でも、この問題が発生しました。 Junit 4の互換モードは、テスト名の「test」プレフィックスを取得するため、@ Ignoreを取得するのではなく、JUnit3と同じように動作すると思います。解決策は、テストの名前を変更することです。

4
compiledwrong

テストクラスが再コンパイルされましたか?

非常に一般的な問題です。ソースのどこかにタイプミス(セミコロンの欠落など)があったために再コンパイルが失敗し、IDEはコンパイルが失敗したことを通知しません。

target/test-classesフォルダーを削除してみてください。

2
kay

私の場合、IDEは@Ignoreアノテーションを無視してテストを実行していました。mvn install(または他のMavenフェーズ)を実行すると、テストがスキップされました。私が実際に目指していたもの(添付の図を参照)。

実行方法の図解

1

テストをスキップするのは@Ignoreだけだと思います

JUnit無視

0
RMT