我有一堆@ParameterizedTest
,它们从@MethodSource
接收参数,并得到相当冗长的toString()
结果(例如:例如 selenium 的WebDriver
)。默认情况下,这些名称用于组成相应的显示名称。JUnit 5用户指南:
默认情况下,参数化测试调用的显示名称包含调用索引和该特定调用的所有参数的String表示。但是,您可以通过@ParameterizedTest
注解的name
属性[。..]
虽然这允许在一定程度上自定义显示名称,但似乎我无法调整单个参数的字符串表示。不幸的是,通过@DisplayNameGeneration
指定生成器只能应用于类级别,并且不会影响参数化测试调用的显示名称。
有没有办法将DisplayNameGenerator
用于@ParameterizedTest
,或者定制给定参数的字符串表示形式?
4条答案
按热度按时间5sxhfpxr1#
从JUnit 5开始。8.0中,有一个
Named<T>
接口作为JUnit Jupiter API的一部分,“自动支持将包含的有效负载[参数]直接注入参数化方法”(参见issue #2301)。示例:如果你喜欢静态导入,你也可以从
Arguments
和Named
中选择相应的别名:更多信息,请参阅相应文档。
ldxq2e6h2#
为了间接地实现您的目标,直到JUnit直接支持它,您总是可以向测试添加一个参数,该参数是所需的字符串。然后需要在参数提供程序方法中进行定制。
缺点是单元测试提供的参数在测试的实现中没有使用,这可能会损害清晰度,但随后它会成为测试报告中冗长名称的折衷。
xqnpmsa83#
只是在surefire报告中添加了类似的问题。
使用
@DisplayName
和@ParameterizedTest(name = "{0}")
后,报告中未获得正确的测试名称。这个问题解决了我的问题#1255
wh6knrhe4#
对于较大的单元(例如需要更多参数,与一些服务交互等)。)我通常使用
TestCase
记录并覆盖toString()
方法以获得一个显示良好的名称。不幸的是,Java没有任何记录的创建模式,所以我通常用
Java Class + Lombok
替换记录(或者使用Kotlin)。