0

我需要编写许多测试。我已经扩展了 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 在孩子被执行之前被触发。

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

所以,这就是我想要找出的。

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

1 回答 1

1

几乎可以扩展 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);

  }
}
于 2014-08-05T06:13:38.223 回答