gpt4 book ai didi

unit-testing - 参数化 Spock 设置

转载 作者:行者123 更新时间:2023-11-28 20:40:40 25 4
gpt4 key购买 nike

是否可以参数化 Spock setup

我的意思是,假设我有一个要测试其状态的对象。对象可以有多个状态,但为了简化事情,假设有一个我特别感兴趣的状态,S1

有多种方法可以将对象获取到S1。我正在测试状态,因此无论对象如何到达 S1S1 的所有测试都将相同。测试用例之间唯一不同的是 setup 策略。

处理此问题的一种方法是拥有一个基本测试用例(或“规范”以使用 Spock 的说法)和仅提供不同的 setup 策略的子类。

但是,考虑到 Spock 提供的良好的数据驱动测试功能,我想知道是否可以通过某种方式对设置进行参数化,从而不需要具体的子类规范。

实际上,我会说,这是一个规范,现在使用这些不同的执行设置方式来运行它。

最佳答案

总是很高兴至少有一些代码作为示例,但现在就开始吧。
尝试将您的话放入数据驱动的规范中:

class MyObjectSpec extends Specification {

@Unroll
def "Using setup strategy '#desc', instance of MyObject will reach state S1" {

setup:
def myObject = new MyObject()
setupStrategy.call(myObject)

expect:
hasStateS1(myObject)

where:
setupStrategy | desc
{ setupThisWay(it) } | 'this way'
{ setupThatWay(it) } | 'that way'
{ setupAnotherWay(it) } | 'another way'
}

void setupThisWay(MyObject myObject) {
// mutate myObject
}

// setupThatWay, setupAnotherWay

void hasStateS1(MyObject myObject) {
assert myObject.hasStateS1()
}
}

我们使用 Groovy 闭包,在数据表中内联定义以调用帮助器方法来改变您新创建的对象。

在这种情况下,没有 when block ,因为您有点暗示您希望有趣的部分发生在 setup 中(与 given),expect 是一个then,不需要when

辅助方法的类型为void,并根据建议进行自己的断言in the Spock documentation (实际上使 then/expect 无操作,但是 Spock 编译器总是强制执行它)。

数据驱动的文档是 here .

关于unit-testing - 参数化 Spock 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34552946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com