Nose在Ubuntu中无法找到测试

57 投票
7 回答
21324 浏览
提问于 2025-04-15 14:29

有没有什么原因导致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():
    ...

则不会。

撰写回答