grailsテストケースでexecuteQueryを使用するにはどうすればよいですか?
A error : groovy.lang.MissingMethodException: No signature of method ***.executeQuery() is applicable for argument types: () values: []
私はすでにmockDomainを呼び出しました。
ちなみに、単体テスト中です。
ありがとう!
単体テストでは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 }
プロジェクトで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]}
GroovyMock
Grails 2.5.4では、Javaで実装された静的メソッドのモックに使用できます。
GroovyMock(Book, global: true)
私はちょうどテストしました-それは_.executeQuery()