鼻子无法在Ubuntu中findtesting
有什么理由为什么鼻子不能在Ubuntu 9.04中findtesting?
我用鼻子0.11.1与Python 2.5.4。
我只能在明确指定文件名的情况下运行testing。 如果我不指定文件名,它只是说, 0testing 。
同样的项目在我的Mac上运行得很好,所以我很难过!
一些相关的,如果你正在运行testing的目录即
nosetests ... tests/
其中testing是我的testing文件夹的名称,并且在.py模块之一中具有单独的pythontesting函数。您的函数必须以“testing”开始,才能将nosetests识别为要运行的testing。
例如:
def test_something(): ...
在这个目录下执行时,nosetests会运行这个函数
def somethin_to_test(): ...
不会。
另一件总是让我nose
是,它不会在可执行文件中运行testing。 我不确定为什么这会在Mac / Ubuntu上有所作为,但值得一试。
确保脚本不会以某种方式在Mac上获得chmod +x
x'd …如果他们这样做了,用chmod -x $(find tests/ -name '*.py')
修复它们。
这种行为几乎肯定是因为你的文件没有按照鼻子的testing匹配行为命名。 从鼻子文件 :
鼻子从python源文件,在其工作目录(默认为当前工作目录)中find的目录和包自动收集testing。 任何与testMatch正则expression式(默认:(?:^ | [b_.-])[Tt] est)相匹配的Python源文件,目录或包将作为testing (或testing集合的源)收集。
重点是我的。
一些可以匹配的示例名称:
- TestFoo.py
- Foo-Test.py
- Foo_Test.py
- Foo.Test.py(注意,这个将会尝试导入Foo,如果不能的话会引发一个exception)
一个看起来会匹配的名字,但实际上不会:
- FooTest.py
如果你只是重命名你的文件,你应该很好去。
更新 :你读过这篇博文吗? 我无法从您发布的详细信息中分辨出来,但也许您的testing目录缺less__init__.py
文件?
…确保你的“testing”目录实际上是模块(他们有一个空的
__init__.py
文件)。
我有同样的问题。 我的testing在Windows中运行得很好,但在Ubuntu中却没有。
在Ubuntu中,如果你运行:
nosetests -vv --collect-only
你可能会看到它跳过你的testing文件,因为它是一个可执行文件:_Tools / LintControlFiles / test_HgLint.py 是可执行的; 跳过
为了让鼻子考虑可执行文件,像这样运行:
nosetests --exe
我可以确认,因为@ david-wolever说,他们不能在Ubuntu上执行。 跑
nosetests -vv --collect-only
查看关于哪些文件被检查的全部细节。
仔细观察一下nose的来源,特别是selector.py文件,看看发生了什么,
https://github.com/nose-devs/nose/blob/master/nose/selector.py#L129
当检查我们是否需要wantFile
,调用wantFile
,然后针对match
执行regex
search,这就是您将作为testMatch
传入的testMatch
。
当您稍后检查(并在整个文件中)时,会出现问题
https://github.com/nose-devs/nose/blob/master/nose/selector.py#L152
它再次运行相同types的检查,对wantFunction
。
这意味着,如果你的包有不同的结构,你的容器pyfile和实际的testing类/函数,你将不得不创build一个疯狂复杂的正则expression式,以匹配每个阶段。
对于我来说,当我了解到这一点的时候,我select了一个普通的位,即我的包,容器和testing函数的前缀
setests ├── __init__.py ├── setest_area1.py └──── def setest_someblock(): ...
然后我的nose
指令就像
nose --testMatch="setest"
这然后筛选我期望它的工作方式。