`python -m unittest discover`没有发现测试

时间:2011-02-23 09:20:54

标签: python unit-testing nose unittest2

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。

3 个答案:

答案 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就会自动找到测试。