2017-12-18 484 views
0

我正在寫在斯波克測試,目前,這是基本結構:編寫參數測試方法斯波克

def "someTest"(String str, Class<? extends SomeClass> clazz) { 

    setup: 
     (current implementation) 
     obj.get("Sample1") 
     obj.get("Sample2") 
     obj.get("Sample3") 
     ... so on 

     (what I want to implement) 
     object.get(str) 

    when: 
    ... 

    then: 
    ... 
} 

我需要使用strclazzsetup:when:then:等我需要多次調用該方法的方法。

我已經在網上看了一些TUTS:https://www.testwithspring.com/lesson/writing-parameterized-tests-with-spock-framework/但真正對如何與非原始類型

+0

多次調用什麼方法?考試? – doelleri

+0

@doelleri是的,我需要多次調用它(如果它可能在spock中)。我當然可以通過複製粘貼每個str和clazz的所有東西來進行測試,但這會太長了 –

+0

@HeanzyZabala你需要在一個測試場景中執行obj.get(str)很多次,或者你有多個測試場景? –

回答

0

在斯波克您提供在where:部分參數化測試值實現它不知道,作爲一個ASCII '表'或列表。 Spock使用AST轉換將這樣一個錶轉換爲單獨的方法調用。所以它看起來很神奇。

@Unroll // formats method name. Can be on class level 
    def "Name of #clazz is not #str"(String str, Class clazz) { 
    setup: 
    // TODO: real setup 
    str == clazz.name 

    // TODO: when/ then only useful for stimulus-response tests 
    when: 
    str == clazz.name 

    then: 
    str == clazz.name 

    // TODO: expect not needed when using when/then 
    expect: 
    str == clazz.name 

    where: 
    str     | clazz 
    "java.lang.String" | String.class 
    "java.lang.Integer" | Integer.class 

    } 

這可能看起來不喜歡它,但該方法是運行多次在值,您可以通過使用無效的值,使每個方法調用失敗檢查的「表」的每一行。

+0

不要忘記'@ Unroll'註解;-) –

+0

爲什麼每個塊中都有'str == clazz.name',即使那些沒有意義?對於這個例子來說,一個簡單的'expect'就是合適的塊。 –

+0

@LeonardBrüningsOP問:「我需要在安裝過程中使用str和clazz,然後」,我只是試圖表明它是可能的。我懶得做一個更好的例子,隨意大膽地編輯示例(我不介意)。我添加了一些評論來澄清一點。 – tkruse