2010-09-08 141 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