Es gibt mehrere Möglichkeiten, wie Sie damit umgehen können, aber sie sind alle hässlich, da Komponententests isoliert werden sollen, aber Dateien sind alles über dauerhafte Änderungen.
Meine Komponententests werden nicht auf einem System mit Produktionsdaten ausgeführt, daher war es einfach, das Upload-Verzeichnis nach jedem Lauf einfach wieder auf git reset --hard
zurückzusetzen. Dieser Ansatz ist in gewisser Weise der beste Weg, da er keine Codeänderungen erfordert und garantiert funktioniert, solange Sie mit guten Testdaten beginnen.
Wenn Sie tatsächlich brauchen nicht mit dieser Datei nichts tun nach Methode speichert Ihr Modell zu testen, würde ich empfehlen, Michael Foord ausgezeichnete Mock library mit auf die File
Instanz (dh so etwas wie mock_file = Mock(spec=django.core.files.File); mock_file.read.return_value = "fake file contents"
) komplett gefälscht, so dass Sie vollständig vermeiden Änderungen an Ihrer Dateiverarbeitungslogik Die Mock-Bibliothek hat ein paar Möglichkeiten, globally patch Django File class innerhalb einer Testmethode, die etwa so einfach ist, wie dies wird.
Wenn Sie eine echte Datei benötigen (zB um einen Test zu testen, mit einem externen Skript zu bearbeiten usw.) können Sie etwas Ähnliches wie Mirkos Beispiel verwenden und ein File object erstellen, nachdem Sie sich vergewissert haben irgendwo angemessen gespeichert - hier sind drei Möglichkeiten, dies zu tun:
- Haben Sie Ihren Test
settings.MEDIA_ROOT
Punkt in ein temporäres Verzeichnis (siehe die Python tempfile Moduls mkdtemp
-Funktion). Dies funktioniert, solange Sie eine separate STATIC_ROOT
haben, die Sie für die Mediendateien verwenden, die Teil Ihres Quellcodes sind.
- Verwenden Sie ein benutzerdefinierten storage manager
- den Dateipfad manuell auf jede Datei Instanz Set oder eine benutzerdefinierten upload_to Funktion haben irgendwo die Ihre Test-Setup/Teardown Prozess Säuberungen wie ein Testunterverzeichnis unter
MEDIA_ROOT
zu zeigen.
Mögliche Duplikate von [Django Test FileField mit Test Fixtures] (http://StackOverflow.com/Questions/2266503/django-test-filefield-using-test-fixtures) – waterproof