以编程方式跳过Spock中的测试

fzz*_*fzz 8 spock

如何以编程方式跳过Spock框架中的测试?我知道我可以@Ignore跳过它来注释测试,或者@IgnoreIf用来跳过基于环境变量等的测试.但有没有办法运行任意代码来决定是否应该运行测试?

例如,假设我有一个必须连接到第三方服务的沙箱环境的集成测试.服务的沙箱环境中断导致测试失败.假设我编写了一个canConnectToService检查测试是否能够连接到此服务的方法,如何canConnectToService()返回false时如何编写将被跳过的测试?

fzz*_*fzz 9

使用JUnit的Assume类.具体来说,Assume.assumeTrue(canConnectToService())如果第三方服务不可用,您可以在测试开始时写入以跳过测试.此方法将抛出AssumptionViolatedExceptionif canConnectToService()返回false,Spock忽略由AssumptionViolatedExceptionfor JUnit兼容性中断的测试(请参阅此错误报告).

  • 对于 Spock 2.x,使用 JUnit 5 的 Asminations.assumeTrue ( https://junit.org/junit5/docs/5.0.0/api/org/junit/jupiter/api/Asductions.html ) 或抛出 TestAbortedException ( https: //ota4j-team.github.io/opentest4j/docs/1.0.0/api/org/opentest4j/TestAbortedException.html?is-external=true ),因为 Spock 2 基于 Junit 5(参见 https://github .com/spockframework/spock/issues/1185)。 (3认同)