我的项目的目录结构如下:
project/
│
├── __init__.py
├── my_only_script.py
│
│
└── tests/
|
└── unit/
| ├── __init__.py
| └── unit_test.py
|
└── integration/
|
├── fixtures/
| ├── correct_data.csv
| └── generated_data.csv
|
├── __init__.py
└── test_integration.py
我正试图通过在测试目录上以发现模式运行unittest
来执行my_only_script.py的集成测试
# working directory is project root
python -m unittest discover -s tests
然而,当我运行这个命令时,我会遇到错误
ImportError: Failed to import test module: integration.test_integration
为什么unittest
可以发现集成测试——毕竟它提到的模块名称是integration.test_integration
,所以它一定找到了——但集成测试仍然无法导入?
编辑
我遇到的完整错误消息是
(base) [project]$ python -m unittest discover -s tests
E
======================================================================
ERROR: integration.test_integration (unittest.loader._FailedTest)
ImportError: Failed to import test module: integration.test_integration
Traceback (most recent call last):
File "/home/david/anaconda3/lib/python3.7/unittest/loader.py", line 436, in _find_test_path
module = self._get_module_from_name(name)
File "/home/david/anaconda3/lib/python3.7/unittest/loader.py", line 377, in _get_module_from_name
import(name)
File "/home/david/project/tests/integration/test_integration.py", line 13
class PROJECT_INTEGRATION_TEST(unittest.TestCase)
^
SyntaxError: invalid syntax
Ran 1 test in 0.000s
FAILED (errors=1)
在test_integration.py中,除了普通的旧import my_only_script
之外,我还尝试了相对导入from ... import my_only_script
和绝对导入from project import my_only_script
。我也试着完全注释掉import语句。所有这些似乎都导致了上面显示的相同错误。
我知道test_integration.py
中的代码没有其他错误,因为如果我将它移到项目目录的根目录中,并使用python test_integration.py
运行它,其中test_integration.py使用import my_only_script
,则测试运行时不会出现问题。
问题其实很简单;我在的末尾留下了一个冒号
class PROJECT_INTEGRATION_TEST(unittest.TestCase) # <- no colon
在test_integration.py中修复了这个问题之后,在test_inintegration.py中使用import my_only_script
进行导入效果很好。