ImportError:无法导入测试模块On Python集成测试



我的项目的目录结构如下:

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进行导入效果很好。