2016-12-12 60 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. 其中 - 描述數據供應;