Ich versuche Einheitentests für eine Methode zu schreiben, die einen String-Dateinamen annimmt, dann die Datei öffnet und daraus liest. Um diese Methode zu testen, dachte ich darüber nach, eine Datei zu schreiben und dann meine Methode aufzurufen. In der Buildfarm ist es jedoch nicht möglich, Dateien willkürlich auf die Festplatte zu schreiben. Gibt es eine Standardmethode zum "Simulieren" mit einer echten Datei in meinem Komponententest?
Dies ist sehr verpönt:
Die kleinste Menge an testbarem Code. Oft eine einzige Methode / Funktion, Sans die Verwendung anderer Methoden oder Klassen. Schnell! Tausende von Einheiten Tests können in zehn Sekunden oder weniger ausgeführt werden! Ein Komponententest verwendet NIEMALS:
- eine Datenbank
- ein App-Server (oder Server jeglicher Art)
- Datei / Netzwerk I / O oder Dateisystem;
- eine andere Anwendung;
- die Konsole (System.out, System.err usw.)
- Protokollierung
- die meisten anderen Klassen (Ausnahmen sind DTO's, String, Integer, Mocks und vielleicht ein paar andere). "
Wenn Sie aus einer Datei lesen müssen, lassen Sie eine Testdatei vorgenerieren, von der alle Komponententests gelesen werden. Es besteht keine Notwendigkeit, etwas auf die Festplatte zu schreiben.
Ich habe festgestellt, dass Mockito und Powermock sind eine gute Kombination dafür. Tatsächlich gibt es einen Blogpost mit einem Beispiel, wo die Dateiklasse ist Konstruktor wird zu Testzwecken verspottet. Hier ist auch ein kleines Beispiel, das ich zusammengestellt habe:
%Vor%Testen mit Mockito + Powermock:
%Vor%Wie wäre es mit mocked Stream-Klassen, die die echten (wie BufferredReader, File) vollständig überschreiben (also alle Methoden oder alle Methoden, die Sie verwenden)? Die Daten können als Array von Bytes gespeichert werden, z. B. in einem Singleton, wenn sie zwischen verschiedenen Testklassen verwendet werden sollen.
Wenn Sie JUnit verwenden, gibt es den TemporaryFolder . Dateien werden nach dem Test gelöscht. Beispiel auf der Seite angegeben:
%Vor%Allerdings habe ich es auch zum Testen meiner Android-Klasse Lese- / Schreibfunktionen wie:
verwendet %Vor%Tags und Links java unit-testing