(Python Unittest) Тестируемый модуль не может импортировать свои зависимости: ModuleNotFoundError - PullRequest
0 голосов
/ 01 марта 2020

Я работаю над разработкой юнит-тестов для проекта, который уже был завершен, однако мне трудно выполнять мои юнит-тесты без изменения исходного кода. Модуль, который я пытаюсь протестировать, имеет другие зависимости в той же папке, которые не будут импортированы при запуске юнит-тестов. Вот как выглядит мой каталог:

root
|--main_folder
   |--module1.py
   |--module2.py
|--tests
   |--test_module1.py

Исходный код в module1.py успешно импортирует module2.py сам по себе так: from module2 import Practices где Practices - функция из module2.

Проблема, с которой я сталкиваюсь, заключается в том, что для запуска test_module1.py (что я делаю, вызывая python3 -m unittest из каталога root), мне нужно изменить саму module1.py так, чтобы она говорит: from main_folder.module2 import Practices.

Если я запускаю тестовый файл без изменения module1.py, я получаю ошибку ModuleNotFoundError: No module named 'module2'.

В идеале я не могу изменить код таким образом, и я пытаюсь найти способ заставить мои тесты работать, не касаясь самого приложения. Как я должен go об этом? module1.py работает нормально, когда я запускаю приложение, не изменяя файл, но изменяя его так, чтобы работа тестов нарушала основное приложение. Что я могу сделать, чтобы мои тесты не зависели от кода основного приложения?

(Для получения дополнительной информации файл test_module1.py работает путем вызова from main_folder.module1 import fun1, где fun1 - это функция, которую я пытаюсь проверить)

1 Ответ

0 голосов
/ 01 марта 2020

Попробуйте запустить свои тесты, используя одну из следующих команд (заменив фактические пути):

, если ваши тесты импортируют модули «из импорта main_folder ...»

env PYTHONPATH=/root python3 -m unittest

или если ваши тесты импортируют напрямую «import module1»:

env PYTHONPATH=/root/main_folder python3 -m unittest

В качестве примечания вам может понадобиться существующий файл

 main_folder/__init__.py

, чтобы main_folder распознавался как пакет, в зависимости от версии python, которую вы используете. Если у вас в настоящее время нет такого файла, попробуйте создать его (пустой, нет необходимости помещать код внутри него) и проверить, сохраняется ли проблема.

...