example - python property only setter



Wie teste ich ein Django-Datenbankschema? (1)

Was wir getan haben, hat den Standard test_runner überschrieben, damit es keine neue Datenbank zum Testen erstellt. Auf diese Weise führt es den Test gegen das aus, was unsere aktuelle lokale Datenbank aussieht. Seien Sie jedoch sehr vorsichtig, wenn Sie diese Methode verwenden, da alle Änderungen an Daten, die Sie in Ihren Tests vornehmen, dauerhaft sind. Ich habe sichergestellt, dass alle unsere Tests alle Änderungen wieder in ihren ursprünglichen Zustand zurückversetzen und unsere ursprüngliche Version unserer Datenbank auf dem Server aufbewahren und sichern.

Dazu müssen Sie die run_test-Methode von django.test.simple zu einem Speicherort in Ihrem Projekt kopieren - ich habe mein in meinProjekt / test / test_runner.py

Nehmen Sie dann die folgenden Änderungen an dieser Methode vor:

// change
old_name = settings.DATABASE_NAME
from django.db import connection
connection.creation.create_test_db(verbosity, autoclobber=not interactive)
result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
connection.creation.destroy_test_db(old_name, verbosity)

// to:
result = unittest.TextTestRunner(verbosity=verbosity).run(suite)

Stellen Sie sicher, dass Sie alle erforderlichen Importe oben durchführen und dann in Ihrer Einstellungsdatei die Einstellung festlegen:

TEST_RUNNER = 'myproject.test.test_runner.run_tests'

Wenn Sie nun den ./manage.py-Test ausführen, führt Django die Tests anhand des aktuellen Status Ihrer Datenbank aus, anstatt eine neue Version basierend auf Ihren aktuellen Modelldefinitionen zu erstellen.

Sie können auch eine Kopie Ihrer Datenbank lokal erstellen und dann Ihre neue run_test () -Methode wie folgt überprüfen:

if settings.DATABASE_NAME != 'my_test_db': 
    sys.exit("You cannot run tests using the %s database. Please switch DATABASE_NAME to my_test_db in settings.py" % settings.DATABASE_NAME) 

Auf diese Weise besteht keine Gefahr, dass Tests gegen Ihre Hauptdatenbank ausgeführt werden.

Ich möchte Tests schreiben, die zeigen können, ob die Datenbank mit meiner Datei models.py synchronisiert ist oder nicht. Eigentlich habe ich sie bereits geschrieben, nur um herauszufinden, dass Django jedes Mal eine neue Datenbank erstellt, wenn die Tests basierend auf der Datei models.py ausgeführt werden. Kann ich den models.py-Test auf das vorhandene Datenbankschema anwenden ? Die eine, die in mysql / postgresql ist, und nicht die in /myapp/models.py?

Ich kümmere mich nicht um die Daten, die in der Datenbank sind, ich interessiere mich nur für ihr Schema, dh ich möchte meine Tests bemerken, wenn eine Tabelle in der Datenbank weniger Felder als das Schema in meiner models.py-Datei hat.

Ich verwende das unittest-Framework (eigentlich die Django-Erweiterung), wenn dies relevant ist.

Vielen Dank





model