java - 在定义一些测试规则时从 Suite Runner 与 BlockJUnit4Runner 进行扩展

标签 java interface junit junit-runner junit-rule

我需要编写许多测试。我扩展了 JUnit 的 Suite Runner,以便能够添加新的注释,其中我可以提到几个先决条件类,这些类将在执行任何测试或设置之前执行。我的典型测试如下所示。

@RunWith(CustomSuiteRunner.class)
@BeforeSuite(Prerequisite.class)
@AfterSuite(CleanupOperations.class)
@Suite.SuiteClasses({
                SimpleTests.class,
                WeatherTests.class
            })
public class SimpleSuite {
}

我已经重写了 public void run(final RunNotifier notifier) 以添加触发 BeforeSuite 和 AfterSuite 注释中提到的先决条件和清理操作所需的代码。

现在,我试图找出如何通过扩展 BlockJUnit4Runner 来实现相同的目的?我找不到任何与 run 等效的方法来启动执行以覆盖行为。 runChild 在子进程执行之前被触发。

我正在寻找这个的原因是我正在尝试在接口(interface)中创建几个规则并让我的测试实现这些规则以便它们可用,但是由于接口(interface)元素是静态的并且最终的 JUnit 会忽略这些规则。在我今天问的另一个问题中,我得到的答案是,我可以通过扩展 BlockJUnit4Runner 并覆盖 getTestRules() 使 JUnit 考虑接口(interface)中提到的规则。

所以,这就是我正在尝试找出的内容。

  1. 是否可以扩展 BlockJUnit4Runner 以使其获取测试列表并将它们作为套件运行,并在任何测试执行之前和所有测试执行之后运行一些代码?
  2. 如何扩展 Suite Runner 以考虑已实现接口(interface)中定义的 TestRules?

最佳答案

很有可能扩展 BlockJUnit4Runner 并使其获取测试列表并将它们作为套件运行,并在扩展的 runChild() 方法中处理所需的测试依赖项

public class CustomRunner extends BlockJUnit4ClassRunner {
  private List<String> testsToRun = Arrays.asList(new String[] { “sample1” });

  public CustomRunner(Class<?> klass) throws InitializationError {
    super(klass);
  }

  public void runChild(FrameworkMethod method, RunNotifier notifier) {
    //Handle any dependency logic by creating a customlistener registering notifier
    super.runChild(method,notifier);

  }
}

关于java - 在定义一些测试规则时从 Suite Runner 与 BlockJUnit4Runner 进行扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25105175/

相关文章:

java - 将 java doc keymap 添加到 netbeans

java - 通过 spark-notebook 填充 accumulo 1.6 突变对象时出现奇怪的错误

c# - 创建抽象类还是使用处理器?

java - JUnit 5 中的 TestName 规则等效于什么?

java - 为什么即使我不选择更新我的数组也会更新

java - Gson - TypeAdapterFactory 中的 JsonSerializer 或 TypeAdapter 中的通用类型

c# - 灵活使用 IDictionary(带接口(interface))

java - 接口(interface)是类吗?

java - 对于 String,推荐使用 assertTrue() 或 assertEquals() 的 JUnit?

java - 禁用 JUnit 并发测试 - BeforeClass、AfterClass 问题