2

build-test-data プラグイン(v. 2.0.4) を使用して、Grails 2.1.4 アプリケーションの単体テストでテスト データを作成しようとしています。

アプリには次のドメイン クラスがあります

class Brochure {

  static constraints = {}

  static hasMany = [pageTags: PageTag]    
}

class PageTag {

    static constraints = {
    }

    static belongsTo = [brochure: Brochure]
}

次に、単体テストでPageTagwithのインスタンスを構築しようとします

@Build([Brochure, PageTag])
class BrochureTests {

    void testSomething() {
       PageTag pageTag = PageTag.build()
    }
}

しかし、それはエラーで失敗します

groovy.lang.MissingMethodException: メソッドのシグネチャがありません: btd.bug.Brochure.addToPageTags() は引数の型に適用できます: (btd.bug.PageTag) 値: [btd.bug.PageTag : (unsaved)] 考えられる解決策: getPageTags ()

私の例は、プラグインの docsに示されているものとまったく同じに見えるので、なぜこれが機能しないのかわかりません. この問題を示すサンプル アプリは、こちらから入手できます。

4

1 に答える 1

1

バージョン 2.0.5 で修正済み

リンクされた github の問題についてコメントしましたが、これは、grailsアノテーションの動作に関するパフォーマンスの「修正」によるものです。@Mock

この変更により、ユニット テストでの BTD の動作を可能にするすべてのリンク コードがほぼ削除されます。

現在、これを回避する唯一の方法は@Mock、有効なオブジェクトを構築するために必要なドメイン グラフの一部に、すべてのドメイン オブジェクトに明示的な注釈を追加することです。

この変更により、テスト コードはより高速になります。これは素晴らしいことですが、開発者がテストでこれらの関係を把握して維持することは、より大きな負担になります (これは、BTD が回避しようとしていたことです :)。

于 2013-04-20T01:03:08.293 に答える