Bei der Unit-Test create_folder
, Sie nicht Test os.mkdir
. Dies ist aus zwei Gründen:
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
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.
Sie testen es nicht, Sie testen * die Interaktion Ihres Programms damit *. Spotte einfach "os.mkdir" und stelle sicher, dass es entsprechend aufgerufen wird. – jonrsharpe
@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
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