2

我有一个控制器类,里面有一个命令对象。我有一个方法 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---
}

}

现在,我正在编写一个测试用例来测试控制器中的 find 方法。但是测试用例失败了

  if(!sc.hasErrors())

因为 sc 仍然是'null'。我不确定如何在测试用例中处理这个内部类命令对象。到目前为止我写的测试用例是:

class itemControllerTests extends ControllerUnitTestCase {

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

如何处理测试用例中的内部类命令对象。我嘲笑它吗?我尝试过使用 mockCommandObject(?),但不确定我应该如何将内部类命令对象传递给它?

4

1 回答 1

1

您可以使用 mockCommandObject

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"
    }
}
于 2012-08-24T15:40:45.503 回答