2013-04-06 2 views
1

grails.I에서 컨트롤러에 대한 통합 테스트를하고 있습니다. 테스트 케이스에서 쿼리 문자열을 전달해야하며 동일한 경우 controller.request.queryString으로 전달합니다.Grails에서의 통합 테스트 : 쿼리 문자열 매개 변수에서 null 가져 오기

테스트가 실패했습니다. 쿼리 문자열 매개 변수에 대해 null value이 표시됩니다.

컨트롤러 - UserExController

FOLL 내가 GORM 방법

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

를 사용하여 쿼리 문자열 매개 변수 'UID'를 읽고 userInstance을 얻고이 testing.In 통합을하고 있어요되는 작업입니다 위의 서면 작업에 대한 테스트입니다.이 쿼리 문자열 매개 변수를 전달하고 작업을 호출합니다.

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 
    } 
} 

나는을 얻고 있습니다. 컨트롤러에서

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

답변

1

변경 :

userExController.request.queryString='uid=rp123' 

에 :

def userId = request.getParameter("uid") 

INT 시험의 변화

def userId = params.uid 

에 FOLL 호출에서
userExController.params.uid='rp123' 

Grails의 동적 바인딩은 쿼리 매개 변수를 params으로 바인딩하고 컨트롤러에서 request에 요청합니다.

+0

답장을 보내 주셔서 감사 합니다만 userExController.request.queryString = 'uid = rp123'을 userExController.params.uid = 'rp123'으로 변경해도 아무 것도 변경되지 않습니다. 오류가 지속됩니다. 컨트롤러 코드가 정상적으로 작동하는 이유는 컨트롤러를 변경해야하는 이유입니다. 통합 테스트가 작동하도록 이미 실행중인 코드를 변경할 필요가 없다고 생각합니다. –

0

이 일이 당신을 위해 작동해야한다은 (Grails를 2.0.4에서 테스트) :

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

그러나, 나는 dmahapatro의 제안에 돌려 params.uid 대신 request.getParameter("uid")를 사용하는 컨트롤러를 리팩토링하는 것이 좋습니다. 또는 명령 개체를 도입 할 수도 있습니다. 당신이 지금하고있는 방식은 표준 Grails 방식으로 보이지 않습니다.

관련 문제