这个问题旨在找到比我更好的解决方案。
我的集成测试有以下要求:
- 每个集成测试都在单个测试类中实现。
- 测试类中的方法必须按顺序执行。
- 每种方法都是集成/功能测试的一个步骤。
- 如果测试方法失败,则必须跳过测试类中的所有其他测试方法 - 因为查找后续错误没有意义。
我的解决方案如下所示:
我只是从我的抽象测试类继承每个测试类:
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);
}
}
}
有人有更好的主意吗?我的问题:我不能并行运行这样一个测试类,因为类名表示跳过......
不!它不是重复的! 我尝试编写以特定顺序使用不同(网络)服务的功能测试。问题“我如何测试 servlet?” 是完全不同的!
反正。我切换到TestNG。TestNG 支持我的所有要求,并且像魅力一样工作。我不再需要我的胶水代码了!