Java spock框架中的高级助手方法
我使用Spock框架。我知道helper方法可以封装Java spock框架中的高级助手方法,java,groovy,spock,Java,Groovy,Spock,我使用Spock框架。我知道helper方法可以封装then:块中的逻辑。我需要的是在同一个类中的不同特性方法之间重用几行代码。当:一个然后:块时,这些代码行包含,例如: def "myFeatureMethod"() { given: ... when: ... then: ... myHelperMethod } private void myHelperMethod() { when: ... the
then:
块中的逻辑。我需要的是在同一个类中的不同特性方法之间重用几行代码。当:一个然后:
块时,这些代码行包含,例如:
def "myFeatureMethod"() {
given:
...
when:
...
then:
...
myHelperMethod
}
private void myHelperMethod() {
when:
...
then:
...
}
据我所知,斯波克目前不可能做到这一点。是否有任何解决方法可以实现相同的目标?首先,让我们确保理解Spock框架中每个块的含义
当:时使用是为了我们希望检查的条件
使用then:是为了得到我们希望得到的结果
对于相同的,当:块具有相同的条件时,然后:块应具有相同的结果
最佳做法是省略then:块中的一个(在第一次检查之后,您可能会发现其中一个是不相关的)。
省略不相关的后:块,当:块保留时,可以合并2个
另一种选择是在每次Spock测试结束时使用清洁方法
这可以通过两种方式实现:
使用常用方法,例如:
在相关测试中使用清理:块。当:
myHelperMethod()中的块,而应忽略then:块,因为检查对检查不太重要
如果您试图重用,那么:块意味着您需要多个单元测试来检查相同的内容。这是一种反模式,因为它导致代码很难维护
您应该将通用单元测试代码集中在一个测试方法中,如果您想要相同的测试逻辑但用于不同的“示例”,则应使用该方法。Spock现在允许在中使用helper方法,然后:
块-来自:
def“提供的电脑与首选配置匹配”(){
什么时候:
def pc=shop.buyPc()
然后:
matchesPreferredConfiguration(pc)
}
def匹配参考配置(pc){
pc.vendor==“Sunny”
&&pc.clockRate>=2333
&&pc.ram>=4096
&&pc.os==“Linux”
}
或者使用更好的错误消息:
void matchesPreferredConfiguration(pc){
断言pc.vendor==“Sunny”
断言pc.clockRate>=2333
断言pc.ram>=4096
断言pc.os==“Linux”
}
当:
、然后:
等块出现在helper方法中时,使用是没有任何意义的,它们应该只在feature方法中使用。您错误地假设我使用Spock进行单元测试。事实并非如此,我也将其用于e2e测试,在e2e测试中,某些测试步骤可以共享,而与中断的测试设计无关。
def cleanup() {} // run after every feature method
def cleanupSpec() {} // run after the last feature method