Bootcamp i FastAPI-backendudvikling · Lektion

Mocking af dependencies i FastAPI-tests

Lær at isolere FastAPI-endpoints i tests ved at tilsidesætte dependencies og mocke eksterne tjenester.

Lektion 4 af 413 trin

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_db

En 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_db

Rydning 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_user

Kontrol 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 == 1

Fixture-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.

Gratis at komme i gang

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

  1. Enhedstest med Pytest
  2. Integrationstest af FastAPI-endpoints
  3. Fejlfinding i FastAPI-applikationer
  4. Mocking af dependencies i FastAPI-tests
← Tilbage til Bootcamp i FastAPI-backendudvikling