Grails控制器测试 - 动态方法的问题

时间:2010-09-08 13:58:41

标签: unit-testing grails controller integration-testing

我正在对遗留应用程序运行一些旧的(但有效的,我被告知)测试,并注意到它们中的许多都不起作用。错误消息通常是“某些动态方法

的无方法签名

使用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()是   适用于参数类型:()   值:[]

有解决方法吗?在控制器中添加mockDomain语句似乎非常侵入性错误。也许只是因为我正在使用旧的Grails(1.2.1)?

提前致谢

1 个答案:

答案 0 :(得分:1)

您的域类未被模拟。添加到setUp():

mockDomain Emp