conftest
rozwiązanie
Najmniej inwazyjne rozwiązanie polega na dodaniu pustego pliku o nazwie conftest.py
w repo/
katalogu:
$ touch repo/conftest.py
Otóż to. Nie ma potrzeby pisania niestandardowego kodu w celu manipulacji sys.path
lub pamiętaj, aby przeciągać PYTHONPATH
lub umieszczać __init__.py
w katalogach, w których nie należy.
Katalog projektu następnie:
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
Wyjaśnienie
pytest
szuka conftest
modułów w kolekcji testowej, aby zebrać niestandardowe zaczepy i urządzenia, a aby zaimportować z nich niestandardowe obiekty, pytest
dodaje katalog nadrzędny conftest.py
dosys.path
(w tym przypadku repo
katalogu).
Inne struktury projektu
Jeśli masz inną strukturę projektu, umieść conftest.py
katalog w katalogu głównym pakietu (ten, który zawiera pakiety, ale sam nie jest pakietem, więc nie zawiera an __init__.py
), na przykład:
repo
├── conftest.py
├── spam
│ ├── __init__.py
│ ├── bacon.py
│ └── egg.py
├── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
src
układ
Chociaż tego podejścia można użyć z src
układem (umieść conftest.py
w katalogu src
):
repo
├── src
│ ├── conftest.py
│ ├── spam
│ │ ├── __init__.py
│ │ ├── bacon.py
│ │ └── egg.py
│ └── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
uwaga, że dodanie w src
celu PYTHONPATH
złagodzenia znaczenia i zalet src
układu! Skończysz na testowaniu kodu z repozytorium, a nie zainstalowanego pakietu. Jeśli musisz to zrobić, może wcale nie potrzebujesz src
reż.
Dokąd się udać?
Oczywiście conftest
moduły to nie tylko niektóre pliki, które pomagają w odkrywaniu kodu źródłowego; w tym miejscu mają miejsce wszystkie udoskonalenia pytest
frameworku specyficzne dla projektu i dostosowanie pakietu testowego. pytest
ma wiele informacji o conftest
modułach rozrzuconych po ich dokumentach ; zacznij od conftest.py
: lokalnych wtyczek dla poszczególnych katalogów
Ponadto SO ma doskonałe pytanie dotyczące conftest
modułów: W py.test, do czego służą pliki conftest.py?