2012-08-27 71 views
0

可能重複的內部類:
How to Mock Command Object that is inside Controller懲戒在常規

我有一個控制器類,它的內部我有一個命令對象。我有一個方法查找(),它使用該命令對象如下:

class RexController{ 

    //command object 
    class SearchCommand{ 
     String email 
     static constraints={ 
      email blank:false,email:true 
     } 

def find = {SearchCommand sc -> 
    if(!sc.hasErrors()){ 
    ----- do something--- 
} 

} 

現在,我寫一個測試用例來測試在控制器中的查找方法。但測試用例失敗

if(!sc.hasErrors()) 

由於sc仍爲'null'。我不確定如何在測試用例中處理這個內部類命令對象。 我至今寫測試用例是:

class itemControllerTests extends ControllerUnitTestCase { 

    void testFind(){ 
    def model = controller.find() 
    assertNotNull(model) 
    } 
} 

如何處理在測試用例內部類Command對象。我嘲笑它嗎?我曾嘗試使用mockCommandObject(?),但不知道如何傳遞內部類命令對象到這?

我應該在測試用例中更改控制器的任何元類屬性,以便它可以識別內部類。

回答

0

您在測試中創建/模擬並將Command實例傳遞給控制器​​調用。

void testFind() { 
    def command = new RexController.SearchCommand(email: '[email protected]') 
    // or [email: '[email protected]'] as RexController.SearchCommand 
    def model = controller.find(command) 
    assertNotNull(model) 
} 

no longer existsmockCommandObject「的mockCommandObject()方法不再需要爲Grails的自動檢測的動作是否需要一個命令對象與否」。

但是,您最好將所有與非UI相關的邏輯移到其他地方 - 域類或服務,然後測試該類。

+0

我收到這個錯誤,當我嘗試使用您的文章中的代碼。 groovy.lang.MissingMethodException:沒有方法的簽名:com.RexControllerTests.mockCommand()適用於參數類型:(java.lang.Class)values:[class com.RexController $ SearchCommand] – Npa

+0

Ops,我被一些老的誤導郵件列表。 'mockCommand()'是一個'mockCommandObject()',不再需要。更新答案。 –