Frage

Wie verwende ich ExecuteQuery in Grails TestCase?

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

Ich habe bereits Mockdomain angerufen.

Übrigens ist es im Unit -Test.

Vielen Dank!

War es hilfreich?

Lösung

Es gibt noch keine Unterstützung für HQL -Abfragen in Unit -Tests, aber wir arbeiten daran. Aber Sie sollten keine Persistenz -Tests mit Mocks durchführen. Persistenztests sollten in einem Integrationstest gegen eine Datenbank durchgeführt werden.

Normalerweise bewege ich HQL -Abfragen in die Domänenklasse als statische Abfragemethoden. Auf diese Weise sind sie in einem Unit -Test eines Controllers, eines Dienstes usw. leicht zu verspotten, und dann teste ich die Methode als Teil des Integrationstests der Domänenklasse.

Zum Beispiel würde ich haben

class User {
   String username
   String password
   ...

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

Dann kann ich in einem Unit -Test diese Methode mit gefälschten Daten verspotten, da es mir in einem Controller -Unit -Test egal ist. Ich weiß, dass sie an der richtigen Stelle ordnungsgemäß getestet wird und ich möchte mich auf die untersuchte Klasse konzentrieren, nicht auf seine Mitarbeiter:

def users = [new User(...), new User(...)]
User.metaClass.static.findAllUsersBlahBlah = { String foo, boolean bar -> users }

Andere Tipps

Wir haben ExecuteQuery mit Grails 2.0 in unserem Projekt erfolgreich verspottet

@TestFor(BookController)
@TestMixin([DomainClassUnitTestMixin,ServiceUnitTestMixin])
@ConfineMetaClassChanges([Book])
class BookControllerSpec extends Specification{
   mockDomain(Book)
   Book.metaClass.static.executeQuery = {a,b,c-> return [Book]}

In Grails 2.5.4 können Sie verwenden GroovyMock Für die Verspottung statischer Methoden, die in Java implementiert sind:

 GroovyMock(Book, global: true)

Ich habe gerade getestet - es funktioniert auch für _.executeQuery()

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top