2012-05-04 10 views
0

私は、サービスクラスの単体テストを書く過程にあります。このサービスクラスはMyDomain.findAllByIdNotInListを呼び出します。私が直面している問題は、grailsがNotInListを擬似ドメインの動的ファインダとして認識しないことです。私はこの機能をMetaclass-ingしようとしましたが、それに問題がありました。Grailsユニットテストバギー動的ファインダ

単体テストを統合テストに変えるというこの短所を回避するための創造的な方法はありますか?

MyDomain.metaClass.findAllByIdNotInList = {ArrayList list -> 
     return [] 
    } 

編集を:私は複数の理由のためにこれを避けたい。また

(実行する時間を、当店だけのユニットテストは、ビルド時などを実行します)、私のmetaclassingが下手に書かれている可能です使い方grails 1.3.7。

も試してみましたここ

MyDomain.metaClass.findAllByIdNotInList = {deflist -> 
     return [] 
    } 

バグレポート:

http://jira.grails.org/browse/GRAILS-8593

+0

DomainClassUnitTestMixinをインポートしましたか? http://grails.org/doc/latest/guide/testing.html#unitTestingDomains –

+0

ミックスインが適用されない場合は、1.3.7を使用しています。 jira.grails.orgリンクに掲示されているバグは1.3.7に特有のものです。 – Joseph

答えて

2

@Sagar Vさんのコメントでは、ドメインが適切に嘲笑されたときに、すべてのダイナミックファインダを利用することができるはずが正しいです。 2.0より前のバージョンのGrailsを使用している場合は、GrailsUnitTestCaseを拡張し、MockDomain(MyDomain)にコールしてから動的ファインダを呼び出そうとするでしょう。あなたのmetaClassingは正しく書かれていません(私の意見では、テストをうまく動かすためにmockingフレームワークを使用してください。私は正しい構文を提供しているので、将来正しく使うことができます)。あなたがオーバーライドしているメソッドは、metaClassとメソッド名わたってるしき.'static'.を追加する必要があるstatic

MyDomain.metaClass.'static'.findAllByIdNotInList = {defList -> 
    [] 
} 

+0

メタクラスとメソッド名の間に.staticを追加するのを忘れてしまった。 JIRAに示されている問題は、1.3.7で 'MockDomain'を呼び出すときに' ... NotInList'の動的ファインダが正しく生成されないことです。この問題を回避するには、メタクラスが必要です。 – Joseph

関連する問題