Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Ich suche die Möglichkeit, eine Datei im Speicher zu definieren, sie aber dennoch durch einen Namen anzusprechen. Ich kenne zwar StringIO, das ist aber lediglich etwas ähnliches wie eine Datei, aber eben keine Datei. Ich suche etwas ähnliches wie das hier (was in dieser Form aber nicht funktioniert):
@zegru: Welches Problem soll das denn lösen? Das ist etwas was man normalerweise ausserhalb des Programms löst, mit einer ”RAM-Disk”.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Der konkrete Fall: Ich habe ein Programm, das eine Datei ausliest. Diese Funktion möchte ich testen. Ich möchte aber nicht etliche reale Dateien erstellen, sondern deren Inhalt im Code des Tests haben.
Eventuell ergibt sich hier ja eine andere Möglichkeit, das zu testen.
@zegru: Wenn der Code von Dir selbst ist, dann schreib ihn einfacher testbar. Ich habe für mich beispielsweise die Konvention entwickelt eine Funktion oder Methode zu schreiben die `read_irgendwas()` heisst und ein Dateiobjekt entgegennimmt, und eine die `load_irgendwas()` heisst und einen Dateinamen oder Pfad nimmt und die `read_irgendwas()` aufruft. Das gleiche kann man mit `write()` und `save()` machen.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Eine andere Idee kam mir: Im Test eine temporäre Datei erzeugen und die mit einem String aus dem Code befüllen. Für den Test hat man dann den Dateinamen zur Verfügung.
Spricht etwas gegen diesen Ansatz, das ich noch nicht auf dem Schirm hatte?
Ich kenne das aus Projekten auch nur so, wie __blackjack__ es beschreibt.
Du trennst die Funktionalität des Lesens und der Verarbeitet. Und das kannst (und ggf. solltest) du dann getrennt testen.
Temporäre Dateien zu verwenden finde ich schwierig. Das könnte man machen - um das reine Lesen zu testen. Habe ich aber noch nie gesehen.
Aber um das nochmal zu unterstreichen: Ich halte es für richtig "Datei öffnen und Daten lesen" und "Daten verarbeiten" funktional voneinander zu trennen. Und dann ist die Verarbeitung auch entsprechend testbar.