正在执行的 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
作为我的解决方法。
我想编写一个 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
作为我的解决方法。