Rspec: Wie man Dateioperationen und Dateiinhalte testet
In meiner app habe ich diesen code:
File.open "filename", "w" do |file|
file.write("text")
end
Möchte ich diesen code testen, über rspec. Was ist das beste Verfahren, dies zu tun?
Kommentar zu dem Problem - Öffnen
@Wayne ich Frage mich, wie Sie gehen mit testunit Siehe [diese Frage][1] [1]: stackoverflow.com/questions/11619884/...
InformationsquelleAutor der Frage petRUShka | 2010-11-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, mit
StringIO
für diese und sicherzustellen, dass Ihre SUT akzeptiert einen stream zu schreiben, um stattdessen eine mit dem Namen. Dass die Möglichkeit, unterschiedliche Dateien oder Ausgänge verwendet werden können (mehr wiederverwendbar), einschließlich der string-IO (gut für Tests)So, in den test-code (vorausgesetzt, Ihr SUT Instanz ist
sutObject
und der serializer ist benanntwriteStuffTo
:String IO verhält sich wie eine Datei öffnen. Also, wenn der code schon kann die Arbeit mit einem File-Objekt, funktioniert es mit StringIO.
InformationsquelleAutor der Antwort Danny Staple
Für sehr einfache E/a, Sie können nur Modell-Datei. Also, gegeben:
dann:
Jedoch, dieser Ansatz fällt flach in Anwesenheit von mehreren Lesen/schreiben: einfache refactorings, die sich nicht ändern, der endgültige Status der Datei kann dazu führen, den test zu brechen. In diesem Fall (und möglicherweise in jedem Fall) sollte man lieber @Danny Grundnahrungsmittel Antwort.
InformationsquelleAutor der Antwort Wayne Conrad
Können Sie fakefs.
Es stubs Dateisystem und erstellt Dateien im Speicher
Überprüfen Sie mit
wenn die Datei erstellt wurde.
Können Sie auch einfach nur Lesen, es mit
and run Erwartung auf Ihren Inhalt.
InformationsquelleAutor der Antwort mehowte
Dies ist, wie man mock-Datei (mit rspec 3.4), so könnte man schreiben, um einen Puffer und überprüfen Sie deren Inhalt später:
InformationsquelleAutor der Antwort Eduardo Santana
Für jemanden wie mich, die brauchen, zu modifizieren mehrere Dateien in mehreren Verzeichnissen (z.B. generator für Schienen), verwende ich die temp-Ordner.
InformationsquelleAutor der Antwort lulalala