正在执行的 JUnit 5 测试可以注册额外的测试吗?

Can an executing JUnit 5 test register additional tests?

我想编写一个 JUnit 5 扩展,它可以在执行期间注册额外的动态测试。这些理想情况下会显示为正在执行的测试方法或 class.

的子项

我查看了提供给扩展回调实例的 ExecutionContext,它似乎没有任何挂钩允许这样做。

执行测试是否可以使用任何其他机制来注册其他测试?

例子

从评论中我可以看出我并不是 100% 清楚我在追求什么。

@TestFactory 和动态测试接近我所追求的,但不完全是。它们看起来像这样:

@TestFactory
Iterator<DynamicTest> dynamicTestsFromIterator() {
    return Arrays.asList(
        dynamicTest("5th dynamic test", () -> assertTrue(isPalindrome("madam"))),
        dynamicTest("6th dynamic test", () -> assertEquals(4, calculator.multiply(2, 2)))
    ).iterator();
}

我希望能够避免样板代码并得到如下所示的内容:

@Test
public void dynamicTestsFromIterator() {
    registerDynamicTest("5th dynamic test", () -> assertTrue(isPalindrome("madam")));
    registerDynamicTest("6th dynamic test", () -> assertEquals(4, calculator.multiply(2, 2)));
}

这样,在我想到的应用程序中,我可以轻松地将动态测试改装到我现有的测试套件中,而无需进行大量重构即可使用 @TestFactory。我认为代码在没有额外样板的情况下也更简洁、更易读。

感谢@Sormuras 对文档的 link,这促使我 re-read 动态测试部分 (https://junit.org/junit5/docs/current/user-guide/#writing-tests-dynamic-test-examples)。答案在那里:

As of JUnit Jupiter 5.4.2, dynamic tests must always be created by factory methods; however, this might be complemented by a registration facility in a later release.

所以我所追求的注册设施在 Jupiter 中还不存在。不过,我也许可以使用 @TestFactory 作为我的解决方法。