python / intermediate
Snippet
Testen benutzerdefinierter Django-Management-Befehle mit call_command und StringIO
Das Testen benutzerdefinierter Django-Management-Befehle erfordert das Erfassen der Standardausgabe. Die Übergabe eines io.StringIO-Puffers an call_command() erfasst die gedruckte Ausgabe zur Überprüfung des erwarteten Ausführungsergebnisses.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
from io import StringIOfrom django.core.management import call_commandfrom django.test import TestCaseclass CommandExecutionTest(TestCase):def test_cleanup_command_output(self):out = StringIO()call_command('cleanup_stale_tokens', '--days=7', stdout=out)output_text = out.getvalue()self.assertIn('Successfully removed stale tokens', output_text)
django
Erklärung
1
out = StringIO()
Erstellt einen In-Memory-String-Puffer zur Erfassung der Konsolenausgabe.
2
call_command('cleanup_stale_tokens', '--days=7', stdout=out)
Führt den Management-Befehl programmatisch aus und leitet stdout um.
3
output_text = out.getvalue()
Extrahiert den geschriebenen Textinhalt aus dem Puffer.
4
self.assertIn('Successfully removed stale tokens', output_text)
Überprüft das Vorhandensein der erwarteten Protokollmeldung in der Ausgabe.