6

我有一个接收ContactForm对象和带有收件人的地图的方法。因此,我编写了以下规范,根据表单的查询,返回 Map 中的正确收件人:

def "Correct recipients for first inquiry"() {
    setup:
    def form = Mock(ContactForm)
    form.getInquiry() >> "Subject 1"

    expect:
    sut.getRecipients(form, recipientsTestMap) == ["recipient1"]
}

def "Correct recipients for second inquiry"() {
    setup:
    def form = Mock(ContactForm)
    form.getInquiry() >> "Subject 2"

    expect:
    sut.getRecipients(form, recipientsTestMap) == ["recipient2"]
}

// and so on ...

有没有一种数据驱动的方式来做到这一点?不幸的是,现在不传递表单而是传递查询字符串本身不是一个选项,因为这需要大量重构。我只是好奇 Spock 是否可以进行这种数据驱动的操作,尽管在每次测试之前都必须更改模拟。

4

1 回答 1

10

您可以通过以下方式执行此操作(不确定这是否是您要求的):

@Unroll
def "Correct recipients for #inquiry inquiry"() {
    setup:
    def form = Mock(ContactForm)
    form.getInquiry() >> inquiry

    expect:
    sut.getRecipients(form, recipientsTestMap) == result

    where:
    inquiry     | result
    "Subject 1" | ["recipient1"]
    "Subject 2" | ["recipient2"]
}
于 2014-09-17T12:56:45.147 回答