Junit 为spock创建自定义测试规则

Junit 为spock创建自定义测试规则,junit,spock,Junit,Spock,我正在使用Spock对groovy进行测试,我想要一个失败时的自定义测试规则。首先,我用MethodRule做了这件事,现在已经不推荐了。所以我尝试了TestWacher,但Spock在我的规则能够缓存异常之前缓存了异常 public class SimpleOnFailed extends TestWatcher { @Override protected void failed(Throwable e, Description description) {

我正在使用Spock对groovy进行测试,我想要一个失败时的自定义测试规则。首先,我用MethodRule做了这件事,现在已经不推荐了。所以我尝试了TestWacher,但Spock在我的规则能够缓存异常之前缓存了异常

    public class SimpleOnFailed extends TestWatcher {

    @Override
    protected void failed(Throwable e, Description description) {
        print "Prints when test fails"
    }

}

它从不从失败的方法中打印我的print语句。

Spock和
TestRule
抛出异常有一个已知的问题,这不容易修复,因为Spock的语义在这方面与JUnit不同。(如果您对详细信息感兴趣,可以在上找到更多信息。)解决方案是使用
MethodRule
(在最新的JUnit中不再被弃用)或编写Spock扩展。后者还没有被认为是一个稳定的SPI,但是如果您能够接受潜在的变化,那么可以看看Spock代码库()中的扩展

感谢您的回答,因此我将坚持使用
MethodRule