Groovy spock特征法中任意位置的资源配置
在spock测试中,我们希望创建一个资源,并确保无论测试结果如何,都能正确地处理它 我们尝试了下面的方法。但是,当测试代码包装在闭包中时,spock不会执行测试 导入spock.lang.Specification 类ExampleSpec扩展了规范{ def wrapperFunctionClosure cl{ 试一试{ 氯 }最后{ //做定制的东西 } } 封装def测试{ 包装函数{ 期望: 1 == 1 println将不会执行! } } } 在spock测试中创建和处理资源的最佳方法是什么 设置和清理不是可行的解决方案,因为在功能方法内的任意点都可以创建和处理功能块。您可以在测试用例功能方法内使用设置和清理块,如下所示:Groovy spock特征法中任意位置的资源配置,groovy,spock,Groovy,Spock,在spock测试中,我们希望创建一个资源,并确保无论测试结果如何,都能正确地处理它 我们尝试了下面的方法。但是,当测试代码包装在闭包中时,spock不会执行测试 导入spock.lang.Specification 类ExampleSpec扩展了规范{ def wrapperFunctionClosure cl{ 试一试{ 氯 }最后{ //做定制的东西 } } 封装def测试{ 包装函数{ 期望: 1 == 1 println将不会执行! } } } 在spock测试中创建和处理资源的最佳方法
class ReleaseResourcesSpec extends Specification {
void 'Resources are released'() {
setup:
def stream = new FileInputStream('/etc/hosts')
when:
throw new IllegalStateException('test')
then:
true
cleanup:
stream.close()
println 'stream was closed'
}
}
尽管测试失败或出现任何异常,清理块中的代码始终会执行。请参见上面示例的结果:
因此,它类似于设置和清理方法,但在这种情况下,您可以为每个功能方法使用不同的设置和清理代码。您可以在测试用例功能方法内部使用设置和清理块,如下所示:
class ReleaseResourcesSpec extends Specification {
void 'Resources are released'() {
setup:
def stream = new FileInputStream('/etc/hosts')
when:
throw new IllegalStateException('test')
then:
true
cleanup:
stream.close()
println 'stream was closed'
}
}
尽管测试失败或出现任何异常,清理块中的代码始终会执行。请参见上面示例的结果:
因此,它与设置和清理方法类似,但在本例中,每个功能方法都可以有不同的设置和清理代码。很难猜出您在本例中测试的是什么。您是否试图断言调用了cl?我假设错误是大致相同的,斯波克在抱怨这里的结构?不明智的选择重做方法可能是移动期望:在闭包内写出定期声明。这些资源是什么?现在,考虑到你的实际情况:你为什么要为这件事烦恼,我更想知道?在测试执行站点上,服务器模拟的这些外观非常便宜,除了JVM在非常短的测试生命期结束时所做的事情之外,为什么还要显式地处理它们呢?只要JUnit实际运行的是Spock东西,并且它为每个执行的@test方法跨一个单独的测试类实例?mock的实际服务器实现差别不大,它相当大&它的资源消耗可以忽略不计。事实上,mock在WireMock服务器上是可重写的——我不明白为什么在每个单独的测试方法中都要删除每个单独的mock?只需重置整个测试套件拆卸中的所有操作,您就会非常好。所有这些都说明了——你不觉得你在无中生有地过度设计整个过程吗?很难猜出你在这个例子中测试什么。您是否试图断言调用了cl?我假设错误是大致相同的,斯波克在抱怨这里的结构?不明智的选择重做方法可能是移动期望:在闭包内写出定期声明。这些资源是什么?现在,考虑到你的实际情况:你为什么要为这件事烦恼,我更想知道?在测试执行站点上,服务器模拟的这些外观非常便宜,除了JVM在非常短的测试生命期结束时所做的事情之外,为什么还要显式地处理它们呢?只要JUnit实际运行的是Spock东西,并且它为每个执行的@test方法跨一个单独的测试类实例?mock的实际服务器实现差别不大,它相当大&它的资源消耗可以忽略不计。事实上,mock在WireMock服务器上是可重写的——我不明白为什么在每个单独的测试方法中都要删除每个单独的mock?只需重置整个测试套件拆卸中的所有操作,您就会非常好。所有这些都说明了——难道你不觉得你在无中生有地过度设计整个事情吗?事实上,这是一个可行的解决方案,我们目前正在以类似的形式使用。需要将资源存储在一个专用变量中,并且需要额外的代码来释放我们有时需要的中间资源,这使得我们想到了上面的问题@cgrim以任何方式避免单独的setup:和cleanup:部分,并创建更像此模式的东西,这确实是我们目前以类似形式使用的可行解决方案。需要将资源存储在一个专用变量中,并且需要额外的代码来释放我们有时需要的中间资源,这使得我们想到了上面的问题@cgrim有没有办法避免单独的setup:和cleanup:部分,并创建更像 e这种模式