java 如何在Spock 1.x中忽略测试并记录原因

inkz8wg9  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(122)

我一直在使用Groovy/Spock编写一些测试,并且开始需要一些装饰器/逻辑,这些装饰器/逻辑只运行一些基于变量值的测试
我阅读到了关于@Ignoreif的文章,这是一个完美的选择,因为它允许我用

@IgnoreIf(value = { !enabled }, reason = "Feature flag not enabled")

我遇到的问题是,原因参数只在2.1中发布,而我的公司在迁移到v2时由于一些主要问题而使用1.3。
有没有其他的选择我可以用来达到相同的结果,记住,在他们一天结束时,我希望看到跳过的测试在管道中,但有一个原因。
谢谢

ev7lccsx

ev7lccsx1#

我遇到的问题是,原因参数只在2.1中发布,而我的公司在迁移到v2时由于一些主要问题而使用1.3。
我的建议是修复这些问题并升级,而不是投资大量的工作来添加一个功能到一个遗留的Spock版本。解决问题,而不是回避它。
我希望在管道中看到跳过的测试,但要说明原因。
你没有指定你到底需要什么。这是关于控制台日志还是关于生成的测试报告?在前一种情况下,一个简单的技巧是:

@IgnoreIf({ println 'reason: back-end server unavailable on Sundays'; true })

如果您需要在测试报告中显示一个漂亮的忽略消息,那就更复杂了。您可能需要开发自己的基于注解的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,它基本上等同于动态跳过条件,但是它是基于代码的,而不是基于注解的,例如:

def dummy() {
  org.junit.Assume.assumeFalse('back-end server unavailable on Sundays', true)

  expect:
  true
}

输出将如下所示,并且跳过测试方法执行的其余部分:

org.junit.AssumptionViolatedException: back-end server unavailable on Sundays
    at org.junit.Assume.assumeTrue(Assume.java:68)
    at org.junit.Assume.assumeFalse(Assume.java:75)
    at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:234)
    at de.scrum_master.stackoverflow.q74575745.AuthRequestInterceptorTest.dummy(AuthRequestInterceptorTest.groovy:26)

在IntelliJ IDEA中,它看起来像这样,实际上报告为跳过的方法:

我认为JUnit 4的假设对于遗留代码库来说已经足够好了,除非您将它们升级到Spock 2.x,并且可以享受所有漂亮的新语法特性和扩展。

相关问题