鼻子无法在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执行regexsearch,这就是您将作为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"

这然后筛选我期望它的工作方式。