在定义一些TestRules时,从Suite Runner扩展到BlockJUnit4Runner

时间:2014-08-03 13:35:20

标签: 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来了解如何实现同样的目标?我找不到任何等效于运行的方法来启动执行以覆盖行为。有一个runChild在子进程执行之前被触发。

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

所以,这是我正在努力寻找的东西。

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

1 个答案:

答案 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);

  }
}