質問は、私よりも優れた解決策を見つけることを目的としています。
統合テストには次の要件があります。
- 各統合テストは、単一のテスト クラスに実装されます。
- テスト クラスのメソッドは、順番に実行する必要があります。
- 各メソッドは、統合/機能テストの 1 つのステップです。
- テスト メソッドが失敗した場合、テスト クラス内の他のすべてのテスト メソッドをスキップする必要があります。これは、後続のエラーを見つける意味がないためです。
私のソリューションは次のようになります。
抽象テスト クラスからすべてのテスト クラスを継承するだけです。
package myPackage;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TestWatcher;
public abstract class FailFastTest {
private final static List<Class<?>> FAILED_CLASSES = new CopyOnWriteArrayList<Class<?>>() ;
private final Class<? extends FailFastTest> thatClass = this.getClass();
@Rule
public final TestWatcher onFailedRule = new TestWatcher() {
protected void failed(Throwable e, org.junit.runner.Description description) {
FAILED_CLASSES.add(thatClass);
};
};
@Before
public final void beforeMethod() {
final boolean failed = FAILED_CLASSES.contains(thatClass);
if(failed) {
System.out.println(thatClass + " FAILED. Aborting test.");
org.junit.Assume.assumeTrue(!failed);
}
}
}
誰かがより良いアイデアを持っていますか? 私の問題:クラス名がスキップを通知するため、このようなテストクラスを複数回並行して実行できません...
いいえ!重複ではありません! さまざまな (Web) サービスを特定の順序で使用する機能テストを作成しようとしています。質問「サーブレットをテストするにはどうすればよいですか?」かなり違います!
ともかく。TestNGに切り替えました。TestNG は、私が持っているすべての要件をサポートし、魅力的に機能します。グルーコードはもう必要ありません!