У меня есть много рабочих/проходящих функциональных тестов geb/spock (каждый из которых расширяет GebReportingSpec), которые тестируют веб-приложение с тестовыми данными, созданными из BootStrap.groovy в начале набора функциональных тестов.
Я хочу переместить создание тестовых данных в методы startup() / teardown() в каждой спецификации, ну, на самом деле я хотел, чтобы они наследовали их от базового класса, но, очевидно, у StepWise есть проблемы с наследованием.
Итак, в настоящее время каждый из моих тестовых спецификаций выглядит примерно так:
@Stepwise
class ExampleSpec extends GebReportingSpec {
def "valid root user logs in"() {
given: "I am at the login page"
to LoginPage
when: "I enter root's credentials"
username = "root"
password = "password"
and: "I click the login button"
loginButton.click()
then: "I am logged in and directed to the welcome page"
at WelcomePage
}
}
Теперь моя проблема в том, что я не могу создать новый тест (выше первого теста), который может создавать тестовые данные. Без действительного оператора «данный/когда/тогда» тест не выглядит выполненным, и вызов метода из существующего теста также не работает. Я изучил плагин grails-remote-control, чтобы помочь мне, и я считаю, что это позволит мне успешно вызывать замыкания для настройки данных, но я не уверен в лучшем механизме для вызова этого из GebReportSpecs (или какой-то абстрактный родитель) .
Ниже приведен краткий обзор того, что я хочу сделать, либо сделав 'setupData()' первым тестом, либо вызвав этот метод из теста... Ни один из них не работает.
def remote = new RemoteControl()
def setupData() {
def id = remote {
def ShiroUser user = new ShiroUser(username: "root", ...)
user.save()
user.id
}
println(id)
}
.... Tests then follow
Существуют ли какие-либо аннотации, такие как @before и т. д., которые могут вызвать вызов этих методов?
Любые предложения приветствуются.
Решение: я принял ответ dmahapatro ниже с правильным ответом, но также предоставил пример моего окончательного решения ниже для тех, кто может найти его полезным.