2012-08-27 70 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()',不再需要。更新答案。 –