Я работаю с аттестатами Spock atm, и мне интересно, возможно ли что-то подобное. Мои подходы не работают, и я задаюсь вопросом, были ли у кого-то из вас сходные намерения и нашли способ.как вызвать метод или замыкание в предложении where в тесте spock
Я хочу вызвать метод или закрытие, которое должно вызываться только для каждого соответствующего where-clause, чтобы настроить некоторые вещи. Я не могу просто вызвать все эти методы, так как это испортит мой тест. Единственный способ, который я нашел до сих пор, - проверить, что такое текущее состояние, и вызвать метод соответствующим образом в выражении 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