5

grailsテストケースでexecuteQueryを使用するにはどうすればよいですか?

A error : groovy.lang.MissingMethodException: No signature of method ***.executeQuery() is applicable for argument types: () values: []

私はすでにmockDomainを呼び出しました。

ちなみに、単体テスト中です。

ありがとう!

4

3 に答える 3

14

単体テストではHQLクエリはまだサポートされていませんが、現在取り組んでいます。ただし、モックを使用して永続性テストを行うべきではありません。永続性テストは、統合テストでデータベースに対して実行する必要があります。

私は通常、HQLクエリを静的クエリメソッドとしてドメインクラスに移動します。このようにして、コントローラーやサービスなどの単体テストを簡単にモックでき、ドメインクラス統合テストの一部としてメソッドをテストします。

たとえば、私は持っているだろう

class User {
   String username
   String password
   ...

   static List findAllUsersBlahBlah(String foo, boolean bar) {
      executeQuery('from User u where ...')
   }
}

次に、単体テストでは、コントローラーの単体テストでの永続性を気にしないため、偽のデータを使用してそのメソッドをモックできます-正しい場所で適切にテストされていることを知っているので、テスト対象のクラスではなく、テスト対象のクラスに焦点を当てたいと思います共同編集者:

def users = [new User(...), new User(...)]
User.metaClass.static.findAllUsersBlahBlah = { String foo, boolean bar -> users }
于 2012-02-17T15:15:44.680 に答える
8

プロジェクトでGrails2.0を使用してexecuteQueryを正常にモックしました

@TestFor(BookController)
@TestMixin([DomainClassUnitTestMixin,ServiceUnitTestMixin])
@ConfineMetaClassChanges([Book])
class BookControllerSpec extends Specification{
   mockDomain(Book)
   Book.metaClass.static.executeQuery = {a,b,c-> return [Book]}
于 2012-02-17T20:04:24.627 に答える
0

GroovyMockGrails 2.5.4では、Javaで実装された静的メソッドのモックに使用できます。

 GroovyMock(Book, global: true)

私はちょうどテストしました-それは_.executeQuery()

于 2016-12-23T14:06:34.750 に答える