2011-02-23 77 views
26

Python的单元测试发现没有找到我的测试!`python -m unittest discover`没有发现测试

我一直在使用鼻子来发现我的单元测试,它工作正常。从我的项目的顶级水平,如果我跑nosetests我得到:

Ran 31 tests in 0.390s 

现在的Python 2.7单元测试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的发现算法找不到测试?

我使用Python 2.7.1和1.0.0的鼻子在Windows 7

+3

我刚刚发现,如果我将'test-report.py'重命名为'test_report.py',就会发现测试。除非有人能够说明这一点,否则我会向unittest模块维护人员提交一个错误报告。 – blokeley 2011-02-23 09:56:11

+0

我感到惊讶,因为测试报告是不可导入的,所以这在鼻子中起作用。 – dbn 2013-01-16 20:55:31

回答

31

的行为是故意的,但文档可能会使它变得清晰。如果您查看测试发现部分的第一段,它会说:

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

一个必然结果是文件名也必须是有效的Python模块名称。 test-report.py未通过测试,因为test-report不是合法的Python标识符。

一个文档错误,暗示这在-p模式选项的文档中明确提到,可能是一个很好的前进方向。

+4

http://bugs.python.org/issue11298 – blokeley 2011-02-23 11:44:26

+12

上提供的文档错误还要注意默认的发现模式寻找以字符串“test”为前缀的测试模块......这就是让我感到满意的东西。 – 2014-01-29 02:32:19

相关问题