首页 > 解决方案 > Grails 单元测试控制器字段

问题描述

有人能告诉我控制器.searchService、控制器.search () 和控制器.response.text.contains 中的控制器对象指的是什么吗?这个控制器对象是如何创建的,它的目的是什么?

import grails.test.mixin.TestFor
import spock.lang.Specification
@TestFor(BookController)
@Mock(Book)
class BookControllerSpec extends Specification {

    void "test search"() {
        given:
        def searchMock = mockFor(SearchService)
        searchMock.demand.searchWeb { String q -> ['first result', 'second result'] }
        searchMock.demand.static.logResults { List results ->  }
        controller.searchService = searchMock.createMock()

        when:
        controller.search()

        then:
        controller.response.text.contains "Found 2 results"
    }
}

标签: unit-testinggrailsspock

解决方案


controller是您的被测控制器的一个实例,在@TestFor注解中指定。在这种情况下,它是BookController. 它是由 Grails 创建的,供您在单元测试中使用。

controller.searchService是 BookController 对 SearchService bean 的引用,您可以在给定的块中模拟它。

controller.search()正在调用 BookController 的search操作。

controller.response.text是操作写入响应的文本输出。

测试文档适用于最新的、基于 Trait 的测试框架版本,但概念仍然相同。


推荐阅读