MrFaws Docs
Lær Python

Test og debugging

Find fejl hurtigere med pytest, fixtures, mocks, logging og debuggeren.

En simpel test

def calculate_total(prices: list[int]) -> int:
    return sum(prices)

def test_calculate_total() -> None:
    assert calculate_total([10, 20, 5]) == 35

Kør med:

python -m pip install pytest
python -m pytest

Test fejltilfælde

import pytest

def divide(a: float, b: float) -> float:
    if b == 0:
        raise ValueError("b må ikke være 0")
    return a / b

def test_zero_is_rejected() -> None:
    with pytest.raises(ValueError, match="må ikke"):
        divide(10, 0)

Fixtures og midlertidige filer

Pytests tmp_path giver hver test sin egen tomme mappe:

from pathlib import Path

def test_save(tmp_path: Path) -> None:
    output = tmp_path / "result.txt"
    output.write_text("ok", encoding="utf-8")
    assert output.read_text(encoding="utf-8") == "ok"

Mock ved systemgrænser

Mock tid, netværk, email og eksterne services. Undgå at mocke almindelig intern logik; det gør tests tæt bundet til implementationen.

Debugging-rækkefølge

  1. Genskab fejlen stabilt.
  2. Læs hele tracebacken og start ved din egen første linje.
  3. Gør inputtet mindre.
  4. Sæt breakpoint med breakpoint().
  5. Inspicér værdier og antagelser.
  6. Skriv en test, der fejler før rettelsen og består efter.

Kvalitetsværktøjer

Brug type checking, formattering og linting i CI. En typisk pipeline kører tests på en ren installation og stopper deployment ved fejl.

On this page