grails中的集成测试:在查询字符串参数中获取null

时间:2013-04-06 16:41:05

标签: grails request.querystring integration-testing

我正在为grails中的控制器进行集成测试。我需要在测试用例中传递查询字符串,并将其作为controller.request.queryString传递给它。

我的测试失败了。它为查询String参数提供了null value

Controller - UserExController

Foll是我正在进行集成测试的动作。在这里我正在阅读查询字符串参数'uid'并使用GORM方法获取userInstance

def getUser() {
    //reading the query string parameter 'uid'
    def userId = request.getParameter("uid")  
    User user = User.findByUsername(userId)
    render view:'edit', model:[userInstance:user]
}

这是对上述书面操作的测试。在此我传递查询字符串参数并调用操作

class UserInstanceTests extends GroovyTestCase {

    @Test
    void testPerfSummaryApi() {
        def userExController=new UserExController()
        userExController.request.queryString='uid=rp123'
        userExController.getUser()
        def model = userExController.modelAndView.model.userInstance
        assertNotNull model
    }
}

我在foll电话中收到groovy.lang.MissingMethod.Exception

User.findByUsername(userId) //userId is comming null

2 个答案:

答案 0 :(得分:1)

控制器更改:

def userId = request.getParameter("uid")

def userId = params.uid

int test中的变化:

userExController.request.queryString='uid=rp123'

userExController.params.uid='rp123'

Grails的动态绑定有助于将查询参数绑定到params并请求控制器中的request

答案 1 :(得分:0)

这应该让事情适合你(在Grails 2.0.4上测试):

 userExController.request.addParameter('uid', 'rp123')

但是,我建议转向dmahapatro的建议并重构您的控制器以使用params.uid代替request.getParameter("uid")。甚至引入一个命令对象。你现在这样做的方式似乎并不是标准的Grails方式。