单元测试控制器方法?

Ste*_*all 6 testing grails groovy unit-testing controller

我有一个像这样的控制器方法:

def search = {
    def query = params.query

            ...

    render results as JSON
}
Run Code Online (Sandbox Code Playgroud)

我如何对此进行单元测试?具体来说,我如何调用搜索来设置params.query,以及如何测试方法的结果render?有没有办法模拟渲染方法呢?

ata*_*lor 5

用于单元测试的子类grails.test.ControllerUnitTestCase.Grails将自动实例化您的控制器并模拟渲染和重定向的版本,以便您轻松地测试结果.只需将测试输入分配给controller.params即可设置测试.

例:

class SomethingController {
    def search = {
        def query = params.query
        ...stuff...
        render results as JSON
    }
}
Run Code Online (Sandbox Code Playgroud)

测试看起来像:

class SomethingControllerTests extends grails.test.ControllerUnitTestCase {
    void testSearch() {
        controller.params.query = "test query"
        controller.search()
        assertEquals "expected result", controller.response.contentAsString
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:如果需要完整的数据库集成环境,也可以使用ControllerUnitTestCase进行集成测试.