Unit testing Grails标准在JUnit测试中不起作用
我试图在我的grails应用程序中测试搜索方法,但出现了一个空指针异常。我在测试中模拟了该域,如下所示:Unit testing Grails标准在JUnit测试中不起作用,unit-testing,grails,junit,grails-2.0,Unit Testing,Grails,Junit,Grails 2.0,我试图在我的grails应用程序中测试搜索方法,但出现了一个空指针异常。我在测试中模拟了该域,如下所示: @TestFor(AuditController) @Mock(Audit) class AuditControllerTests { void testSearch() { populateValidParams(params) def audit=new Audit(params) audit.save(failOnError: true)
@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
}
}
我在model.AuditionInstanceList上得到了NPE。它不应该为空。以下是我的控制器中的代码:
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 ])
}
这是怎么回事?我不知道为什么,但有时您需要将模型作为控制器操作的返回值删除。如果其中一个出现故障,我会交替使用这两个版本:
// sometimes this one works
def model = controller.search()
assert model
// sometimes this one works
controller.search()
assert model
编辑:我想到了两种新的可能性,为什么你的行动不起作用:
在
搜索
的末尾返回模型
。如:
def search = {
...
render(view:'list', model:[ auditInstanceList: results, auditInstanceTotal:results.totalCount ])
[auditInstanceList: results, auditInstanceTotal:results.totalCount]
}
测试调用
render()
的控制器操作时,model
和view
变量将自动创建并在测试中填充。通过执行def model=controller.search()
,您将用自己的模型替换magicmodel
,并将其分配给search()
的返回值。正确的断言方法是:
controller.search()
assert model.auditInstanceList.size() == 1
assert view == '/audit/list'
我不知道。有一些JIRA问题如下:。请检查我的更新答案。