2009-07-10 11 views
2

Ich frage mich, ob jemand versucht, JMockit Hibernate Emulation zu verwenden?JMockit Hibernate Emulation

In der Jmockit-Dokumentation heißt es, dass die Hibernate-Emulation-Tests nicht die O/R-Zuordnungsinformationen verwenden. Das bedeutet, dass O/R-Mappings, HQL-Abfragezeichenfolgen, systemeigene Abfragen usw. nicht getestet werden. Was sind dann wirklich die Vorteile der Hibernate-Emulation? Man kann einfach MyDAO-Mock erstellen und das zum Testen verwenden. Warum sollten Sie sich mit der Hibenrate-Emulation herumärgern, sondern einfach alle DAOs ausspionieren? Was denken Sie ?

Danke.

+0

hmm interessant, hat niemand versucht, es vorher zu verwenden? –

Antwort

2

Auschecken orderMngr.domain.customer.CustomerTest in der "jmockit/samples/orderMngmntWebapp" Beispieltestsuite, die in der JMockit-Volldistribution gefunden wird. Diese Testklasse basiert auf der Hibernate-Emulation. Es kann über das Ziel "sampleTests" in "jmockit/build.xml" ausgeführt werden.

Meine Motivation für die Erstellung dieses Tools war hauptsächlich, dass die Erstellung von SessionFactory zu lange dauert, wenn das Projekt Hunderte von zugeordneten Entitäten enthält. (Es dauerte etwa 20-30 Sekunden in einem Projekt mit mehr als 400 Entity-Klassen.) Dies in einer Suite von Integrationstests natürlich. Für eine Reihe von Komponententests ist dieses Tool nicht nützlich.

Die Idee war, dass ein Entwickler die Integrationstests in einer lokalen Entwicklungsumgebung schnell ausführen konnte, um Geschäftslogik, aber nicht Persistenz zu testen, während der automatisierte Build-Server die gesamte Testsuite ohne Emulation regelmäßig ausführen ließ.

Beachten Sie, dass HQL-Abfragen bei der Verwendung der Hibernate-Emulation weiterhin getestet werden. Die Fake-Implementierung analysiert HQL-Strings und führt die Abfrage gegen Entity-Instanzen aus, die im Speicher "persistent" sind. O/R-Zuordnungsinformationen werden jedoch ignoriert.

Mocking DAOs ist auch perfekt gültig, aber Ihre Tests werden nie wirklich das O/R-Mapping, HQL-Abfragen oder tatsächlichen Datenbankzugriff testen. Wenn Sie die Hibernate-Emulation verwenden, erstellen Sie keine Mocks, können die Tests jedoch über eine gefälschte Hibernate-Implementierung ausführen, die eine ähnliche In-Memory-Datenbank bietet.