60

Pythonのunittestdiscoverは私のテストを見つけられません!

私は自分のユニットテストを発見するために鼻を使ってきました、そしてそれはうまく働いています。プロジェクトのトップレベルから、実行すると次のnosetestsようになります。

Ran 31 tests in 0.390s

Python 2.7ユニットテストで検出されたので、使用してみました

python -m unittest discover

しかし、私は得る

Ran 0 tests in 0.000s

私のディレクトリ構造は次のとおりです。

myproj/
    reporter/
    __init__.py
    report.py
    [other app modules]
        tests/
        __init__.py
        test-report.py
        [other test modules]

unittestの検出アルゴリズムがテストを見つけられない理由について何か考えがありますか?

私はWindows7でPython2.7.1とnose1.0.0を使用しています。

4

3 に答える 3

62

動作は意図的なものですが、ドキュメントによってこれがより明確になる可能性があります。テスト検出セクションの最初の段落を見ると、次のようになっています。

プロジェクトのテストがテスト検出と互換性を持つためには、それらがすべてプロジェクトのトップレベルディレクトリからインポート可能である必要があります(つまり、すべてがPythonパッケージに含まれている必要があります)。

その当然の結果として、ファイル名も有効なPythonモジュール名である必要があります。は正当なPython識別子ではないためtest-report.py、そのテストに失敗します。test-report

これがパターンオプションのドキュメントで明示的に言及されていることを示唆するドキュメントのバグは、-pおそらく前進するための良い方法でしょう。

于 2011-02-23T10:58:08.303 に答える
19

プロジェクト内のいくつかのディレクトリが欠落していたため、この問題が発生しました__init__.py。Python3.7では必要ないと思いました。

すべてのディレクトリに追加__init__.pyするだけで、テストが自動的に見つかります。python3 -m unittest

于 2019-12-25T19:14:05.133 に答える
14

Pythonに比較的慣れていない人として、ドキュメントの命名規則は反対のことを暗示していました。ベンのコメントは非常に役に立ちました。デフォルトの検出パターンは、文字列「test」が前に付いたテストモジュールを検索します。

イントロスペクションはクラス名を探すだけで、特定のファイル命名規則は必要ないと思いました。

ドキュメントの内容は次のとおりです 。https ://docs.python.org/3/library/unittest.html python -m unittest Discover -s project_directory -p " _test.py"これを機能させることはできませんでしたが、ファイル名を「test_.py」に変更-成功!

于 2019-04-25T14:05:30.833 に答える