使用单元测试导入Python项目的模块/包的正确方法是什么?

时间:2018-03-07 07:41:30

标签: python packages python-unittest

我有以下目录结构:

|_ director_script.py
|_ app/
      |_ __init__.py
      |_ ParentClass.py
      |_ my_module/
                 |_ __init__.py
                 |_ MyClass.py
                 |_ MyClassTestCase.py

在我的director_script.py我使用MyClass,当我运行python director_script.py时,脚本按预期运行,没有任何错误。但是,当我进入my_module文件夹并使用python -m unittest MyClassTestCase运行单元测试时,我收到错误:

ModuleNotFoundError: No module named 'app'

MyClass.py中的导入语句

引起的

from app.ParentClass import ParentClass

当我从director_script.py运行此导入时,此导入正常,并且仅在单元测试时发生。

3 个答案:

答案 0 :(得分:2)

您应该从app文件夹外部运行,任何具有__init__.py的文件夹都是python中的子模块。如果将当前工作目录设置为my_module,则无法看到应用程序模块,除非您具有与PYTHONPATH环境变量中设置的app文件夹对应的文件夹路径

答案 1 :(得分:0)

将名为__init__.py的文件添加到顶部文件夹

答案 2 :(得分:0)

有点像kludge,但这就是我通常做的事情:

import sys
sys.path.append('../app')

或在Windows下:

sys.path.append('..\\app')

当然,这需要在你的模块导入之前。