我有一个控制器类,其中有一个命令对象。我有一个方法find()使用此命令对象,如下所示:
class RexController{
//command object
class SearchCommand{
String email
static constraints={
email blank:false,email:true
}
def find = {SearchCommand sc ->
if(!sc.hasErrors()){
----- do something---
}
}
现在,我正在编写一个测试用例来测试控制器中的find方法。但是测试用例失败了
if(!sc.hasErrors())
因为sc仍然是'null'。我不知道如何在测试用例中处理这个内部类命令对象。 我到目前为止写的测试用例是:
class itemControllerTests extends ControllerUnitTestCase {
void testFind(){
def model = controller.find()
assertNotNull(model)
}
}
如何在测试用例中处理内部类Command对象。我嘲笑它吗?我尝试过使用mockCommandObject(?),但不确定如何将内部类命令对象传递给它?
我应该在测试用例中更改控制器的任何元类属性,以便它识别内部类。
答案 0 :(得分:0)
您可以在测试中创建/模拟并将Command实例传递给控制器调用。
void testFind() {
def command = new RexController.SearchCommand(email: 'me@here.there')
// or [email: 'me@here.there'] as RexController.SearchCommand
def model = controller.find(command)
assertNotNull(model)
}
mockCommandObject
no longer exists:“不再需要mockCommandObject()方法,因为Grails会自动检测操作是否需要命令对象。”
但是你最好把所有非UI相关的逻辑移到其他地方 - 到域类或服务,然后测试那个类。