JUnit 5在TestFactory注释之前

时间:2017-03-30 07:24:26

标签: java dynamic annotations junit5

我已经在JUnit5中编写了一个动态测试@TestFactory,现在我已经看到我无法进行@Before动态测试,指的是 JUnit 5 User Guide - Writing Test Annotations

是否有任何解决方法可以执行@Before或类似于TestFactory之前的操作?

方法我想放入@Before,因为它只是初始化内容:

public static void initialize() throws Exception{
    buildTest = new XQueryTestHelper();
    buildTest.initialization();

    listTestSuiteIdentifier = buildTest.getListTestsuiteIdentifier();
    arrayHdrInbPayTestcases = buildTest.getHdrInbPayTestcases();
    arrayHeaderAndBodyTestcases = buildTest.getHeaderAndBodyTestcases();
    listHeaderAndBodyTestSuites = buildTest.getHeaderAndBodyTestSuites();
    listHdrInbPayTestSuites = buildTest.getHdrInbPayTestsuites();

}

解决方案:

在动态测试中可以使用@BeforeAll / @AfterAll。参考 Improve documentation of DynamicTest lifecycle

  

动态测试生命周期

     

动态测试的执行生命周期与标准@Test案例的执行生命周期完全不同。具体来说,动态测试没有任何生命周期回调。这意味着不会为动态测试执行@BeforeEach和@AfterEach方法及其相应的扩展回调。换句话说,如果您在lambda表达式中访问测试实例中的字段以进行动态测试,那么这些字段将不会被执行由相同@TestFactory方法生成的动态测试之间的回调方法或扩展重置。

2 个答案:

答案 0 :(得分:3)

在动态测试中可以使用@BeforeAll / @AfterAll。参考 Improve documentation of DynamicTest lifecycle

  

动态测试生命周期

     

动态测试的执行生命周期与标准@Test案例的执行生命周期完全不同。具体来说,动态测试没有任何生命周期回调。这意味着不会为动态测试执行@BeforeEach和@AfterEach方法及其相应的扩展回调。换句话说,如果您在lambda表达式中访问测试实例中的字段以进行动态测试,那么这些字段将不会被执行由相同@TestFactory方法生成的动态测试之间的回调方法或扩展重置。

答案 1 :(得分:0)

在动态测试中,not (yet) possible是使用@BeforeAll@AfterAll

efforts to implement this,但似乎开发人员尚未决定如何实现。

我本人决定暂时手动调用我的设置方法,这非常丑陋。