Frage

Ich habe 2 Fragen bekommt über Unit-Tests zu organisieren.

  1. Muß ich Test auf das gleiche Paket wie getestet Klasse setzen, oder kann ich Tests in verschiedenen Paketen organisieren?

    Zum Beispiel, wenn ich Gültigkeit und andere Tests ist es richtig, sie in verschiedene Pakete aufgeteilt, auch wenn sie für gleiche Klasse ist?

  2. Was Mock und Stub-Klassen? Soll ich sie von Paketen trennen nur Tests enthalten, oder sie zusammen?

War es hilfreich?

Lösung

Die Art, wie wir unsere JUnit-Testfälle zu tun ist, sie im gleichen Paket zu setzen, aber in einem anderen Root-Verzeichnis. Da wir Maven verwenden, verwenden wir nur die Standard-Standorte, die die Struktur ähnlich der folgenden zu machen.

src/main/java/com/foo/Bar.java
src/test/java/com/foo/BarTest.java

Natürlich ist es an der Struktur mehr, aber auf diese Weise können wir die Tests getrennt von der Hauptstrecke Code bauen, aber nach wie vor Zugriff geschützt Klassen und dergleichen. Im Hinblick auf verschiedene Arten von Tests, das ist sehr subjektiv. Wenn wir unseren Testaufwand (das leider begann nach der Entwicklung) begannen, habe ich versucht, die Dinge ziemlich isoliert. Leider wurde es schnell zu einem Alptraum, wenn wir zum 500+ Testfall Punkt. Ich habe da versucht, mehr Konsolidierung zu tun. Dies führte zu reduzierten Mengen von Code zu erhalten. Wie gesagt, ist es allerdings sehr subjektiv.

Soweit Test nur Code, halten wir es in einem separaten com.foo.test Paket, das nur in dem src/test/java Baum befindet.

Andere Tipps

Auch ich neige dazu, meine Tests in dem gleichen Paket zu setzen, aber unter einem anderen Root-Verzeichnis. Dies ermöglicht es mir Paket-privaten Klassen oder den Zugang Verpackungs-privaten Klassen zu testen, während etwas anderes im Paket zu testen. Sie werden in einem separaten Verzeichnisbaum gehalten, damit sie aus dem entfalteten Ergebnis ohne (insbesondere, dass die Test-Code, um sicherzustellen, nicht versehentlich in der Produktion Code erhalten). Was am meisten zählt, ist jedoch, was für Ihre Situation.

Im Hinblick darauf, wie viele Testklassen pro Produktions Klasse, die Theorie, die ich gesehen habe, ist, dass Sie eine Testklasse pro Gerät schreiben, das heißt pro Setup-Struktur. In vielen Fällen das ist das gleiche (oder nahe genug), um eine Test-Klasse pro Produktion Klasse, aber ich habe manchmal mehr Testklassen geschrieben (insbesondere Gleichheit neigen Tests getrennt werden) für eine give Produktion Klasse, und gelegentlich eine Testklasse für eine Gruppe von (bezogen) Produktionsklassen (etwa für die Strategie-Muster testen).

Meistens ich keine Sorge zu viel über die Theorie, aber die Tests überarbeite nach Bedarf Duplizierung auf ein absolutes Minimum zu halten.

Testklassen in verschiedenen Paketen eher sollen, ist es einfacher, sie aus dem Produktionscode zu trennen, wenn Sie es für die Freigabe verpacken. Ich halte in der Regel eine Menge Test Flaum in diesen Paketen, alle Arten von Mocks, Konfigurationen, Szenarien .. Aber wenn man bauen - es es nicht bekommen. In manchen Situationen ist es eine gute Idee, um Ihren Test Zeug auch in verschiedenen Projekten zu halten. Kommt drauf an.

es das gleiche Paket halten können Sie Paket-private Sichtbarkeit für Code verwenden, die nur über den Test auf die zugegriffen werden soll bestimmt ist.

getrennte Wurzelverzeichnisse bezüglich der Verwendung, das ist eine gute Praxis. Es hat auch einen Vorteil für uns, da wir IDEA verwenden, IDEA erkennt, dass die Produktion Code nicht Test-Code verweisen können.

Im Hinblick auf denen sie getrennt zu halten, gibt es eine große Macht man in mit, und nur eine Testklasse pro Produktionsklasse auf Einheitenebene. Natürlich bekommen einige Klassen in der Produktion als Teil des Refactoring erstellt, die keine Testklassen überhaupt haben, und das ist in Ordnung, aber wenn Sie wissen wollen, welcher Test eine bestimmte Klasse testet, eine Konvention, die die ClassNameTest sagt, ist die Tests für Klassennamen ist sehr hilfreich.

TestNG ist viel freundlicher zu diesem Paradigma als JUnit, though.

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