我使用Spock框架。我知道可以封装来自then:
块的逻辑的辅助方法。我需要的是在同一个类中的不同特征方法之间重用几行代码。这些代码行包含when:
个then:
块,例如:
def "myFeatureMethod"() {
given:
...
when:
...
then:
...
myHelperMethod
}
private void myHelperMethod() {
when:
...
then:
...
}
据我所知,Spock目前无法实现这一目标。有没有可用的解决方法来实现相同的目标?
答案 0 :(得分:0)
首先让我们确保我们理解Spock框架中每个块的含义。
使用时:是我们想要检查的条件。
使用 then:是我们希望获得的结果。
对于具有相同条件的相同时间块, then:块的行为应该具有相同的结果。
最佳做法是省略 then:块中的一个(可能在第一次检查后,您可以找到其中一个无关紧要)。 省略不相关的然后块后,您可以合并2 时:块。
另一种选择是在每次Spock测试结束时使用清洁方法。
可以通过两种方式完成:
def cleanup() {} // run after every feature method def cleanupSpec() {} // run after the last feature method
答案 1 :(得分:0)
如果您尝试重复使用 then:块,则意味着您需要多个单元测试来检查相同的内容。这是一种反模式,因为它导致难以维护的代码。
您应该将您的公共单元测试代码集中在一个测试方法中,如果您想要相同的测试逻辑,则使用parameterized tests,但不同的“示例”。
答案 2 :(得分:0)
Spock现在确实允许def "offered PC matches preferred configuration"() {
when:
def pc = shop.buyPc()
then:
matchesPreferredConfiguration(pc)
}
def matchesPreferredConfiguration(pc) {
pc.vendor == "Sunny"
&& pc.clockRate >= 2333
&& pc.ram >= 4096
&& pc.os == "Linux"
}
块中的辅助方法-来自documentation:
void matchesPreferredConfiguration(pc) {
assert pc.vendor == "Sunny"
assert pc.clockRate >= 2333
assert pc.ram >= 4096
assert pc.os == "Linux"
}
或者带有更好的错误消息:
wal_checkpoint