首页 > 解决方案 > 在grails的单元测试期间如何在控制器中使用初始化服务?

问题描述

我从Grails 3.3.8中的单元测试开始,我有ControllerSpec

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 可能会产生不同的结果,尽管我想你应该正确地编写实现。

标签: grailsspock

解决方案


推荐阅读