Ich empfehle, die Standardverzeichnisstruktur der Apache Software Foundation zu befolgen , die Folgendes ergibt:
module/
src/
main/
java/
test/
java/
Dadurch werden Tests von der Quelle getrennt, jedoch auf derselben Ebene in der Verzeichnisstruktur. Wenn Sie durchlesen, wie Apache ihre Struktur definiert, werden Sie feststellen, dass dies auch dazu beiträgt, andere Probleme wie Ressourcen, Konfigurationsdateien, andere Sprachen usw. aufzuteilen.
Diese Struktur ermöglicht es Unit-Tests auch, Paket- und geschützte Level-Methoden der zu testenden Einheiten zu testen, vorausgesetzt, Sie platzieren Ihre Testfälle in demselben Paket wie das, was sie testen. In Bezug auf das Testen privater Methoden würde ich mich nicht darum kümmern. Etwas anderes, entweder öffentlich, paketiert oder geschützt, ruft sie auf, und Sie sollten in der Lage sein, eine vollständige Testabdeckung zu erhalten, in der diese Dinge getestet werden.
Der obige Link führt übrigens zu Maven, dem Standard-Build-Tool von Apache. Jedes Java-Projekt, das sie haben, entspricht diesem Standard sowie jedes Projekt, auf das ich gestoßen bin und das mit Maven erstellt wurde.
java
Verzeichnis eine unnötige Ergänzungmain
als auch dertest
Ordner einenresources
Quellordner haben, der in denselben Ausgabeordner kompiliert wird, den derjava
Ordner erstellt, was eine einfache Trennung von Java-Code und Ressourcendateien auf der Quellenebene ermöglicht. Ich mag diese Struktur auch, weil sie die oberste Ebene frei von mehreren Quellordnern hält ... es ist eine sehr logische Organisation. Und ja, das hat nichts damit zu tun, ob man Maven mag oder nicht.Meistens wird so vorgegangen:
Sie halten sie also getrennt und können das Paket / die geschützte Funktionalität weiterhin testen, da sich der Test im selben Paket befindet.
Sie können private Inhalte nur testen, wenn sie innerhalb der Klasse selbst deklariert sind.
Bei Lieferung packen Sie nur die
.class
von src generierten, nicht die Testsquelle
Tatsächlich ist es sehr sinnvoll, Ihre Produktions- und Testprojekte in zwei separate Einheiten aufzuteilen, aber in beiden Projekten dieselbe Paketstruktur zu haben.
Wenn ich also ein Projekt 'mein-Projekt' habe, erstelle ich auch 'mein-Projekt-Test', also habe ich die folgende Verzeichnisstruktur:
Dieser Ansatz stellt sicher, dass Testcode-Abhängigkeiten den Produktionscode nicht verschmutzen.
Meiner persönlichen Meinung nach sollten sowohl private als auch geschützte Paketmethoden sowie öffentliche Methoden getestet werden. Daher möchte ich meine Testklassen im selben Paket wie die Produktionsklassen.
quelle
So haben wir es eingerichtet und es gefällt uns.
Der gesamte Testcode wird in ein eigenes Build-Verzeichnis kompiliert. Dies liegt daran, dass die Produktion nicht versehentlich Testklassen enthalten soll.
quelle
Beim Erstellen eines Java-Bibliotheksmoduls in Android Studio wird eine Standardklasse erstellt unter:
[module] + src/main/java/[com/foo/bar]
Wenn Sie in eine
[module].iml
Datei schauen , finden Sie diesen Pfad sowie den Pfad für Tests, den Sie verwenden können. Das Folgende ist eine Zusammenfassung:<module> <component> <content> <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> </content> </component> </module>
Sie können insbesondere ein Verzeichnis für Tests erstellen, das die folgende Struktur aufweist:
[module] + src/main/java/[com/foo/bar] + src/test/java/[com/foo/bar]
Die obige Struktur wird von Android Studio erkannt und Ihre darunter liegenden Dateien werden in das Modul aufgenommen.
Ich gehe davon aus, dass diese Struktur ein empfohlenes Layout für Code und Tests ist.
quelle