2016-06-27 3 views
1

Wie würde man die os Modul-Methoden in Python bereitgestellt testen. Zum Beispiel, wie würden Sie die Verwendung von os.mkdir testen?Test os Methoden

def create_folder(self): 
    os.mkdir("/parentFolder/newFolder") 

Was kann verwendet werden, um diese Methode zu testen?

Diese Methode Testfälle haben würde wie

  • Überprüfen der Ordner

  • Unzureichende Berechtigungen Ordner

  • Nicht genügend Raum zu schaffen, Ordner erstellen

+2

Sie testen es nicht, Sie testen * die Interaktion Ihres Programms damit *. Spotte einfach "os.mkdir" und stelle sicher, dass es entsprechend aufgerufen wird. – jonrsharpe

+0

@jonrsharpe Wie würdest du das machen? Würden Sie einfach davon ausgehen, dass die Funktion in den restlichen Tests funktionierte oder würden Sie so etwas wie die vorgeschlagene Antwort mit einem Scheinobjekt tun? – SJC

+1

Aus der Sicht eines Unit Testing, ja. Es hat keinen Sinn zu testen, ob "os.mkdir" selbst funktioniert, weil Sie das nur mit anderen 'os'-Methoden überprüfen können, wie entscheiden Sie, wem Sie vertrauen? An anderer Stelle in Ihren Unit Tests würden Sie 'create_folder' komplett ausspionieren, da dies eine getestete und vertrauenswürdige Einheit ist. Sie würden auch einen Integrationstest auf höherer Ebene durchführen, bei dem es Ihnen egal ist, ob ein bestimmter Ordner so stark erstellt wurde, dass die gesamte Funktionalität funktioniert (z. B. wenn Sie ein Spiel speichern und anschließend das Spiel erneut laden können). – jonrsharpe

Antwort

2

Bei der Unit-Test create_folder, Sie nicht Test os.mkdir. Dies ist aus zwei Gründen:

  1. Es ist Teil einer externen Bibliothek ist (in diesem Fall die Standard-Bibliothek, aber das gleiche wäre der Fall für Bibliotheken von Drittanbietern sein), so sollte von den Testsuiten abgedeckt werden für diese Bibliothek; und

  2. Auch wenn es Teil Ihrer Codebasis war, ist es eine andere als die zu testende Einheit.

Darüber hinaus ist es erwähnenswert, dass Ihre Tests von dieser, wie durch user2393256's answer gezeigt, wahrscheinlich andere Funktionen von der gleichen externen Bibliothek wäre - wenn der Test fehlschlägt, gehen Sie zu dem Schluss, dass os.mkdir nicht funktioniert hat oder dass os.path.isdir hat nicht funktioniert?

Von der Perspektive des Testens create_folder, was wirklich wichtig ist, dass es interagiert mit dieser Funktion korrekt. Ich würde os.mkdir ausspionieren (z. B. unittest.mock) und überprüfen, dass es mit dem entsprechenden Pfad aufgerufen wird. Sie können auch den Rückgabewert und die Nebeneffekte des Mocks ändern, sodass Sie Dinge wie unzureichende Berechtigungen oder Speicherplatz simulieren und die Reaktion Ihrer App darauf testen können, ohne diese Umgebung irgendwie real einrichten zu müssen. Wenn ich andere Funktionseinheiten teste, die create_folder aufrufen, würde ich dann create_folder ganz durchspielen, weil es eine geprüfte und vertrauenswürdige Einheit ist.

Jenseits der Komponententests, haben Sie eine Ebene von Integrationstest, die sicherstellt, dass alle Teile Ihrer Anwendung ordnungsgemäß zusammenarbeiten.An diesem Punkt würden Sie die Gesamtfunktionalität testen, z. dass Sie eine Datei speichern und später wieder laden können, anstatt spezifische Informationen wie "ist der Ordner erstellt?"

Schließlich, und speziell für die Standardbibliothek Funktionalität, haben Sie eine bestimmte Menge an Vertrauen haben, die die Sprache selbst getestet wird (auch wenn sie nicht direkt, zumindest von den Tausenden von Programmen gibt dies bereits mit!) Und Arbeiten.

0
erstellt wurde

Um zu überprüfen, ob der Regisseur y erstellt wurde Sie

os.path.isdir() 

Was die Erlaubnis verwenden können: es ist ein Python-Idiom, das

sagt Es ist einfacher, um Vergebung zu bitten, als um Erlaubnis

In diesem Fall i würde versuchen, den Ordner zu erstellen und die Ausnahme abzufangen, die ausgelöst werden könnte.