1

単体テスト...これを理解できません..私は2.1.1を使用していますが、モックされたドメインの静的メソッド.findByUuidを取得するにはどうすればよいですか.findByの特別な構文はありますか???

コントローラーのコードには、MessageBus ... というドメインクラスがあります。

        log.debug("uuidStatus? = "+ uuidStatus)
        def messageBus = MessageBus.findByUuid(uuidStatus)  
        log.debug("messageBus is valid? = "+ messageBus)

domainClass.findByUuid をモックする方法

ControllerTestsでこれを試しました:

    mockControl.demand.static.findByUuid() { uuidStatus -> 
        MessageBus mb = new MessageBus()
        mb.uuid="dce9d1bf-f3c2-4876-af68-6c9d272cf374"
        println("uuid = " +mb.uuid)
        return mb
        }

エラー:

コントローラ uuidStatus? = dce9d1bf-f3c2-4876-af68-6c9d272cf374 core.DatastoreUtils セッションのバインドを解除できません。SessionHolder が登録されていません | 失敗: testStatus(ControllerTests) | junit.framework.AssertionFailedError: この時点で「findByUuid」への呼び出しは期待されていません。「getAsMap」への呼び出しがまだ 1 回必要です。grails.test.MockClosureProxy.doBeforeCall(MockClosureProxy.java:66) で grails.test.AbstractClosureProxy.call(AbstractClosureProxy.java:74) で Controller.status(CommentsController.groovy:84) で ControllerTests.testStatus(ControllerTests.groovy: 225)

私はこれを機能させましたが、理由はわかりません。そこで、新しいパッケージを作成し、シンプルな Book & LibraryController でメソッドのステータスをテストしたいと考えています。最初に単純なプロジェクトをビルドすると、同じエラー メッセージが表示されました。
!!その後、少しバグった後、動作し始めました。モックアップの demand.static.find() を変更したようです *これの名前を変更して、もう一度元に戻すと修正されました。変。IDK ですが、先に進まなければなりません。もし他の誰かがこれを見たら、バージョン 2.1.1 の異常かもしれません。

package testbook
class Book {
String name
String uuid 
static constraints = {
    uuid(unique: true)
}
}

ライブラリ コントローラ: パッケージ テストブック クラス LibraryController { def status(){ 文字列 uuid = params?.uuid log.debug("uuid="+uuid)
def myBook = Book.findByUuid(uuid) log.debug("myBook.toString() ="+myBook.toString()) if(myBook){ // 何かを実行 log.debug("doing something!!!") }
render myBook }

コントローラーテスト:

package testbook
import grails.test.GrailsMock
import grails.test.mixin.*
import org.junit.*

@TestFor(LibraryController)
@Mock([Book])
class LibraryControllerTests {
 void testStatus() {
    def mockcontrol = new GrailsMock(Book)

    mockcontrol.demand.static.findByUuid(){uuid ->
        Book bookFound = new Book()
        bookFound.id = 1  // IMPORTANT for default .toString()
        bookFound.name = "Alice in Wonderland"
        bookFound.uuid = uuid
        println("bookFound=" + bookFound)
        return  bookFound //this returns null object
        }

    params.uuid="12356"
    Map model = controller.status()
    println("model" + model )// this is null
}

}

したがって、元のエラーは何らかの理由でなくなりました。しかし、まだ null オブジェクトが返されます。

モデルは引き続き null として返されます。Map model = controller.status() // モデルに対して null を返します。

モックアップされたドメインが「null」としてレンダリングされる理由の説明はありますか?

4

0 に答える 0