Rozdział 23 · Część V · Sprawdzamy i automatyzujemy

Sprawdź skan i klasyfikację

Test na pustym katalogu i test ponownego skanowania Sorted/ — proste przypadki, które najczęściej psują się niezauważalnie.

SafeSort · Część 5 z 6Testy i CI
Arrangeprzygotować aktaActwywołać scan()Assertsprawdzić wynik

Testy dla scan() oraz classify() razem tworzą małą, w pełni kontrolowaną strukturę plików w tymczasowej a potem sprawdzić, czy skaner znalazł dokładnie te pliki, które tam zostały — Nic więcej, nic mniej.

tests/test_scanner.py
def test_scan_finds_nested_files(tmp_path):
    (tmp_path / "a").mkdir()
    (tmp_path / "a" / "otchet.pdf").write_text("...")
    (tmp_path / "photo.jpg").write_text("...")

    files = scan(tmp_path, Config())
    names = {f.path.name for f in files}
    assert names == {"otchet.pdf", "photo.jpg"}

def test_scan_skips_destination_directory(tmp_path):
    (tmp_path / "Sorted" / "documents").mkdir(parents=True)
    (tmp_path / "Sorted" / "documents" / "staryj.pdf").write_text("...")

    files = scan(tmp_path, Config())
    assert files == []
Pusty katalog — też przypadek do sprawdzenia
Testowanie na pustym katalogu tymczasowym (bez pojedynczego pliku) wydaje się trywialne, ale to właśnie te ekstremalne przypadki najczęściej zawodzą podczas refaktoryzacji: upewnienie się, że scan() zwraca pusty lista zamiast zawieszać się z błędem, to prosty, ale realny test.

Drugi powyższy test to bezpośrednie sprawdzenie wymagań, które omawialiśmy wcześniej: katalogu Wynik nigdy nie jest ponownie skanowany. Bez takiego testu regresja (przypadkowy powrót starego, błędna logika) pozostawały niezauważone, dopóki ktoś nie zaczął SafeSort dwa razy z rzędu na tym samym katalogu i nie widziałem dziwnego wyniku ręcznie.

Praktyka: testujemy skaner i klasyfikator
Potrzebny jest dostęp do prawdziwego systemu plików – uruchamianego lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →