Я начинаю с модульного тестирования в Grails 3.3.8 , у меня есть ControllerSpe c:
class FooControllerSpec extends Specification implements ControllerUnitTest<FooController> {
void "test index"() {
given:
controller.fooService = new FooServiceImplementation()
when:
controller.index()
then:
response.json
status == 200
}
void "test show"() {
given:
controller.fooService = new FooServiceImplementation()
when:
params['id'] = '000001400'
controller.show()
then:
status == 200
}
}
FooService - это интерфейс, не имеющий реализации.
@Service(Foo)
interface FooService {
Foo get(Serializable id)
List<Foo> list(Map args)
}
Я создаю FooServiceImplementation так:
class FooServiceImplementation implements FooService {
Foo get(Serializable id) {/*implementation here*/}
List<Foo> list(Map args) {/*implementation here*/}
}
Это на самом деле работает, но есть и другое форма для инициализации службы в моем контроллере? Я хочу использовать FooService именно с той реализацией, которую grails будет компилировать при внедрении службы в контроллер, чтобы убедиться, что результаты во время выполнения будут такими же, как и во время тестирования, поскольку мой FooServiceImplementation может генерировать разные результаты, хотя Я полагаю, вы должны написать реализацию правильно.