使用unittest和multiples模块的ImportError

时间:2016-03-13 12:15:59

标签: python python-3.x testing importerror directory-structure

我有一个具有以下结构的项目:

/
├── 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

  • 运行测试的命令是python3 -m unittest(这是正确的方法吗?)

  • 所有__init__.py都是空的。

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有效。 主要调用与测试相同的功能。

问题是否来自我启动测试的方式?

还是我的结构?

我正在尝试找到一种解决方案,该解决方案不涉及过多地使用路径或编写大量代码来运行测试。 (应该有一种简单的方法可以将测试与代码分开吗?)

2 个答案:

答案 0 :(得分:1)

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

import helpers.my_helper

应该是

import my_package.helpers.my_helper

答案 1 :(得分:0)

你的问题是python不接受你的目录hieracy。只需将测试文件放在根目录下(例如/ /所有内容),它就可以正常工作。你的导演看起来像这样:

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