55

NoseがUbuntu9.04でテストを見つけられない理由はありますか?

私はPython2.5.4でnose0.11.1を使用しています。
ファイル名を明示的に指定した場合にのみ、テストを実行できます。ファイル名を指定しないと、0がテストされます。

同じプロジェクトが私のMacでテストを正常に実行するので、私はかなり困惑しています!

4

7 に答える 7

110

いつも私を悩ませているもう1つのことnoseは、実行可能ファイルでテストを実行しないことです。なぜそれがMac/Ubuntu全体で違いを生むのか正確にはわかりませんが、一見の価値があります。

スクリプトがMacでどういうわけか取得されていないことを確認してくださいchmod +x…そして、取得した場合は、で修正してchmod -x $(find tests/ -name '*.py')ください。

于 2009-10-16T18:57:16.703 に答える
63

この動作は、ファイルがnoseのテストマッチング動作に従って名前が付けられていないため、ほぼ確実です。鼻のドキュメントから:

noseは、作業ディレクトリ(デフォルトでは現在の作業ディレクトリ)にあるPythonソースファイル、ディレクトリ、およびパッケージからテストを自動的に収集します。testMatch正規表現(デフォルト:(?:^ | [b _.-])[Tt] est)に一致するPythonソースファイル、ディレクトリ、またはパッケージはすべて、テスト(またはテストコレクションのソース)として収集されます。

強調は私のものでした。

一致する名前の例:

  • TestFoo.py
  • Foo-Test.py
  • Foo_Test.py
  • Foo.Test.py(これはFooをインポートしようとし、できない場合は例外を発生させることに注意してください)

一致するように見えますが、実際には一致しない名前:

  • FooTest.py

ファイルの名前を変更するだけの場合は、問題ありません。


更新:あなたが投稿した詳細からはわかりませんでしたが、テストディレクトリに__init__.pyファイルがない可能性がありますか?

...「テスト」ディレクトリが実際にモジュールであることを確認してください(空の__init__.pyファイルがあります)。

于 2009-09-22T02:24:24.547 に答える
47

私も同じ問題を抱えていました。私のテストはWindowsでは問題なく実行されましたが、Ubuntuでは実行されませんでした。

Ubuntuで実行する場合:

nosetests -vv --collect-only

実行可能ファイルであるため、テストファイルをスキップしていることがわかります。_Tools/ LintControlFiles/test_HgLint.pyは実行可能ファイルです。スキップしました

実行可能ファイルを検討するために、次のように実行します。

nosetests --exe
于 2011-09-14T01:34:38.120 に答える
19

@ david-woleverが言ったように、Ubuntuでは実行できないことを確認できます。走る

nosetests -vv --collect-only 

調べたファイルの詳細を確認します。

于 2011-04-13T05:22:34.840 に答える
11

ディレクトリからテストを実行している場合、いくつかの関連性があります。

nosetests ... tests/

ここで、testsは私のテストを含むフォルダーの名前であり、.pyモジュールの1つに個別のPythonテスト関数があります...実行するテストとして認識するには、関数はnosetestsの「test」で始まる必要があります。

例えば:

 def test_something():
    ...

nosetestsは、このディレクトリで実行されると、この関数を実行します。

 def somethin_to_test():
    ...

しません。

于 2013-09-17T21:55:35.817 に答える
2

を使用する-all-modulesと、すべてのテストが見つかります。

nosetests --all-modules ./tests

于 2017-12-20T15:15:28.983 に答える
1

鼻のソース、特にselector.pyファイルを調べた後、何が起こっているかを見ると、

https://github.com/nose-devs/nose/blob/master/nose/selector.py#L129

が呼び出されたかどうかを確認するとwantFileself.matchesが呼び出されます。これは、として渡されたものである、regexに対して検索を実行します。matchtestMatch

この問題は、後で(そしてそのファイル全体で)チェックするときに発生します。

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"

これにより、期待どおりに機能するようにフィルタリングされます。

于 2017-01-12T19:51:22.237 に答える