如何以编程方式跳过Spock框架中的测试?我知道我可以annotate a test with @Ignore
跳过它,或者使用<html>
<head>
...
// if $script is defined, include it
<?php if( isset($script) ){ echo $script; } ?>
</head>
跳过基于环境变量等的测试。但有没有办法运行任意代码来决定是否应该运行测试?
例如,假设我有一个必须连接到第三方服务的沙箱环境的集成测试。服务的沙箱环境中断导致测试失败。假设我编写了一个方法@IgnoreIf
,用于检查测试是否能够连接到此服务,如果canConnectToService
返回false,如何编写将跳过的测试?
答案 0 :(得分:8)
使用JUnit&#39; Assume class。具体来说,如果第三方服务不可用,您可以在测试开始时编写Assume.assumeTrue(canConnectToService())
以跳过测试。如果AssumptionViolatedException
返回false,则此方法将抛出canConnectToService()
,Spock会忽略由AssumptionViolatedException
中断的JUnit兼容性测试(请参阅this bug report)。