2017-04-08 5 views
1

Ich schreibe Komponententests für mein Java-Programm. Mein Programm führt viele Dinge aus, die das Lesen von einer Datei, die der Benutzer eingibt, und das Erstellen einer neuen Datei basierend auf dem Inhalt der eingegebenen Datei beinhalten.Ist es für Komponententests angemessen, vorgefertigte Dateien zu verwenden?

Momentan verwenden meine Komponententests vorgefertigte Dateien, die zum Testen erstellt wurden und die ich in das Quellverzeichnis der Ressourcen gestellt habe. Wenn eine Datei erstellt wird, wird sie im selben Ressourcenquellverzeichnis abgelegt.

Ich habe mir hier viele Fragen und Antworten angeschaut, und es gibt so viele verschiedene Meinungen darüber, wie man mit Dateien in Unit Tests umgeht. Ist es richtig, diese vorgefertigten Dateien in meinen Komponententests zu verwenden, oder gibt es eine bessere Lösung?

+3

Ja, es ist völlig in Ordnung. Stellen Sie die von Ihren Tests generierten Dateien jedoch nicht unter src ab. Sie sind keine Quellen, also haben sie in src nichts zu tun. –

+0

@ JBNizet Vielen Dank. Ich werde ändern, wo sie erstellt werden. – ST3

+0

Sie könnten den Code auch so umgestalten, dass Sie nur einen 'InputStream' anstelle eines' FileInputStream' nehmen und dann einfach einen 'ByteArrayInputStream' übergeben und alles in einem Test behalten. (Dasselbe gilt für das Schreiben von Dateien: benutze 'OutputStream' und so). Wenn du stattdessen Dateinamen übergibst, gibt es ein bisschen mehr Refactoring, aber die Idee ist die gleiche. – Robert

Antwort

1

Ja, die Standardpraxis besteht darin, Ihre statischen Eingabedateien zum Testen im Verzeichnis src/test/resources zu speichern. Wenn der Hauptcode eine Ausgabe generiert, ist der sauberste Ort, um ihn während des Testens zu platzieren, in Ihrem plattformspezifischen tmp-Verzeichnis. In Java ist dies unter dem System Eigenschaft java.io.tmpdir:

System.out.println(System.getProperty("java.io.tmpdir"));

Wenn Sie dieses Verzeichnis verwenden, wird es zwischen Entwicklern tragbar sein läuft unter MacOS, Linux oder Windows - sowie alle Build-Server.

Es ist auch eine gute Idee für Ihren Test, diese temporären Dateien zu löschen, wenn der Test abgeschlossen ist, und für Ihren Test keine Annahmen über temporäre Dateien, die aus einem vorherigen Testlauf bestehen können.

+0

Schauen Sie sich für die temporären Dateien auch die 'TemporaryFolder'-Regel von JUnit an. – JayK

0

Ob statische "vorgefertigte" Dateien geeignet sind, hängt weitgehend von der Logik ab, die Sie testen möchten, und davon, wie Sie Ihre Testdaten verwalten möchten. Vielleicht benötigen Sie Testdaten, die ein Datum enthalten, das relativ zum heutigen Datum ist. In diesem Fall könnte die Verwendung einer statischen Datei mehr Probleme bereiten als das Schreiben eines Codes zur Berechnung eines relativen Datums.

Wie JB Nizet in seinem Kommentar darauf hingewiesen hat, ist es generell keine gute Idee, Testdaten neben dem Quellcode zu speichern. Ich bin mir nicht sicher, ob Sie mit Maven und seiner standard directory layout vertraut sind, aber Sie könnten einen Blick darauf werfen und sehen, wie es hilft, die Test- und Quelldateien getrennt zu halten.

+0

Guter Punkt mit der Möglichkeit, dass die Datei etwas wie das heutige Datum benötigt. Ich habe momentan nichts in meinem Programm, aber es ist gut, daran zu denken. – ST3

Verwandte Themen