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]) == 35Kør med:
python -m pip install pytest
python -m pytestTest 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
- Genskab fejlen stabilt.
- Læs hele tracebacken og start ved din egen første linje.
- Gør inputtet mindre.
- Sæt breakpoint med
breakpoint(). - Inspicér værdier og antagelser.
- 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.