Nose在Ubuntu中无法找到测试
有没有什么原因导致Nose在Ubuntu 9.04上找不到测试?
我在用nose 0.11.1和python 2.5.4。
我只能在明确指定文件名的情况下运行测试。
如果我不指定文件名,它就会显示0个测试。
同样的项目在我的Mac上可以正常运行测试,所以我真的很困惑!
7 个回答
65
这个问题很可能是因为你的文件命名不符合nose的测试匹配规则。根据nose的文档:
nose会自动从它工作目录中的Python源文件、目录和包中收集测试(默认的工作目录是当前目录)。任何符合testMatch正则表达式的Python源文件、目录或包(默认是: (?:^|[b_.-])[Tt]est)都会被收集为测试(或者作为测试的来源)。
这段话是我强调的。
一些符合条件的文件名示例:
- TestFoo.py
- Foo-Test.py
- Foo_Test.py
- Foo.Test.py(注意,这个文件会尝试导入Foo,如果导入失败会报错)
有一个名字看起来像是符合条件的,但实际上并不符合:
- FooTest.py
如果你只需重命名你的文件,就应该没问题了。
更新:我从你提供的细节中无法判断,但也许你的测试目录缺少
__init__.py
文件?
... 确保你的“tests”目录实际上是模块(它们有一个空的
__init__.py
文件)。
112
还有一件事让我对nose
感到困惑,那就是它不会在可执行文件中运行测试。我不太明白为什么在Mac和Ubuntu上会有这样的区别,但试试看也无妨。
确保这些脚本在Mac上没有被意外地设置为可执行文件(也就是没有被加上chmod +x
)。如果确实被设置了,可以用chmod -x $(find tests/ -name '*.py')
来修复它们。
11
有点相关,如果你是在一个文件夹里运行测试,比如:
nosetests ... tests/
这里的tests是存放你测试文件的文件夹名,而在某个.py模块里有不同的Python测试函数……你的函数名必须以'test'开头,这样nosetests才能识别出这是你想要运行的测试。
举个例子:
def test_something():
...
当你在这个文件夹里执行nosetests时,它会运行这个函数,而
def somethin_to_test():
...
则不会。