2016-10-02 5 views
1

は、私は私が取得していますエラーを取得しないように、私は、ドメインAのPプロパティを模擬することができますどのようにユニットテストでは、プロパティPgrailsで単体テストを行うときに、特定のカスタムバリデータを模擬/スタブする方法は?

static constraints = { 

     P validator: { val, obj -> 

      (A.executeQuery("SELECT COUNT(*) FROM A cei WHERE cei.event.id = ?", [val.id])[0] <= 1) 

     }  

用のカスタムバリデータを持つドメインAを考えてみましょうユニットテストを実行しているとき。ユニットテストを実行しているときのエラーは以下の通りです。セットアップコードは、ドメインAを次のようにインスタンス化します。

エラーが

java.lang.UnsupportedOperationException: String-based queries like [executeQuery] are currently not supported in this implementation of GORM. Use criteria instead. 

。注:これらは、偽のコードです。

答えて

2

私にとって最良の選択肢は、バリデーターの内部コードをサービス内にカプセル化することです。そして、あなたのユニットテストでそのサービスを嘲笑してください。

しかし、スローされるエラーは、executeQueryは使用できませんが、条件はです。 代わりに条件を使用するためのコードを変更してください。

P validator: { val, obj -> 
    A.withCriteria{ 
     eq('event', Event.findById(val.id)) 
     projections{ 
     count('id') 
     } 
    }[0] < = 1 
} 
+0

ありがとうございました! – kofhearts

+1

A.countByEvent(Event.findById(val.id))を使用しようとします。<= 1はより単純で、おそらく動作します – quindimildev

関連する問題