2012-12-20 56 views
0

我想在我的grails应用程序中测试搜索方法,但我有一个空指针异常。我嘲笑域在我的测试如下:Grails标准不工作在JUnit测试

@TestFor(AuditController) 
    @Mock(Audit) 
    class AuditControllerTests { 

void testSearch() { 

    populateValidParams(params) 
    def audit=new Audit(params) 
    audit.save(failOnError: true) 

    //Search existing customer 
    def model = controller.search() 
    assert model.auditInstanceList.size() == 1 
    assert model.auditInstanceList.size() == 1 

} 
    } 

我NPE上model.auditInstanceList。它不应该是空的。以下是我的控制器中的代码:

def search = { 

    def query 
    def criteria = Audit.createCriteria() 
    def results 

    query = { 
     and{ 
      if(params.customerName){ 
       ilike("customerName", params.customer + '%') 
      } 
      if(params.siteName){ 
       ilike("siteName", params.siteName + '%') 
      } 
      max:params.max 
      offset:params.offset 


     } 
    } 

    results = criteria.list(params, query) 


    render(view:'list', model:[ auditInstanceList: results,auditInstanceTotal:results.totalCount ]) 

} 

这是怎么回事?

+0

请检查我更新的答案。 –

回答

0

我不知道为什么,但有时你需要从控制器的动作中删除模型作为返回值。我使用这两种版本或者如果他们中的一个失败:

// sometimes this one works 
def model = controller.search() 
assert model 

// sometimes this one works 
controller.search() 
assert model 

编辑:我觉得两个新的可能性,为什么你的行动不起作用:

  1. 尝试从闭合改变你的行动,使它是一种方法。
  2. 确保您没有过滤器后。我发现了这个bug:http://jira.grails.org/browse/GRAILS-6825
+0

也不起作用。你知道为什么会发生这种情况? –

+0

我不知道。有一些关于它的JIRA问题是这样的:http://jira.grails.org/browse/GRAILS-8462。 –

0

返回modelsearch的末尾。如,

def search = { 
    ... 
    render(view:'list', model:[ auditInstanceList: results, auditInstanceTotal:results.totalCount ]) 

    [auditInstanceList: results, auditInstanceTotal:results.totalCount] 
} 
+0

这对我不起作用。 –

0

当测试调用render()modelview变量会自动创建并在测试填充的控制器动作。通过执行def model = controller.search(),您将用您自己的model来代替它,并将其分配给返回值search()。正确的方式做你的断言是:

controller.search() 
assert model.auditInstanceList.size() == 1 
assert view == '/audit/list' 
相关问题