Ich lerne die Konzepte der testgetriebenen Entwicklung durch Lesen der Craftsman-Artikel (klicken Sie auf Craftsman unter Nach Thema ), die in einer Antwort auf meine vorherige Frage "Beispielprojekt zum Erlernen von JUnit und zur richtigen Softwareentwicklung" empfohlen wurden . Ich liebe es so weit!
Aber jetzt möchte ich mich hinsetzen und es selbst versuchen. Ich habe eine Frage, von der ich hoffe, dass sie nur eine einfache Antwort benötigt.
Wie organisieren Sie Ihre JUnit-Testklassen und Ihren tatsächlichen Code? Ich spreche hauptsächlich über die Paketstruktur, aber auch andere wichtige Konzepte wären hilfreich.
Fügen Sie Testklassen in org.myname.project.test. * Und normalen Code in org.myname.project. * Ein? Stellen Sie die Testklassen direkt neben die normalen Klassen? Ziehen Sie es vor, den Klassennamen Test voranzustellen, anstatt sie mit einem Suffix zu versehen?
Ich weiß, das scheint mir so schnell keine Sorgen zu machen, aber ich bin eine sehr organisationsorientierte Person. Ich bin fast die Art von Person, die mehr Zeit damit verbringt, Methoden zu finden, um zu verfolgen, was zu tun ist, anstatt Dinge tatsächlich zu erledigen.
Und ich habe ein Projekt, das derzeit ordentlich in Pakete unterteilt ist, aber das Projekt wurde zu einem Chaos. Anstatt zu versuchen, alles umzugestalten und Tests zu schreiben, möchte ich neu anfangen, zuerst Tests. Aber zuerst muss ich wissen, wohin meine Tests gehen.
edit: Ich habe Maven total vergessen, aber es scheint, dass die Mehrheit von euch es benutzt! In der Vergangenheit hatte ich einen speziellen Anwendungsfall, in dem Maven völlig auf mich zusammenbrach, aber Ant mir die Flexibilität gab, die ich brauchte, und so endete ich mit Ant, aber ich denke, ich habe vielleicht nur den falschen Ansatz gewählt. Ich denke, ich werde Maven noch einmal versuchen, weil es so klingt, als würde es gut zu einer testgetriebenen Entwicklung passen.
quelle
Antworten:
Ich bevorzuge es, die Testklassen in dasselbe Paket wie die von ihnen getesteten Projektklassen zu legen, jedoch in einem anderen physischen Verzeichnis, wie z.
In einem Maven-Projekt würde es so aussehen:
Der Hauptpunkt dabei ist, dass meine Testklassen auf Klassen und Mitglieder im Paketbereich zugreifen (und diese testen!) Können.
Wie das obige Beispiel zeigt, haben meine Testklassen den Namen der getesteten Klasse plus
Test
als Suffix. Dies hilft, sie schnell zu finden - es ist nicht sehr lustig, zwischen ein paar hundert Testklassen zu suchen, deren Name jeweils mitTest
...Update inspiriert von @ Rickets Kommentar: Auf diese Weise werden Testklassen (normalerweise) direkt nach ihrem getesteten Kumpel in einer projektbezogenen alphabetischen Liste von Klassennamen angezeigt. (Komisch, dass ich Tag für Tag davon profitiere, ohne bewusst gemerkt zu haben, wie ...)
Update2: Viele Entwickler (einschließlich ich) mögen Maven, aber es scheint mindestens genauso viele zu geben, die dies nicht tun. IMHO ist es sehr nützlich für "Mainstream" -Java-Projekte (ich würde ungefähr 90% der Projekte in diese Kategorie einordnen ... aber die anderen 10% sind immer noch eine beträchtliche Minderheit). Es ist einfach zu bedienen, wenn man die Maven-Konventionen akzeptieren kann; Wenn nicht, macht es das Leben zu einem elenden Kampf. Maven scheint für viele Menschen, die mit Ant sozialisiert sind, schwer zu verstehen zu sein, da es anscheinend eine ganz andere Denkweise erfordert. (Ich selbst, der Ant noch nie verwendet hat, kann die beiden nicht vergleichen.) Eines ist sicher: Dadurch wird das Testen von Einheiten (und Integrationen) zu einem natürlichen, erstklassigen Schritt in diesem Prozess, der Entwicklern hilft, diese wesentliche Praxis zu übernehmen.
quelle
public
). .Ich lege meine Testklassen in dasselbe Paket wie das, was sie testen, aber in einen anderen Quellordner oder ein anderes Projekt . Wenn ich meinen Testcode auf diese Weise organisiere, kann ich ihn einfach kompilieren und separat verpacken, sodass Produktions-JAR-Dateien keinen Testcode enthalten. Außerdem kann der Testcode auf private Felder und Methoden des Pakets zugreifen.
quelle
Ich benutze Maven . Die Struktur, die Maven fördert, ist:
Das heißt, eine Testklasse mit Test vor dem Namen der zu testenden Klasse befindet sich in einer parallelen Verzeichnisstruktur zum Haupttest.
Ein Vorteil der Testklassen im selben Paket (allerdings nicht unbedingt im Verzeichnis) besteht darin, dass Sie mithilfe von Methoden für den Paketbereich Scheinprüfobjekte untersuchen oder einfügen können.
quelle
<class>Test.java
nichtTest<class>.java
<class>Test.java
Namensschema sowohl die Hauptklasse als auch die Testklasse bei Verwendung von IDE-Suchfunktionen aus der Nähe zeigt, was es ein bisschen besser macht alsTest<class>.java
.