2016-12-12 62 views
0

我们能写when/then内如果条件斯波克测试?代码看起来像这样。在这里,我试图控制时间和时间的调用。我们可以写`when` /`then`内如果斯波克测试条件

def testMethod(){ 
    given: 
     if(some Condition) { 
      when: 
       eventOne Occurred 
      then: 
       assertion based on eventOne 
     } else if (some Condition) { 
      when: 
       eventTwo Occurred 
      then: 
       assertion based on eventTwo 
     } else { 
      when: 
       eventThree Occurred 
      then: 
       assertion based on eventThree 
     } 
    where: 
     iteration here. 
} 

回答

1

这是什么目的? given-when-then方法旨在使自动化测试更易于理解。你展示的例子使得阅读和理解你的测试变得困难。我甚至会打赌它不会编译。

尽量保持你的测试简单。 where用于为您的测试(参数化测试)提供参数,例如

@Unroll  
def "should return #result for parameters(#a,#b)"() { 

    when: 
     def result = someObject.someMethod(a, b) 

    then: 
     result == expected 

    where: 
     a   | b    || expected 
     null  | null   || false 
     ""   | ""   || false 
     "test"  | "foo"   || true 
} 

这里的主要目的是保持对测试逻辑的理解尽可能简单。如果你想测试不同的组合,那么你可能会创建单独的测试方法。

1

从斯波克角度来看,我无法找到你的具体的例子任何限制。从可读性的角度来看,我不认为这是使用Spock的最佳方式 - 我同意上面的答案。

但请注意的斯波克标签的以下限制(从here)的:

的特征方法必须具有至少一个明确的(即,标记)块 - 事实上,的存在下显式块是使方法成为特征方法的原因。块分割方法为不同的部分,并且 不能嵌套

所以逻辑上你可以认为你的例子为:给予

  1. - 是一组阶段;
  2. 当-然后从所述第一条件;
  3. 当-然后从第二状态;
  4. 当 - 然后从第三个条件;
  5. 其中 - 描述数据供应;