2017-12-18 486 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