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

时间:2018-05-06 13:34:49

标签: groovy spock

我正在使用spock进行测试。

对于规格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
 }
}

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

2 个答案:

答案 0 :(得分:1)

You can just write a method in you test class. E.g.:

keeplimits

Note that if you use "def" instead of "void", whatever the last line in your method will return, will be returned from the method. That might lead to a failing test, if it is null.

答案 1 :(得分:1)

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

例如,你可以这样做:

def 'f1' () {
 when:
   redundantcode(fileName)
 then: 
   redundantcode_with_no_param
 then: 
   valuable_code_3
 where: 
   fileName << ['file1', 'file2', 'file3']
 }

这假设您的valuable_code_3也有些可重复。如果你在某处有比较,你可以将它扩展为在“result&lt;&lt; ['expectedResult1','expectedResult2','expectedResult3']等等的where子句中有第二个值。