Grails 单元测试控制器领域

Grails unit test controller field

谁能告诉我 controller 中的 controller 对象是什么,controller。 search() 和 controller.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"
    }
}

controller 是被测控制器的一个实例,在 @TestFor 注释中指定。在本例中,它是 BookController。它由 Grails 创建,供您在单元测试中使用。

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

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

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

Testing docs 适用于最新的基于特征的测试框架版本,但概念仍然相同。