为什么Nose无法在Ubuntu 9.04中找到测试?
我正在使用带有python 2.5.4的鼻子0.11.1 我只有在明确指定文件名时才能运行测试。 如果我没有指定文件名,只需说明 0测试。
同一个项目在我的Mac上运行测试很好,所以我很难过!
答案 0 :(得分:101)
总是让我nose
的另一件事是它不会在可执行文件中运行测试。我不确定为什么会在Mac / Ubuntu上产生影响,但值得一试。
确保脚本没有以某种方式在Mac上获得chmod +x
d ...如果他们这样做,请使用chmod -x $(find tests/ -name '*.py')
修复它们。
答案 1 :(得分:61)
这种行为几乎肯定是因为你的文件没有按照nose的测试匹配行为命名。来自the nose docs:
nose从其工作目录中找到的python源文件,目录和包中自动收集测试(默认为当前工作目录)。 任何与testMatch正则表达式匹配的python源文件,目录或包(默认情况下:(?:^ | [b _.-])[Tt] \ test)将被收集作为测试(或来源)收集测试。)
重点是我的。
一些匹配的示例名称:
看起来像的名称,但它实际上不匹配:
如果你只是重命名你的文件,你应该很高兴。
<小时/> 更新:我无法从您发布的详细信息中判断,但是您的测试目录可能缺少
__init__.py
个文件?
...确保您的“测试”目录实际上是模块(它们有一个空的
__init__.py
文件)。
答案 2 :(得分:39)
我遇到了同样的问题。我的测试在Windows中运行得很好,但在Ubuntu中没有。
在Ubuntu中,如果你运行:
nosetests -vv --collect-only
你可能会看到它正在跳过你的测试文件,因为它是一个可执行文件: _Tools / LintControlFiles / test_HgLint.py 是可执行的;跳过强>
为了让人们考虑可执行文件,请按以下方式运行:
nosetests --exe
答案 3 :(得分:17)
我可以确认,正如@ david-wolever所说,他们不能在Ubuntu上可执行。 运行
nosetests -vv --collect-only
查看有关检查过哪些文件的完整详细信息。
答案 4 :(得分:10)
如果您正在从目录运行测试,那么有些相关的内容,即
nosetests ... tests/
其中tests是我的测试文件夹的名称,并且在其中一个.py模块中有单独的python测试函数...你的函数必须从'test'开始,用于nosetests以识别你想要的测试跑步。
例如:
def test_something():
...
在
中执行此目录时,nosetests将运行此函数
def somethin_to_test():
...
不会。
答案 5 :(得分:2)
使用-all-modules
,它会找到所有测试。
nosetests --all-modules ./tests
答案 6 :(得分:1)
查看了鼻子的来源,特别是selector.py文件,如果你看看发生了什么,
https://github.com/nose-devs/nose/blob/master/nose/selector.py#L129
在检查我们是否wantFile
时,会调用self.matches
,然后对regex
进行match
搜索,这是您传递给testMatch
的内容。 1}}。
当您稍后检查(以及整个文件)
时,会出现问题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"
然后按照我期望的方式过滤。