java - 使用 JUnit 5 的 @ParametrizedTest 而不是 @TestFactory Stream 有什么区别/优势?
问题描述
首先,在 Junit 5 动态测试指南的结论中,它们是什么意思?
参数化测试可以替代本文中的许多示例。但是,动态测试与参数化测试不同,因为它们支持完整的测试生命周期,而参数化测试不支持。
我浏览了JUnit 5 – Parameterized Tests并相信我理解了句法层面的差异,并且相信我明白了这一点:
此外,动态测试在如何生成输入以及如何执行测试方面提供了更大的灵活性。
但是看起来,为什么有人更喜欢参数化测试而不是动态测试?
解决方案
动态测试,我将它们称为 testlets,只是软/分组断言(assertAll(...)
)。您将在报告中看到每个生成的动态测试的条目,但它们不是真正的测试。
您复制到问题中的引用(来自 baeldung)是错误的。它应该在 JUnit 的用户指南中阅读:
动态测试生命周期
@Test
动态测试的执行生命周期与标准案例的执行生命周期完全不同。具体来说,单个动态测试没有生命周期回调。这意味着@BeforeEach
和@AfterEach
方法及其相应的扩展回调是针对@TestFactory
方法执行的,而不是针对每个动态测试执行的。
有关更多详细信息,请阅读:https ://junit.org/junit5/docs/current/user-guide/#writing-tests-dynamic-tests
为什么有人更喜欢参数化测试而不是动态测试?
- 如果您需要为每个测试(模板调用)提供完整的生命周期支持。
- 如果你想在注释中声明你的参数。
在此处找到有关如何以各种形式向 a 提供参数的更多详细信息@ParameterizedTest
:https ://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests - 请注意“类/容器模板”计划在以后发布:https ://github.com/junit-team/junit5/issues/878
我在这里写了一篇博客文章,比较了用 JUnit Jupiter 分散 3 个断言的 5 个步骤:https ://sormuras.github.io/blog/2018-05-14-junit5-scatter-assertions.html
推荐阅读
- jquery - parseFloat() 不适用于我从数字类型输入中获得的值
- haskell - 如何使用过滤器和映射 Haskell?
- .net-core - NServiceBus 可以有两个具有不同处理程序的端点来接收不同的 RabbitMQ 事件吗?
- python - 无法使用 pipenv 安装 django。PermissionError:[Errno 13] 权限被拒绝:'Pipfile'
- swift - Swift 中的动态协议一致性
- javascript - 从 JSON 对象生成 HTML 表
- c# - Sendgrid 不发送确认电子邮件 asp.net core 3.1
- reactjs - 如果单个挂钩状态发生更改,自定义挂钩返回组件会重新呈现所有子组件
- javascript - js中的编程绑定
- sql - PostgreSql中的除法运算符错误:运算符不存在:未知/