2010-09-08 144 views
1

我在遗留应用程序上运行了一些旧的(但有效的,我被告知)测试,并注意到其中许多没有工作。错误消息通常是'没有方法签名某些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)?

在此先感谢

回答

1

您的域类不被模拟。添加到设置():

mockDomain Emp 
+0

显示java.lang.NullPointerException:不能为null对象上调用方法的containsKey() – Tom 2010-09-08 19:58:45

+1

对不起,忘了这一点,你应该使用 “MockUtils.mockLogging的Emp” – 2010-09-09 16:05:42