我要求编写许多测试。我扩展了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在子进程执行之前被触发。
我正在寻找这个的原因是我正在尝试在接口中创建几个规则并使我的测试实现它们以便它们可用,但是因为Interface元素是静态的而且最终JUnit忽略了这些。在我今天问的另一个问题中,我得到了答案,我可以通过扩展BlockJUnit4Runner并覆盖getTestRules()
来使JUnit考虑接口中提到的规则。
所以,这是我正在努力寻找的东西。
答案 0 :(得分: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);
}
}