Was ist das beste, vorzugsweise frei/Open-Source-Tool für die automatische Erzeugung von Java-Einheit-Tests? Ich weiß, die Unit-Tests können nicht wirklich den gleichen Zweck erfüllen wie normale TDD Unit-Tests, die das Design des Systems dokumentieren und steuern. Automatisch generierte Komponententests können jedoch nützlich sein, wenn Sie eine große Legacy-Codebasis haben und wissen möchten, ob die von Ihnen vorgenommenen Änderungen unerwünschte, obskure Nebenwirkungen haben.Auto-Generating Unit-Tests für älteren Java-Code
Antwort
Nicht frei. Nicht opensource. Aber ich habe gefunden, dass AgitarOne Agitator (http://www.agitar.com/solutions/products/agitarone.html) WIRKLICH gut für das automatische Generieren von Komponententests ist und nach unerwünschten obskuren Nebenwirkungen sucht
Um ehrlich zu sein, würde ich das wahrscheinlich nicht tun. Komponententests sind isoliert und Sie werden nicht wirklich wissen, ob Sie "unerwünschte, obskure Nebenwirkungen" haben, weil alles von den anderen Dingen abgeschirmt ist, die die Nebenwirkungen verursachen. Als Ergebnis benötigen Sie Integration oder Systemtest und , die ist nicht etwas, das Sie automatisieren können.
Erstellen Sie ein paar High-Level-, End-to-End-Systemtests, die Ihnen ein gewisses Maß an Vertrauen geben und dann Coverage-Tests verwenden, um herauszufinden, was Sie verpasst haben. Der Nachteil ist, wenn Bugs auftauchen Es ist schwieriger, auf ihre genaue Ursache hinzuweisen, aber der Vorteil ist, dass Sie die Fehler viel eher sehen werden.
Sobald Sie Fehler finden, schreiben Unit-Tests nur für sie. Während Sie fortfahren, können Sie TDD für die Bits verwenden, die Sie umgestalten möchten.
Ich weiß, dass dies wahrscheinlich nicht die Antwort ist Sie hören wollen, aber ich habe schon seit vielen, vielen Jahren zu testen und dies ist eine solide Ansatz (obwohl ich würde es kaum nenne den einzigen Ansatz :)
als Ergänzung zu diesem Ansatz empfehle ich http://www.objectoror.com/resources/articles/WorkingEffectivelyWithLegacyCode.pdf (Warnung PDF) und diese http://www-128.ibm.com/developerworks/java/library/j-legacytest.html Ich glaube nicht wirklich Sie die Tests automatisch generieren wollen – Jean
Es ist interessant, aber solche generierten Unit Tests können tatsächlich nützlich sein. Wenn Sie an einer Legacy-Anwendung arbeiten, wird es oft schwierig sein, korrekte Unit-Tests auf dem neuesten Stand der Technik zu schreiben.
Solche generierten Tests (wenn Sie einen Weg haben sie natürlich zu erzeugen) kann dann sicherstellen, dass das Verhalten von Code während Änderungen intakt bleibt, die dann helfen Sie den Code Refactoring und bessere Tests schreiben.
Jetzt über Erzeugung selbst. Ich kenne kein magisches Werkzeug, aber Sie können nach JUnit-Funktionalität suchen, um einige Tests in Javadocs für Methoden einzubinden. Dies würde Ihnen erlauben, einige einfache Tests zu schreiben. Und ja, es ist tatsächlich von etwas Wert.
Zweitens können Sie nur mit der Hand „große“ Tests schreiben. Natürlich wären dies keine Unit-Tests per se (keine Isolation, mögliche Nebenwirkungen, etc), aber könnte ein guter erster Schritt sein. Vor allem, wenn Sie wenig Zeit und eine Legacy-Anwendung haben.
Bonus-Tipp! Es gibt ein ausgezeichnetes Buch "Effektiv mit Legacy-Code arbeiten" mit Beispielen in Java, einschließlich Techniken, die in solchen Situationen verwendet werden können. Leider müssten Sie einige Dinge manuell erledigen, aber Sie müssten das sowieso machen.
CoView Plugin für Eclipse (http://www.codign.com/products.html) sieht nur den Job. Ich bin daran interessiert, Tests zu erstellen, die alle Pfade im Code abdecken, und das scheint es zu tun. Es erzeugt auch die Mocks, die mir viel Zeit sparen sollten.
Ich würde gerne eine Open-Source-Implementierung von etwas wie Agitar zu sehen - das ist etwas, für das Open Source wirklich gut sein sollte. – Vihung