60

Python 的 unittest discover 没有找到我的测试!

我一直在用鼻子来发现我的单元测试,它工作正常。从我的项目的顶层,如果我运行,nosetests我会得到:

Ran 31 tests in 0.390s

现在 Python 2.7 unittest已经发现,我尝试使用

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。

4

3 回答 3

62

该行为是故意的,但文档可以更清楚地说明这一点。如果您查看测试发现部分的第一段,它会说:

为了使项目的测试与测试发现兼容,它们必须都可以从项目的顶级目录导入(换句话说,它们必须都在 Python 包中)。

一个推论是文件名也必须是有效的 Python 模块名。test-report.py未能通过该测试,因为test-report它不是合法的 Python 标识符。

一个文档错误建议在模式选项的文档中明确提及这一点-p可能是一个很好的前进方式。

于 2011-02-23T10:58:08.303 回答
19

我遇到了这个问题,因为项目中的某些目录丢失了__init__.py。我以为我在 Python 3.7 中不需要它们。

只需添加__init__.py每个目录,python3 -m unittest就会自动找到测试。

于 2019-12-25T19:14:05.133 回答
14

作为一个对 Python 比较陌生的人,文档中的命名约定暗示了相反的意思。Ben 的评论很有帮助:默认的发现模式会查找以字符串“test”为前缀的测试模块

我认为内省只会查找类名,而不需要特定的文件命名约定。

这是文档所说的: https://docs.python.org/3/library/unittest.html python -m unittest discover -s project_directory -p " _test.py" 我无法让它工作,但是通过将我的文件名更改为“test_ .py” - 成功!

于 2019-04-25T14:05:30.833 回答