Cześć, mam problem z importem modułów do testów. Poniżej wrzucam strukture katalogów (swoją drogą, możecie dać znac czy jest to dobre rozwiązanie czy może powinno się tworzyć inną strukture, ponieważ są to moje pierwsze testy ;d ). Zastanawiałem się nad pojedynczym plikiem test.py
obok każdego pliku algorytmu, albo katalog tests
obok każdego algorytmu. Finalnie zdecydowałem sie na katalog tests
w katalogu root projektu gdzie będą wszystkie testy.
Python:.
│
├───algorithms
│ └───sorting
│ bubble_sort.py
│ __init__.py
│
└───tests
└───algorithms
└───sorting
bubble_sort_test.py
__init__.py
Teraz problem polega na tym, że importując jakis algorytmy dla przykładu ten bubble_sort.py
z poziomu testu bubble_sort_test.py
czyli wykonując from algorithms.sorting.bubble_sort import bubble_sort
dostane błąd ModuleNotFoundError: No module named 'algorithms'
ponieważ bubble_sort_test.py
szuka katalogu algorithms
względem swojej pozycji (jak dobrze rozumiem).
Mógłbym uruchamiać test z poziomu głownego katalogu python -m unittest tests.algorithms.sorting.bubble_sort.bubble_sort_test.py
, ale z drugiej strony jak ktoś gdzieś w jakimś celu zaimportuje plik testu i będziesz chciał go uruchomić? Wtedy też import sie nie powiedzie z powodu względnej scieżki i rzuci błędem.
W takim przypadku również ten fragment jest zbędny:
if __name__ == "__main__":
unittest.main()
Ponieważ każde bezpośrednie uruchomienie pliku będzie pobierało błędną sciezke do pliku.
Podpowie ktoś jak do tego podejść?