Mocking af dependencies i FastAPI-tests
Lær at isolere FastAPI-endpoints i tests ved at tilsidesætte dependencies og mocke eksterne tjenester.
Mocking af dependencies i FastAPI-tests er en gratis Bootcamp i FastAPI-backendudvikling-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Bootcamp i FastAPI-backendudvikling, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Bootcamp i FastAPI-backendudvikling-kurset indeholder 4 lektioner i alt.
Hvorfor mocke afhængigheder?
Når du tester et FastAPI-endpoint, vil du ofte isolere rutelogikken fra eksterne systemer som databaser, betalingsgateways eller tredjeparts-API'er.
Mocking erstatter de langsomme eller upålidelige dele med forudsigelige falske implementationer, så dine tests forbliver hurtige og deterministiske.
FastAPI-tilsidesættelser af afhængigheder
FastAPI stiller app.dependency_overrides til rådighed, en ordbog, der under test forbinder en rigtig afhængighed med en falsk.
Det er den reneste måde at udskifte en databasesession eller et godkendelsestjek på uden at ændre produktionskoden.
app.dependency_overrides[get_db] = override_get_dbEn afhængighed, der skal tilsidesættes
Forestil dig et endpoint, der afhænger af en databasesession.
from fastapi import Depends
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.get("/users/{uid}")
def read_user(uid: int, db=Depends(get_db)):
return db.query(User).get(uid)Levering af en falsk session
Definér i din test en funktion, der leverer en session i hukommelsen eller en testsession, og registrér den derefter som en tilsidesættelse.
def override_get_db():
db = TestingSessionLocal()
try:
yield db
finally:
db.close()
app.dependency_overrides[get_db] = override_get_dbRydning af tilsidesættelser
Ryd altid tilsidesættelser efter en test, så de ikke påvirker andre tests.
Brug app.dependency_overrides.clear() i oprydningen eller i en finalizer til en pytest-fixture.
app.dependency_overrides.clear()Mocking med unittest.mock
For kode, der ikke er en afhængighed, f.eks. en hjælpefunktion, der kalder et eksternt API, skal du bruge unittest.mock.patch til at erstatte funktionen.
from unittest.mock import patch
with patch("app.services.send_email") as mock_send:
mock_send.return_value = True
response = client.post("/signup", json=payload)
mock_send.assert_called_once()Brug af returværdier fra MagicMock
En MagicMock lader dig angive returværdier og undersøge, hvordan den blev kaldt.
from unittest.mock import MagicMock
fake_client = MagicMock()
fake_client.charge.return_value = {"status": "ok"}Mocking af asynkrone funktioner
FastAPI er velegnet til async-kode. Hvis du vil mocke en async-afhængighed, skal du bruge AsyncMock, så den kan awaites korrekt.
from unittest.mock import AsyncMock
mock_repo = AsyncMock()
mock_repo.get_user.return_value = {"id": 1, "name": "Ada"}Mocking af godkendelsesafhængigheder
Hvis du vil omgå godkendelse i en test, skal du tilsidesætte godkendelsesafhængigheden, så den returnerer en falsk bruger.
def fake_current_user():
return User(id=1, role="admin")
app.dependency_overrides[get_current_user] = fake_current_userKontrol af mock-kald
Mocks registrerer enhver interaktion. Kontrollér, at din kode kaldte afhængigheden på den forventede måde.
mock_send.assert_called_once_with(to="a@b.com")
assert mock_repo.save.call_count == 1Fixture-baserede tilsidesættelser
Pak tilsidesættelser ind i en pytest-fixture, så de kan genbruges og ryddes automatisk op.
import pytest
@pytest.fixture
def client_with_db():
app.dependency_overrides[get_db] = override_get_db
yield TestClient(app)
app.dependency_overrides.clear()Hurtigt tjek
Test din viden om mocking.
Opsummering
Du har lært at isolere FastAPI-endpoints i tests:
- dependency_overrides udskifter afhængigheder som databasesessioner eller godkendelse
- patch / MagicMock / AsyncMock erstatter eksterne funktioner med falske
- Ryd altid tilsidesættelser efter hver test
Mocking holder tests hurtige, deterministiske og fokuserede på din egen logik.
Lær Bootcamp i FastAPI-backendudvikling med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 21
- Lektioner
- 84
Ofte stillede spørgsmål
Er lektionen “Mocking af dependencies i FastAPI-tests” gratis?
Ja — alle 3 lektioner i læringssporet Bootcamp i FastAPI-backendudvikling, inklusive “Mocking af dependencies i FastAPI-tests”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Bootcamp i FastAPI-backendudvikling-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Mocking af dependencies i FastAPI-tests”?
Lær at isolere FastAPI-endpoints i tests ved at tilsidesætte dependencies og mocke eksterne tjenester. Du øver dig i Bootcamp i FastAPI-backendudvikling med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Bootcamp i FastAPI-backendudvikling?
Der kræves ingen tidligere erfaring. Bootcamp i FastAPI-backendudvikling på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Mocking af dependencies i FastAPI-tests”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Bootcamp i FastAPI-backendudvikling-lektion?
Ja. Alle Bootcamp i FastAPI-backendudvikling-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Enhedstest med Pytest
- Integrationstest af FastAPI-endpoints
- Fejlfinding i FastAPI-applikationer
- Mocking af dependencies i FastAPI-tests