Python的unittest discover找不到我的测试!
我一直在使用鼻子来发现我的单元测试,它工作正常。从我的项目的顶层,如果我运行nosetests
,我得到:
Ran 31 tests in 0.390s
现在Python 2.7 unittest has discovery,我已尝试使用
python -m unittest discover
但我得到
Ran 0 tests in 0.000s
我的目录结构是:
myproj/
reporter/
__init__.py
report.py
[other app modules]
tests/
__init__.py
test-report.py
[other test modules]
你有什么想法为什么unittest的发现算法找不到测试?
我在Windows 7上使用Python 2.7.1和鼻子1.0.0。
答案 0 :(得分:46)
这种行为是有意的,但文档可以使这一点更加清晰。如果你看一下测试发现部分的第一段,它会说:
要使项目的测试与测试发现兼容,它们必须都可以从项目的顶级目录导入(换句话说,它们都必须在Python包中)。
这样做的必然结果是文件名也必须是有效的Python模块名称。 test-report.py
未通过该测试,因为test-report
不是合法的Python标识符。
文档错误表明在-p
模式选项的文档中明确提到这可能是一个很好的前进方法。
答案 1 :(得分:1)
作为Python的新手,文档中的命名约定暗含了相反的含义。 Ben的评论非常有帮助:默认发现模式将查找以字符串“ test”为前缀的测试模块
我认为自省只会寻找类名,而不需要特定的文件命名约定。
文档内容如下: https://docs.python.org/3/library/unittest.html python -m unittest discover -s project_directory -p“ _test.py” 我无法执行此操作,但是将文件名更改为“ test _ .py”-成功!
答案 2 :(得分:0)
我遇到了这个问题,因为项目中的某些目录丢失了__init__.py
。我以为在Python 3.7中不需要它。
只需将__init__.py
添加到每个目录中,python3 -m unittest
就会自动找到测试。