1

这个问题旨在找到比我更好的解决方案。

我的集成测试有以下要求:

  1. 每个集成测试都在单个测试类中实现。
  2. 测试类中的方法必须按顺序执行。
  3. 每种方法都是集成/功能测试的一个步骤。
  4. 如果测试方法失败,则必须跳过测试类中的所有其他测试方法 - 因为查找后续错误没有意义。

我的解决方案如下所示:

我只是从我的抽象测试类继承每个测试类:

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 支持我的所有要求,并且像魅力一样工作。我不再需要我的胶水代码了!

4

0 回答 0