2010-10-26 71 views
1

以下是我在控制器中的操作。我正在尝试通过集成测试来测试此操作。这需要我模拟会话对象。我已经开始进行集成测试,但没有运气。使用JSON输出执行集成测试时出错

def listData= { 

    def playerId=session["playerId”]  

    tuneInstanceList = tuneService.calculateId(playerId) 


    def listResult = [total: tuneInstanceList.size(), items: tuneInstanceList] 

    render listResult as JSON; 

} 

下面是CalculateId方法在我的服务类:

List<Tune> calculateId(String playerId) {    

    try{ 
    //read the sql file 
     String playerSql = grailsApplication.mainContext.getResource('classpath:'  +   Constants.PLAYER_FILE).inputStream.text 

def sql = new groovy.sql.Sql(dataSource)     

def params = [playerId:playerId] 
def tuneInstanceList = new ArrayList<Tune>() 

def results = sql.rows(playerSql, params) 

tuneInstanceList = results.each { 
    def tune = new Tune() 
    tune.setPlayerId it.player_id  
    tuneInstanceList.add tune 
} 
return tuneInstanceList 

}catch (Exception ex) { 
    log.error ex.message, ex 
    throw ex 
} 
//finally { 
    //sql.close() 
//} 

}

下面是集成测试,我写的。这是不正确的,我不知道我应该在这里放置什么。输入?

public void testQuery() { 

    def myController = new TuneController() 
    myController.request.contentType = "text/json" 

    myController.tuneService = tuneService 

    myController.listData() 

    String actualJSON = myController.response.contentAsString 

    assertNotNull(actualJSON) 




} 

我运行测试时出现以下错误。

空物体上无法获取财产“请求”

显示java.lang.NullPointerException:空对象

思考无法获取财产“请求”?

回答

1

解决了这个场景的测试案例。下面是代码。谢谢!

public void testJSONQuery() { 
    def tuneController = new TuneController() 
    tuneController.request.contentType = "text/csv" 
    tuneController.tuneService = tuneService 
    tuneController.session["playerId"]='AF67H'  
    tuneController.listData() 
    String tuneJSON = tuneController.response.contentAsString 

    log.info ('Number of Records on execution of query is' + tuneJSON.substring(9,10)) 


//Checks if the record count is greater than zero 
    assertTrue (new Integer(tuneJSON.substring(9,10)).intValue() > 0) 

}