以编程方式跳过 Spock 中的测试
Programmatically skip a test in Spock
如何以编程方式跳过 Spock 框架中的测试?我知道我可以 annotate a test with @Ignore
跳过它,或者使用 @IgnoreIf
跳过基于环境变量等的测试。但是有没有办法 运行 决定测试是否应该 运行 的任意代码?
例如,假设我有一个必须连接到第三方服务的沙箱环境的集成测试。服务的沙箱环境中断导致测试失败。假设我已经编写了一个方法 canConnectToService
来检查测试是否能够连接到该服务,我该如何编写一个在 canConnectToService()
returns 为 false 时将被跳过的测试?
使用 JUnit 的 Assume class. Specifically, you could write Assume.assumeTrue(canConnectToService())
at the beginning of your test to skip the test if the third party service is unavailable. This method will throw an AssumptionViolatedException
if canConnectToService()
returns false, and Spock ignores tests that are interrupted by an AssumptionViolatedException
for JUnit compatibility (see this bug report).
如何以编程方式跳过 Spock 框架中的测试?我知道我可以 annotate a test with @Ignore
跳过它,或者使用 @IgnoreIf
跳过基于环境变量等的测试。但是有没有办法 运行 决定测试是否应该 运行 的任意代码?
例如,假设我有一个必须连接到第三方服务的沙箱环境的集成测试。服务的沙箱环境中断导致测试失败。假设我已经编写了一个方法 canConnectToService
来检查测试是否能够连接到该服务,我该如何编写一个在 canConnectToService()
returns 为 false 时将被跳过的测试?
使用 JUnit 的 Assume class. Specifically, you could write Assume.assumeTrue(canConnectToService())
at the beginning of your test to skip the test if the third party service is unavailable. This method will throw an AssumptionViolatedException
if canConnectToService()
returns false, and Spock ignores tests that are interrupted by an AssumptionViolatedException
for JUnit compatibility (see this bug report).