我正在使用Spock測試atm,並且我想知道這樣的事情是否甚至是可能的。我的方法行不通,我想知道你們中的任何人是否有類似的意圖,並找到了一種方法。如何在spock測試中的where子句中調用某個方法或關閉
我想調用一個方法或閉包,只能針對每個相應的where子句調用以設置一些東西。我不能只調用所有這些方法,因爲它會毀了我的測試。到目前爲止,我發現的唯一方法是檢查當前狀態是什麼,並在if語句中相應地調用方法,如if(state == SomeStateEnum.FIRST_STATE){somePrivateMethodFromSpec()}但我想知道它是否無法完成以更好的方式。我希望我的意圖很明確(對不起,我不是母語)下面是一些示例代碼,它可能會更好地理解我想要做的事情。先謝謝你。
def 'is this even possible?'() {
when:
def resultState = service.someServiceMethod(param)
then:
resultState == state
where:
state | param | method
SomeStateEnum.FIRST_STATE | 'param1' | somePrivateMethodFromSpec()
SomeStateEnum.SECOND_STATE | 'param2' | someOtherPrivateMethodFromSpec()
}
private def somePrivateMethodFromSpec() {
someServiceMock.demand.AAA() {}
}
private def someOtherPrivateMethodFromSpec() {
someServiceMock.demand.BBB() {}
}
def 'or maybe something like this?'() {
when:
closure.call()
def resultState = service.someServiceMethod(param)
then:
resultState == state
where:
state | param | closure
SomeStateEnum.FIRST_STATE | 'param1' | {println '1'}
SomeStateEnum.SECOND_STATE | 'param2' | {println '2'}
}
解決的辦法是:如果
def 'this will work'() {
"$someOtherPrivateMethodFromSpec"()
"$somePrivateMethodFromSpec"()
def resultState = service.someServiceMethod(param)
then:
resultState == state
where:
state | param | method
SomeStateEnum.FIRST_STATE | 'param1' | "somePrivateMethodFromSpec"
SomeStateEnum.SECOND_STATE | 'param2' | "someOtherPrivateMethodFromSpec"
}
private def somePrivateMethodFromSpec() {
someServiceMock.demand.AAA() {}
}
private def someOtherPrivateMethodFromSpec() {
someServiceMock.demand.BBB() {}
}
是的,這就是我所需要的。謝謝。:)我根據我的問題修改了我的帖子。 – IwantToKnow