Grails 如何模拟控制器内部的命令对象
我有一个控制器类,其中有一个命令对象。我有一个方法find(),它使用这个命令对象,如下所示:Grails 如何模拟控制器内部的命令对象,grails,groovy,junit,controller,jmock,Grails,Groovy,Junit,Controller,Jmock,我有一个控制器类,其中有一个命令对象。我有一个方法find(),它使用这个命令对象,如下所示: class itemController{ //command object class SearchCommand{ String email static constraints={ email blank:false,email:true } def find = {SearchCommand sc -&
class itemController{
//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仍然为“空”。我不确定如何在测试用例中处理这个内部类命令对象。
到目前为止,我编写的测试用例是:
class itemControllerTests extends ControllerUnitTestCase {
void testFind(){
def model = controller.find()
assertNotNull(model)
}
}
如何在测试用例中处理内部类命令对象。我会嘲笑它吗?我尝试过使用mockCommandObject(?),但不确定如何将内部类命令对象传递给该对象?您可以使用mockCommandObject 类控制器 类控制器测试
在“mockCommandObject SearchCommand”行引发错误。它无法找到SearchCommand。由于SearchCommand位于itemController内部,我应该如何在testCase中访问它?您可以将SearchCommand类放在itemController类之外,放在同一个文件中,但与“external”类类似。这现在是不可能的。控制器工作正常,正在生产中。我无法更改命令对象以使测试用例工作尝试过的mockCommandObject itemController.SearchCommand也…不工作Groovy.lang.MissingMethodException:没有方法签名:testingproject.RioControllerTests.mockCommandObject()适用于参数类型:(java.lang.Class)值:[class testingproject.RioController$UserCommand]
class RioController {
class UserCommand{
String email
static constraints = {
email blank: false, email: true
}
}
def load={UserCommand cmd ->
if(cmd.validate()){
flash.message = "Ok"
}
else{
flash.message = "Where is the email?"
}
}
}
import grails.test.mixin.*
import org.junit.*
@TestFor(RioController)
class RioControllerTests {
@Test
void testLoad(){
mockCommandObject RioController.UserCommand
controller.load()
assert flash.message == "Where is the email?"
params.email = "verynew@email.com"
controller.load()
assert flash.message == "Ok"
}
}