grails - 如何模拟 Controller 内部的命令对象

标签 grails groovy junit controller jmock

我有一个 Controller 类,在其中有一个命令对象。我有一个方法find()使用此命令对象,如下所示:

class itemController{

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

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

}

现在,我正在编写一个测试用例,以测试 Controller 中的find方法。但是测试用例在
  if(!sc.hasErrors())

因为sc仍然为“null”。我不确定如何在测试用例中处理此内部类命令对象。
到目前为止,我编写的测试用例是:
class itemControllerTests extends ControllerUnitTestCase {

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

如何在测试用例中处理内部类Command Object。我会 mock 吗?我试过使用模拟命令对象(?),但不确定如何将内部类命令对象传递给它?

最佳答案

您可以使用模拟命令对象

类RioController

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?"
        }
    }
}

类RioControllerTests
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"
    }
}

关于grails - 如何模拟 Controller 内部的命令对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12112415/

相关文章:

grails - 如何使用<g:select> tag获取非重复的日期值

java - 使用 TreeMap.Entry 对 Object[] 进行排序

Groovy 列表转换

java - 强制slf4j按顺序打印日志

java - 通过 Maven 运行的 JUnit/Cucumber 测试未在 VS Code 中调试

session - Grails:为什么 session 无法正确保存我的 map 列表?

grails - *从 grails 2.5.4 升级到 grails 3.3.11 时出现“无法解决类”问题

Grails 域 get(params.id) 在 Controller.show() 中有效,但在 Contoller.edit() 中无效

grails - 一个组件需要一个名为 'dataSource_dbCreate' 的 bean,但找不到

testing - Ant 测试编译崩溃