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