2009-06-24 4 views
5

Gibt es eine Möglichkeit, die Komponententests nur für die Java-Klassen ausführen zu können? Wenn MyClass.java beispielsweise veraltet ist, erstellt ant eine MyClass.class. Danach möchte ich auch MyClassTest und MyClassTestSuite ausführen, wenn sie existieren. Es muss nicht auf einer Namenskonvention basieren. Ich wäre in Ordnung mit Anmerkungen oder anderen Methoden, die funktionieren.Wie kann ich Komponententests nur für die Quelldateien ausführen, die sich geändert haben?

BEARBEITEN Sie: Mehrere Leute haben herein geklungen und gesagt, dass dies eine schlechte Idee ist. Es würde sein, wenn ich beim Einchecken plane, ohne alle unsere Unit-Tests zu durchlaufen. Mein Hauptprojekt hat über 16k Unit Tests, die etwa 20 Minuten dauern. Ich werde sie alle vor dem Einchecken ausführen, aber es ist völlig unpraktisch, die ganze Suite jedes Mal auszuführen, wenn ich eine Datei ändere. Entschuldigung, ich hätte mehr Kontext geben sollen.

Antwort

4

Es ist nicht so einfach ...

einen Blick auf Atlassian Clover nehmen. Es hat die Funktion, von der du träumst, aber es ist nicht kostenlos.

6

Ich würde diesen Ansatz nicht empfehlen, Es besteht eine gute Chance, Fehler durch Nebenwirkungen zu verpassen.

3

einen Blick auf Infinitest nehmen, es ist ein Plugin für Eclipse (und IntelliJ), die auf den Quelldateien basierten Tests läuft die Sie gerade geändert haben:

Infinitest Website

Eine Übersicht hier die Screencasts sehen:

Screencast Overview

+0

Infinitest ist genial. Ich würde ohne es nicht codieren. Es ist der einzige Grund, warum ich nicht zu NetBeans wechseln werde –

+0

Der Screencast-Link ist kaputt - ich fand es hier: http://improvingworks.com/products/infinitest/ –

4

Das scheint mir eine schlechte Idee. Sicher, die geänderten Quelldateien müssen getestet werden, aber auch alle Dateien, die von diesen Dateien abhängen, und alle, die davon abhängen, usw. Sie müssten verfolgen, welche Datei von welchen anderen Dateien abhängt, und das ist ein ziemlich großes Problem, das zu lösen ist.

Meiner Meinung nach, wenn das Projekt groß genug ist, dass es einen erheblichen Gewinn beim Versuch gibt, Abhängigkeitsbäume von Tests aufzulösen, ist das Projekt vielleicht zu groß? Vielleicht ist es an der Zeit, es in einzelne Projekte aufzuteilen, die zusammen funktionieren, die jeweils getrennt voneinander getestet werden können.

0

Ich würde gerne mit den anderen Leuten zusammenspielen, die gesagt haben, dass dies etwas ist, was du vermeiden willst. Das Ausführen nur der Testfälle für die bestimmten Klassen, die sich geändert haben, birgt das Risiko, dass Sie eine Änderung vornehmen, die einen Test für eine Klasse bricht, die nicht geändert wurde, aber von einem Teil des geänderten Codes abhängig ist.

Dies ist ein Risiko, auch wenn Sie aggressiv sind, wenn Sie an eine Schnittstelle programmieren und Abhängigkeiten in Komponententests mokieren. Zum Beispiel haben statische Dienstprogrammklassen wahrscheinlich viele Klassen, die sie direkt verwenden. Hier wäre es leicht, sich einen Fall vorzustellen, in dem Sie eine statische Hilfsmethode ändern, sicherstellen könnten, dass die Tests für diese Methode funktionieren und eine Menge Code brechen, der die Methode aufgerufen hat, wenn Sie nicht alle ausgeführt haben Tests.

3

Es gibt keine Möglichkeit, dies mit ANT zu tun, aber Sie können so etwas in Eclipse tun.

Kent Beck hat ein Eclipse-Plugin namens JUnit Max geschrieben, das nach dem Speichern des Codes die Komponententests ausführt. Es führt zuerst die Tests durch, die am wahrscheinlichsten fehlschlagen.

JUnit Max

+0

MaxCore zieht neue Tests zu alten Tests vor, schnell Tests zu verlangsamen Tests und vor kurzem fehlgeschlagene Tests zu Tests, die zuletzt fehlgeschlagen sind. – Jon

0

Nun, werden Sie wahrscheinlich könnte es tun Variablen verwenden, wenn Sie eine Namenskonvention folgen. Rufen Sie eine Liste der geänderten Dateien ab und führen Sie die entsprechenden Tests aus. Aber ich würde es empfehlen, wie die anderen Antworten erklären.

Verwandte Themen