我们可以在spock测试条件下写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.
}
答案 0 :(得分:2)
这是为了什么目的? 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 :(得分:1)
从Spock的角度来看,我找不到您的具体示例的任何限制。从可读性的角度来看,我不认为这是使用Spock的最佳方式 - 我同意上面的回答。
但请注意Spock标签的以下限制(来自here):
要素方法必须至少有一个显式(即标记)块 - 事实上,显式块的存在是使方法成为特征方法的原因。块将方法划分为不同的部分,并且 无法嵌套。
所以从逻辑上讲,你可以把你的例子看作: