我一直在使用Groovy/Spock编写一些测试,并且开始需要一些装饰器/逻辑,这些装饰器/逻辑只运行一些基于变量值的测试
我阅读到了关于@Ignoreif的文章,这是一个完美的选择,因为它允许我用
@IgnoreIf(value = { !enabled }, reason = "Feature flag not enabled")
我遇到的问题是,原因参数只在2.1中发布,而我的公司在迁移到v2时由于一些主要问题而使用1.3。
有没有其他的选择我可以用来达到相同的结果,记住,在他们一天结束时,我希望看到跳过的测试在管道中,但有一个原因。
谢谢
1条答案
按热度按时间ev7lccsx1#
我遇到的问题是,原因参数只在2.1中发布,而我的公司在迁移到v2时由于一些主要问题而使用1.3。
我的建议是修复这些问题并升级,而不是投资大量的工作来添加一个功能到一个遗留的Spock版本。解决问题,而不是回避它。
我希望在管道中看到跳过的测试,但要说明原因。
你没有指定你到底需要什么。这是关于控制台日志还是关于生成的测试报告?在前一种情况下,一个简单的技巧是:
如果您需要在测试报告中显示一个漂亮的忽略消息,那就更复杂了。您可能需要开发自己的基于注解的Spock扩展,它将对您的自定义
@MyIgnoreIf(value = { true }, reason = 'whatever')
做出React,并以某种方式与报告生成挂钩,这可能是可行的,但我从未尝试过。此外,Spock 2.x可以更容易地为用户提供跳过原因的原因是它的引擎运行在JUnit 5平台之上,该平台有一个现成的
Node.SkipResult.skip(String reason)
方法,Spock可以将跳过原因委托给该方法。但是Spock 1.x运行在JUnit 4之上,那里没有这样的基础设施,你可以使用JUnit 4 assumptions,它基本上等同于动态跳过条件,但是它是基于代码的,而不是基于注解的,例如:
输出将如下所示,并且跳过测试方法执行的其余部分:
在IntelliJ IDEA中,它看起来像这样,实际上报告为跳过的方法:
我认为JUnit 4的假设对于遗留代码库来说已经足够好了,除非您将它们升级到Spock 2.x,并且可以享受所有漂亮的新语法特性和扩展。