2012-12-20 100 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' 
相關問題