unit-testing - 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"
}
}
解决方案
controller
是您的被测控制器的一个实例,在@TestFor
注解中指定。在这种情况下,它是BookController
. 它是由 Grails 创建的,供您在单元测试中使用。
controller.searchService
是 BookController 对 SearchService bean 的引用,您可以在给定的块中模拟它。
controller.search()
正在调用 BookController 的search
操作。
controller.response.text
是操作写入响应的文本输出。
测试文档适用于最新的、基于 Trait 的测试框架版本,但概念仍然相同。
推荐阅读
- events - Blazor,事件侦听器作为 @functions 部分中的内联委托或处理程序
- mysql - 仅当第一个 WHERE 条件不满足时才执行第二个 WHERE 条件
- c++ - C++ 在运行时查找可能使用未初始化变量的代码路径
- angular - 类型 'Observable<{}[]>' 不可分配给类型 'Observable
' - r - R:稀疏?为共现矩阵转换数据
- python - Numpy:如何连接对象数组保持 dtype 一致
- python - 来自动态记忆网络的情景记忆
- python - 使用 Python 和 Openpyxl 迭代不同列的行
- mongodb - 无法将用户数据发布到 mongodb 中的数据库
- python - 无法使用灵活的谷歌应用引擎将 logging.info 消息写入堆栈驱动程序