JUnit3.8からJUnit4.4に切り替えました。 antを使用してテストを実行すると、すべてのテストは正常に実行されますが、テストユーティリティクラスは「実行可能なメソッドがありません」というエラーで失敗します。私が使用しているパターンは、テストフォルダーの下に* Test *という名前のすべてのクラスを含めることです。
私は、ランナーが@Test属性で注釈されたメソッドを見つけることができないことを理解しています。ただし、これらのクラスはテストではないため、このような注釈は含まれていません。驚くべきことに、これらのテストをEclipseで実行するとき、これらのクラスについて文句を言うことはありません。
JUnit3.8では、これらのユーティリティクラスはTestCaseを拡張しなかったため、ランナーはそれらを実行しようとしなかったため、まったく問題ではありませんでした。
Antスクリプトのjunitターゲットでこれらの特定のクラスを除外できることを知っています。しかし、新しいユーティリティクラスを追加するたびにビルドファイルを変更したくありません。クラスの名前を変更することもできます(ただし、クラスに良い名前を付けることは、常に私の最も弱い才能でした:-)
この問題のエレガントな解決策はありますか?
テストクラスの検索に使用するパターンを制御していると仮定すると、*Test
ではなく*Test*
に一致するようにパターンを変更することをお勧めします。そのようにすると、TestHelper
は一致しませんが、FooTest
は一致します。
@Ignoreでutilクラスに注釈を付けます。これにより、JUnitはそれらをテストとして試行および実行しなくなります。
私の特定のケースには、次のシナリオがあります。私たちのテスト
public class VenueResourceContainerTest extends BaseTixContainerTest
すべて拡張する
BaseTixContainerTest
jUnitはBaseTixContainerTestを実行しようとしていました。貧しいBaseTixContainerTestは、コンテナをセットアップし、クライアントをセットアップし、ピザを注文してリラックスしようとしました...男。
前述のように、クラスに注釈を付けることができます
@Ignore
しかし、それにより、JUnitはそのテストをスキップされたと報告しました(完全に無視されるのではなく)。
Tests run: 4, Failures: 0, Errors: 0, Skipped: 1
その種は私をイライラさせました。
そこで、BaseTixContainerTestを抽象化しましたが、JUnitはそれを本当に無視します。
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
JUnitがテストベースクラスをインスタンス化しないようにするには
public abstract class MyTestBaseClass { ... whatever... }
(@Ignoreは、無視するものとして報告します一時的に無視されたテストのために予約します。)
IDEのコード補完を使用して@Test
のインポートを追加する場合は注意してください。
たとえば、import org.junit.Test
ではなくimport org.testng.annotations.Test
である必要があります。後者を実行すると、「実行可能なメソッドがありません」というエラーが表示されます。
Antには、探しているように見えることを正確に行うように設計されたskipNonTests
属性が付属しています。基本クラスを変更して抽象化または注釈を追加する必要はありません。
これらのクラスに空のテストメソッドを追加するのはどうですか?
public void avoidAnnoyingErrorMessageWhenRunningTestsInAnt() {
assertTrue(true); // do nothing;
}
あなたのテストクラスでimport org.junit.jupiter.api.Testを書いた場合;それを削除してimport org.junit.Testを書きます。この場合、それは私にも働きました。
私は、コードの最も単純な部分(@ Test、@ Beforeなどを使用)を実行する際にも同様の問題(「実行可能なメソッドがありません。」)に直面していました。 Junit4とEclipse SDKバージョン4.1.2を使用していました。最新のEclipse SDK 4.2.2を使用して、問題を解決しました。これが、やや似たような問題に苦しんでいる人々に役立つことを願っています。