(Python单元测试)正在测试的模块无法导入其依赖项:ModuleNotFoundError

时间:2020-03-01 02:20:35

标签: python unit-testing directory python-import importerror

我正在为已经完成的项目开发单元测试,但是在不修改原始代码的情况下,我很难运行单元测试。我要测试的模块在同一文件夹中具有其他依赖项,在运行单元测试时该依赖项不会导入。这是我的目录:

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

module1.py中的原始代码可以成功地自行导入module2.py,如下所示:from module2 import Practices,其中Practicesmodule2中的函数。

我遇到的问题是,为了运行test_module1.py(我是通过从根目录调用python3 -m unittest来完成的),我必须修改module1.py本身,以便它说:from main_folder.module2 import Practices

如果我运行测试文件时没有修改module1.py,则会收到错误ModuleNotFoundError: No module named 'module2'

理想情况下,我无法以这种方式修改代码,并且我试图找到一种使我的测试能够正常工作而不接触应用程序本身的方法。我应该怎么做?我运行应用程序时module1.py在不修改文件的情况下可以正常运行,但是修改文件以使测试工作中断了主应用程序。我该怎么做才能使测试独立于主应用程序的代码?

(有关更多背景知识,test_module1.py文件通过调用from main_folder.module1 import fun1起作用,其中fun1是我要测试的功能)

1 个答案:

答案 0 :(得分:0)

尝试使用以下命令之一运行测试(替换实际路径):

如果您的测试是“从main_folder import ...”中导入模块

env PYTHONPATH=/root python3 -m unittest

或者如果您的测试直接导入“导入模块1”:

env PYTHONPATH=/root/main_folder python3 -m unittest

请注意,您可能需要现有的

 main_folder/__init__.py

文件,以将main_folder识别为软件包,具体取决于您所使用的python版本。如果您当前没有这样的文件,请尝试创建它(为空,无需在其中放入代码),然后检查问题是否仍然存在。