python / expert
Snippet
Isoliertes Mocking von Async-Generatoren in Django-Unit-Tests
Demonstriert das isolierte Testen von Async-Generator-Konsumenten in Django unter Verwendung von Inline-Async-Generator-Stubs und Mock-Patching.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from unittest.mock import patchfrom django.test import SimpleTestCaseclass AsyncStreamServiceTest(SimpleTestCase):async def test_async_generator_stream(self):async def mock_stream():yield {"status": "processing"}yield {"status": "complete"}with patch("services.external.fetch_stream", side_effect=mock_stream):from services.external import fetch_streamresults = [data async for data in fetch_stream()]self.assertEqual(len(results), 2)self.assertEqual(results[1]["status"], "complete")
django
Erklärung
1
class AsyncStreamServiceTest(SimpleTestCase):
Nutzt SimpleTestCase für schnelle Unit-Tests ohne Datenbankeinrichtung.
2
async def test_async_generator_stream(self):
Deklariert eine asynchrone Testmethode, die von Djangos Test-Runner nativ unterstützt wird.
3
async def mock_stream():
Definiert einen inline asynchronen Generator, der Test-Datenpakete erzeugt.
4
with patch("services.external.fetch_stream", side_effect=mock_stream):
Ersetzt die Zielservice-Funktion für die Testdauer durch den asynchronen Generator-Stub.