2014-10-20 63 views
0

我想单元测试工作脚手架。我对原来的脚手架模板做了一些改变,以便为我的应用程序提供所需的服务。这是用于测试的代码:Grails单元测试导致空实例

void "Test that the show action returns the correct model"() { 
    when:"A domain instance is passed to the show action" 
     populateValidParams(params) 
     def domainName = new DomainName(params) 
     controller.show(domain.toString()) 

    then:"A model is populated containing the domain instance" 
     model.domainNameInstance == domainName 
} 

这是用于显示动作,其中,I从数据库基于所述ID,它是由一个toString方法中所创建的内两个数值抓住域实例的代码控制器:

def show(String id){ 
    if (id!=null){ 
     def (term, college)=id.split('_') 
     DomainName domainNameInstance 
     respond domainNameInstance=DomainName.findByVal1AndVal2(val1, val2) 
    }else{ 
     response.sendError(HttpServletResponse.SC_NOT_FOUND) 
    } 
} 

,我有是,当我运行测试,该domainInstance是测试范围内空,而域返回正确的价值观问题。有人会知道我需要更改以使测试中的domainInstance不为null吗?作为参考,我正在使用Grails 2.4.3和Scaffolding 2.1.2插件。

回答

0

在您的单元测试中,您需要保存您正在创建的DomainName实例。您的show操作是查询数据库,但您没有保留测试实例。

+0

我试过用controller.save(domainName),但是我得到一个错误,说明CREATED属性对于控制器不存在。 – 2014-10-20 18:57:27

+0

听起来像你缺少一个'import static org.springframework.http.HttpStatus。*' – doelleri 2014-10-20 19:27:44

+0

这是包含在我的控制器中。当我测试保存功能时,它会通过。只有显示和编辑功能存在这个问题,并且它们中包含完全相同的代码。 show test的第一个测试,看它是否返回404,如果实例为空,它通过该测试,则导入语句不是问题。 – 2014-10-20 19:30:46