NoseがUbuntu 9.04でテストを見つけられない理由はありますか?
python 2.5.4で鼻0.11.1を使用しています。
ファイル名を明示的に指定した場合にのみ、テストを実行できます。ファイル名を指定しない場合はテストと表示されます。
同じプロジェクトは私のMacでテストをうまく実行するので、私はかなり困惑しています!
ディレクトリからテストを実行している場合、つまり、
nosetests ... tests/
ここで、testsは私のテストを含むフォルダーの名前であり、別々のpython test関数を.pyモジュールの1つに含めます... nosetestsが認識できるように、関数は 'test'で始まる必要があります。あなたが実行したいテストとしてそれ。
例えば:
def test_something():
...
nosetestsは、このディレクトリで実行されると、この関数を実行します。
def somethin_to_test():
...
しません。
alwaysがnose
を使用して取得するもう1つのことは、実行可能ファイルでテストを実行しないことです。それがMac/Ubuntu全体で違いを生む理由は正確にはわかりませんが、一見の価値はあります。
Macでスクリプトが何らかの理由で_chmod +x
_を取得していないことを確認してください。取得されている場合は、chmod -x $(find tests/ -name '*.py')
で修正してください。
同じ問題がありました。私のテストはWindowsでは問題なく実行されましたが、Ubuntuでは実行されませんでした。
Ubuntuで実行する場合:
nosetests -vv --collect-only
実行可能ファイルであるため、テストファイルをスキップしていることがわかります:_Tools/LintControlFiles/test_HgLint.py is executable; skipped
鼻を実行可能ファイルと見なすには、次のように実行します。
nosetests --exe
@ david-woleverが言ったように、それらはcannotがUbuntuで実行可能であることを確認できます。走る
nosetests -vv --collect-only
検査されたファイルの詳細を確認します。
使用 -all-modules
そしてすべてのテストを見つけます。
nosetests --all-modules ./tests
ノーズのソース、具体的にはselector.pyファイルを調べた後、何が起こっているのかを確認すると、
https://github.com/nose-devs/nose/blob/master/nose/selector.py#L129
wantFile
かどうかを確認する場合、_self.matches
_が呼び出され、regex
に対してmatch
検索が実行されます。これは、testMatch
として渡したものです。
この問題は、後で(そして、そのファイル全体を)確認すると発生します。
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"
_
これにより、期待どおりに機能します。