我需要编写许多测试。我扩展了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
来实现相同的目标?我找不到任何相当于运行的方法,开始执行以覆盖行为。有runChild,它在子线程被执行之前被触发。
我寻找这个的原因是我试图在接口中创建几个规则,并使我的测试实现,以便它们可用,然而,由于接口元素是静态的,最终JUnit忽略了这些。在我今天问的另一个问题中,我得到了答案,我可以通过扩展BlockJUnit4Runner和重写getTestRules()
使JUnit考虑在接口中提到的规则。
所以,这就是我想知道的。
- 是否有可能扩展BlockJUnit4Runner,使其采取测试列表,并运行它们作为套件,还运行一些代码之前的任何测试得到执行和所有测试后执行?
- 我如何扩展套件运行器来考虑在实现的接口中定义的testrrules ?
扩展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);
}
}