Nose 是否有任何理由无法在 Ubuntu 9.04 中找到测试?
我将鼻子 0.11.1 与 python 2.5.4 一起使用。
只有当我明确指定文件名时,我才能运行测试。如果我没有指定它刚才说的文件名,0 tests。
同一个项目在我的 Mac 上运行测试很好,所以我很难过!
另一件总是让我想到的事情nose
是它不会在可执行文件中运行测试。我不确定为什么这会对 Mac/Ubuntu 产生影响,但值得一试。
确保脚本没有以某种方式chmod +x
在 Mac 上被 'd... 如果有,请使用chmod -x $(find tests/ -name '*.py')
.
这种行为几乎可以肯定是因为您的文件没有按照鼻子的测试匹配行为命名。从鼻子文档:
鼻子从其工作目录(默认为当前工作目录)中找到的 python 源文件、目录和包自动收集测试。任何与 testMatch 正则表达式匹配的 python 源文件、目录或包(默认情况下:(?:^|[b_.-])[Tt]est)都将被收集为测试(或用于收集测试的源)。
重点是我的。
一些匹配的示例名称:
一个看起来会匹配但实际上不匹配的名称:
如果你只是重命名你的文件,你应该很高兴。
__init__.py
文件?
...确保您的“测试”目录实际上是模块(它们有一个空
__init__.py
文件)。
我有同样的问题。我的测试在 Windows 中运行良好,但在 Ubuntu 中却不行。
在 Ubuntu 中,如果您运行:
nosetests -vv --collect-only
您可能会看到它正在跳过您的测试文件,因为它是一个可执行文件: _Tools/LintControlFiles/test_HgLint.py是可执行文件;跳过
为了让鼻子考虑可执行文件,像这样运行它:
nosetests --exe
我可以确认正如@david-wolever 所说,它们不能在 Ubuntu 上执行。跑
nosetests -vv --collect-only
查看有关检查了哪些文件的完整详细信息。
一些相关的,如果你在一个目录下运行测试,即
nosetests ... tests/
其中 tests 是包含我的测试的文件夹的名称,并且在 .py 模块之一中具有单独的 python 测试函数...您的函数必须以“测试”开头,以便鼻子测试将其识别为您要运行的测试。
例如:
def test_something():
...
在此目录中执行时,nosetests 将运行此函数,而
def somethin_to_test():
...
不会。
使用-all-modules
它,它会找到所有的测试。
nosetests --all-modules ./tests
在查看了nose的来源之后,特别是selector.py文件,如果你看看发生了什么,
https://github.com/nose-devs/nose/blob/master/nose/selector.py#L129
当检查 we是否被调用时,它会针对 进行wantFile
搜索,这就是您作为 传入的内容。self.matches
regex
match
testMatch
当您稍后检查(以及整个文件)时,就会出现问题,
https://github.com/nose-devs/nose/blob/master/nose/selector.py#L152
它再次运行相同类型的检查,针对wantFunction
.
这意味着,如果你的包、容器 pyfile 和实际的测试类/函数有不同的结构,你将不得不创建一个疯狂复杂的正则表达式来匹配每个阶段。
对我来说,当我了解到这一点时,我选择在我的包、容器和测试函数前加上一个通用位,即
setests
├── __init__.py
├── setest_area1.py
└──── def setest_someblock(): ...
然后我的nose
命令就像,
nose --testMatch="setest"
然后,这会过滤我期望它的工作方式。