3

我已经@TestFactory在 J​​Unit5 中编写了一个动态测试,现在我看到我不能@Before为动态测试做,参考 JUnit 5 User Guide - Writing Test Annotations

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

我想加入的方法,@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是可能的。参考 改进 DynamicTest 生命周期的文档

动态测试生命周期

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

4

2 回答 2

5

@BeforeAll / @AfterAll可以在动态测试中使用。参考 改进 DynamicTest 生命周期的文档

动态测试生命周期

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

于 2017-03-30T13:46:29.980 回答
1

在动态测试中使用@BeforeAllor@AfterAll(还)不可能的。

努力实现这一点,但似乎开发人员尚未决定如何完成。

我自己决定暂时手动调用我的设置方法,这很丑陋。

于 2019-08-26T14:15:28.480 回答