Frage

Was tun Sie für das Schreiben von datengetriebene Tests in jUnit?

(Meine Definition von) einem datengetriebenen Test ist ein Test, die Daten aus einer externen Quelle liest (Datei, Datenbank, ...), führt einen Test pro Zeile / file / was auch immer, und zeigt die Ergebnisse in einem Test Läufer, als ob Sie separate Tests hatten -. das Ergebnis jeden Lauf separat angezeigt wird, nicht in einem großen Aggregate

War es hilfreich?

Lösung

In JUnit4 können Sie die Parameterized testrunner Daten zu tun angetrieben Tests.

Es ist nicht sehr gut dokumentiert, aber die Grundidee ist eine statische Methode (kommentierten mit @Parameters) zu erstellen, die eine Sammlung von Object-Arrays zurückgibt. Jedes dieser Arrays werden als Argumente für die Testklasse Konstruktor verwendet wird, und dann die üblichen Testmethoden können mit Feldern im Konstruktor festgelegt ausgeführt werden.

Sie können Code schreiben, eine externe Textdatei in der @Parameters Methode zu lesen und analysieren (oder Daten von einer anderen externen Quelle erhalten), und dann würden Sie in der Lage sein, neue Tests hinzufügen, indem Sie diese Datei bearbeiten, ohne die Tests neu zu kompilieren.

Andere Tipps

Dies ist, wo TestNG mit seinem @DataSource glänzt. Das ist ein Grund, warum ich es zu JUnit bevorzugen; die anderen sind Abhängigkeiten und parallel Gewinde Tests.

Ich verwende eine In-Memory-Datenbank wie hsqldb , so dass ich entweder die Datenbank vorgebevölkern mit einem " „Produktion im Stil des Datensatz oder kann ich mit einer leeren hsqldb Datenbank und fülle sie mit Zeilen beginnen, die ich brauche, um meine Tests durchzuführen. Hinzu kommt, dass ich meine Tests mit JUnit und Mockito .

Ich verwende Kombination von DBUnit , JMock und jUnit 4. Dann können Sie es als Suite laufen Ether oder separat

Sie sind besser dran mit einem Testcase „DataDrivenTestCase“ erstreckt, die Ihren Bedürfnissen entspricht. Hier arbeitet Beispiel: http://mrlalonde.blogspot.ca/2012/08 /data-driven-tests-with-junit.html

Im Gegensatz zu parametrisierte Tests ermöglicht es schön genannt Testfälle.

Ich bin mit @ DroidIn.net, das ist genau das, was ich tue, aber Ihre Frage wörtlich zu beantworten „und zeigt die Ergebnisse in einem Testläufer, als ob Sie separate Tests hatten,“ du am JUnit4 suchen Parameterized Läufer. DBUnit macht das nicht. Wenn Sie eine Menge damit zu tun haben, ehrlich TestNG ist flexibler, aber man kann es absolut in JUnit getan.

Sie können an der JUnit Theories Läufer sehen auch, aber meine Erinnerung ist, dass es nicht gut für datengesteuerte Datensätze ist, welche Art von Sinn macht, weil JUnit nicht über die Arbeit mit großen Mengen von externen Daten ist.

Auch wenn dies ist ein ziemlich altes Thema, dachte ich immer noch meinen Anteil beizutragen. Ich fühle mich JUnit Unterstützung für datengetriebene Tests weniger ist und zu unfreundlich. für zB. um parametrisierte zu verwenden, müssen wir unsere Konstruktor schreiben. Mit Theorien Läufer haben wir keine Kontrolle über den Satz von Testdaten, die das Testverfahren übergeben wird.

Es gibt mehr Nachteile als in dieser Blog-Post-Serie identifiziert: https://github.com/anujgandharv/easytest

Wenn jemand interessiert sich für einen Beitrag, ihre Gedanken / code / Vorschläge dann ist dies die Zeit. Sie können einfach auf die GitHub-Repository gehen und Fragen erstellen.

Normalerweise datengesteuerte Tests verwenden eine kleine testbare Komponente, um die Daten zu verarbeiten. (File Leseobjekt, oder Mock-Objekte) für Datenbanken und Ressourcen außerhalb der Anwendung Mocks werden verwendet, um andere Systeme similate. (Web-Services und Datenbanken usw.). Typischerweise ich sehe, ist, dass es externe Datendateien, die die Daten und die Ausgabe behandeln. Auf diese Weise der Datendatei in den VCS hinzugefügt werden kann.

Wir haben derzeit eine Requisiten mit unseren ID-Nummern in ihm-Datei. Das ist furchtbar spröde, aber es ist leicht, etwas in Gang zu bringen. Unser Plan ist es zunächst, diese ID-Nummern haben overridable durch -D Eigenschaften in unserer Ameise baut.

Unsere Umwelt verwendet ein Vermächtnis DB mit schrecklich ineinander verschlungenen Daten, die vor einem Lauf nicht ladbar ist (zum Beispiel durch DBUnit). Schließlich möchten wir bekommen, wo ein Unit-Test die DB-Abfrage würde eine ID mit der Eigenschaft im Test zu finden, die dann diese ID in dem Unit-Test verwenden. Es wäre langsam und richtig Integrationstest genannt, nicht „Unit-Tests“, aber wir würden die Prüfung gegen echte Daten sein, um die Situation zu vermeiden, in denen unsere App perfekt gegen Testdaten laufen aber nicht mit realen Daten.

Einige Tests werden sich dafür eignen, zu sein Schnittstelle angesteuert.

Wenn die Datenbank / Datei liest über eine Schnittstelle Aufruf abgerufen werden dann nehmen Sie einfach Ihre Unit-Test der Schnittstelle und der Unit-Test-Klasse zu implementieren zurückgeben können alle Daten, die Sie wollen.

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