有没有办法让Eclipse多次运行JUnit测试直到失败?

2022-09-01 14:32:51

我们偶尔会有错误,它们在每个 X 运行中出现一次。在人们签入东西之前(它自动是JUnit'd),我们的开发人员需要通过Eclipse在本地传递JUnit。

有没有一些方便的方法(内置或高质量的插件)来让Eclipse运行相同的测试X次,并在出现故障时停止?只是单击“运行 X 次”的替代方法?

请注意,我正在UI中查找某些内容(例如,右键单击并说“运行X次”而不仅仅是“运行”)。


答案 1

如果 for 循环有效,那么我同意 nos。

如果您需要重复整个设置-测试-拆卸,则可以使用TestSuite:

  1. 右键单击包含要重复的测试的包
  2. 转到“新建”并选择创建 JUnit 测试套件
  3. 确保仅选择了要重复的测试,然后单击以完成。
  4. 编辑文件以多次运行它。

在文件中,您只需找到

addTestSuite(YourTestClass.class)

行,并将其包装在 for 循环中。

我很确定,如果您只想重复单个测试方法,则可以使用addTest而不是addTestSuite来使其仅从该类运行一个测试。


答案 2

如果你真的想运行一个测试类直到失败,你需要自己的运行器。

@RunWith(RunUntilFailure.class)
public class YourClass {

    // ....

}

这可以按如下方式实现...

package com.example;

import org.junit.internal.runners.*;
import org.junit.runner.notification.*;
import org.junit.runner.*;

public class RunUntilFailure extends Runner {

    private TestClassRunner runner;

    public RunUntilFailure(Class<?> klass) throws InitializationError {
        this.runner = new TestClassRunner(klass);
    }

    @Override
    public Description getDescription() {
        Description description = Description.createSuiteDescription("Run until failure");
        description.addChild(runner.getDescription());
        return description;
    }

    @Override
    public void run(RunNotifier notifier) {
        class L extends RunListener {
            boolean fail = false;
            public void testFailure(Failure failure) throws Exception { fail = true; }
        }
        L listener = new L();
        notifier.addListener(listener);
        while (!listener.fail) runner.run(notifier);
    }

}

...发布未经测试的代码,感到TDD内疚:)


推荐