单元测试和多个模块的 ImportError

ImportError with unittest and multiples modules

我有一个结构如下的项目:

/
├── test
│   ├── __init__.py
│   └── test_do_stuff.py
└── my_package
    ├── do_stuff.py
    ├── helpers
    │   ├── my_helper.py
    │   └── __init__.py
    ├── __init__.py
    └── main_do_stuff.py

当 运行 进行测试时,我得到 ImportError: No module named 'helpers'

当测试导入 my_package.do_stuff 时,它会尝试导入 helpers.my_helper

test_do_stuff.py:

import unittest
import my_package.do_stuff
# ...

do_stuff.py:

import helpers.my_helper
# ...

main_do_stuff.py:

import do_stuff

python3 my_package/main_do_stuff.py 有效。 主要调用与测试相同的功能。

问题是否出在我启动测试的方式上?

还是我的结构?

我正在尝试找到一种解决方案,该解决方案不会过多地弄乱路径或只为 运行 测试编写大量代码。 (应该有一种简单的方法将测试与代码分开,不是吗?)

您的问题是 python 不接受您的目录层次结构。只需将测试文件放在根目录下(例如 /everything ),它就可以正常工作。您的目录可能如下所示:

/
└── everything
    ├── __init__.py
    ├── test_do_stuff.py
    └── my_package
        ├── do_stuff.py
        ├── helpers
        │   ├── my_helper.py
        │   └── __init__.py
        ├── __init__.py
        └── main_do_stuff.py

问题是隐式相对导入的使用:

import helpers.my_helper

应该是

import my_package.helpers.my_helper