Wie zum Hohn os.Spaziergang in python mit einem temporären Dateisystem?
Ich versuche zu testen, einige code, der verwendet os.Fuss. Ich möchte, um eine temporäre in-memory-filesystem, das kann ich füllen mit Muster (leere) Dateien und Verzeichnisse, die os.zu Fuß dann zurück. Dies sollte sparen Sie mir die Komplexität der Spott os.gehen Anrufe zu simulieren Rekursion.
Speziell der code, den ich testen will, ist:
if recursive:
log.debug("Recursively searching for files under %s" % path)
for (dir_path, dirs, files) in os.walk(path):
log.debug("Found %d files in %s: %s" % (len(files), path, files))
for f in [os.path.join(dir_path, f) for f in files
if not re.search(exclude, f)]:
yield f
else:
log.debug("Non-recursively searching for files under %s" % path)
for (dir_path, dirs, files) in os.walk(path):
log.debug("Found %d files in %s: %s" % (len(files), path, files))
for f in [os.path.join(dir_path, f) for f in files
if not re.search(exclude, f)]:
yield f
Ist das möglich, in python?
- Wollen Sie zu verspotten, nur die Listen zurückgegeben, oder die vollständige Datei-Funktionen?
- Nur die Listen zurückgegeben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht.
os.walk()
gänzlich umos.listdir()
, mit Hilfe vonos.path.islink()
undos.path.isdir()
. Diese sind im wesentlichen die system-Aufrufe, so dass Sie würde haben, zu verhöhnen, Ihre Dateisystem - auf der system-Ebene. Es sei denn, Sie möchten, schreiben Sie eine FUSE-plugin ist dies nicht leicht sein wird, zu verspotten.Alle
os.walk()
zurückgeben muss, ist eine Liste von Tupeln, wirklich. Es sei denn, Sie testen die Manipulation derdirs
Komponente, es könnte nicht einfacher sein:Diese würden spotten die folgende Verzeichnis Struktur:
@patch('test_module.os.walk') def test_walk(self, os_walk): os.walk.return_value[('/foo', ('',), ('file.txt',))]
=
fehlt es;os.walk.return_value
ist nicht indizierbar. 🙂(), ('spam', 'eggs')
könnte[], ['spam', 'eggs']
. nicht, dass deins funktioniert hier nicht, aber es würde nicht Schaden, um zu ähneln die Reale mehr genau entweder.dir
Komponente vor allem, der test würde die aktualisiert werden müssen. Sie würde einfach vergessen, dass, wenn Sie waren zu Listen. 🙂