Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy spock特征法中任意位置的资源配置_Groovy_Spock - Fatal编程技术网

Groovy spock特征法中任意位置的资源配置

Groovy spock特征法中任意位置的资源配置,groovy,spock,Groovy,Spock,在spock测试中,我们希望创建一个资源,并确保无论测试结果如何,都能正确地处理它 我们尝试了下面的方法。但是,当测试代码包装在闭包中时,spock不会执行测试 导入spock.lang.Specification 类ExampleSpec扩展了规范{ def wrapperFunctionClosure cl{ 试一试{ 氯 }最后{ //做定制的东西 } } 封装def测试{ 包装函数{ 期望: 1 == 1 println将不会执行! } } } 在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这种模式