Grails控制器测试 - 动态方法的问题
问题描述:
我在遗留应用程序上运行了一些旧的(但有效的,我被告知)测试,并注意到其中许多没有工作。错误消息通常是'没有方法签名某些dymamic方法'Grails控制器测试 - 动态方法的问题
在使用mockDomain
后,我设法解决这个问题。 但是,我不知道如何测试内部创建对象的控制器。
例如,我创建了一个示例控制器(省略import语句)
package com.tmp
class DummyController2 {
def index = { }
def createObject={
def emp= new Emp(name:'name',description:'description')
if (emp.validate()){
render 'OK'
}
else{
render 'FAIL'
}
}
}
,然后将样品controllerTest
package com.tmp
class DummyController2Tests extends ControllerUnitTestCase{
DummyController2 controller
public void setUp(){
super.setUp()
controller = new DummyController2()
}
public DummyController2Tests(){
super(DummyController2Tests)
}
public void tearDown(){
super.tearDown()
}
void testCreateObject(){
assertEquals 'OK',controller.createObject()
}
}
现在,当我运行这个测试,我得到的
groovy.lang.MissingMethodException:否 方法的签名:Emp.validate()是 适用于参数类型:() values:[]
是否有解决方法?在控制器内部添加mockDomain
语句看起来非常有效侵入和错误。也许它只是我使用旧的Grails(1.2.1)?
在此先感谢
答
您的域类不被模拟。添加到设置():
mockDomain Emp
显示java.lang.NullPointerException:不能为null对象上调用方法的containsKey() – Tom 2010-09-08 19:58:45
对不起,忘了这一点,你应该使用 “MockUtils.mockLogging的Emp” – 2010-09-09 16:05:42