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)
    }
}

テスト ケースで内部クラス Command Object を処理するにはどうすればよいですか。私はそれを嘲笑しますか?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 に答える