Groovy 在spock框架中的功能之间共享代码

Groovy 在spock框架中的功能之间共享代码,groovy,spock,Groovy,Spock,我用斯波克做测试 对于规范S,我有三个不同的特性F1、F2和F3 我有我的功能与给定,当,然后部分,但我想分享之间的代码给定和当,因为这几乎是相同的,除了当时的一部分 伪代码: class S extends Specification { def 'f1' () { given: redundantcode('file1') then: redundantcode_2_with_no_param when: valuable_code_1

我用斯波克做测试

对于规范S,我有三个不同的特性F1、F2和F3

我有我的功能与给定,当,然后部分,但我想分享之间的代码给定和当,因为这几乎是相同的,除了当时的一部分

伪代码:

class S extends Specification {

 def 'f1' () {
   given:
     redundantcode('file1')
   then:
     redundantcode_2_with_no_param
   when:
     valuable_code_1
 }

 def 'f2' () {
   given:
     redundantcode('file2')
   then:
     redundantcode_2_with_no_param
   when:
     valuable_code_2
 }

 def 'f3' () {
   given:
     redundantcode('file3')
   then:
     redundantcode_2_with_no_param
   when:
     valuable_code_3
 }
}

我正在寻找一种方法来避免给定部分和when部分中的重复代码。

您可以在测试类中编写一个方法。例如:

void redundantcode_2_with_no_param() {…}

请注意,如果使用“def”而不是“void”,则无论方法中的最后一行返回什么,都将从方法中返回。如果为空,则可能导致测试失败。

您是否正在寻找使用数据表或数据管道的参数化测试方法

例如,您可以执行以下操作:

def 'f1' () {
 when:
   redundantcode(fileName)
 then: 
   redundantcode_with_no_param
 then: 
   valuable_code_3
 where: 
   fileName << ['file1', 'file2', 'file3']
 }
def'f1'(){
什么时候:
冗余代码(文件名)
然后:
带参数的冗余代码
然后:
有价值的代码3
哪里:

文件名在你说“给定”和“何时”之前,这个想法更多的是与给定共享所有部分,然后将部分包含在一行中,现在是“然后”?我想这只是一个打字错误,不是吗?我不明白你在做什么。你能用一些例子更新你的问题吗?你希望代码看起来像什么?最好提供一个而不是伪代码代码。此外,它是在什么时候给出的,你写了什么时候给出的,这使得发现你真正想要做的事情更令人恼火。没有人可以编译和运行你的代码,然后为你重构它。嘿,克里斯托夫!首先你在问一个问题,然后当人们试图帮助你或问后续问题时,你忽略了他们那是什么样的行为?你愿意被这样对待吗?哦,对不起,我不在。真的很抱歉。我在找那个。