web-dev-qa-db-ja.com

`python -m unittest discover`はテストを検出しません

Pythonのunittest discoverでテストが見つかりません!

私は自分の単体テストを検出するために鼻を使用しており、それは正常に動作しています。プロジェクトのトップレベルから、nosetestsを実行すると、次のようになります。

Ran 31 tests in 0.390s

今Python 2.7 unittest 発見あり 、私は使ってみました

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の検出アルゴリズムがテストを見つけられない理由はありますか?

Windows 7でPython 2.7.1およびnose 1.0.0を使用しています。

43
blokeley

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

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

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

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

51
ncoghlan

Pythonを比較的初めて使う人として、ドキュメントの命名規則は反対を意味しました。ベンのコメントは非常に役に立ちました。デフォルトの検出パターンは、文字列「test」で始まるテストモジュールを探します。

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

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

6
Bill K

プロジェクトの一部のディレクトリに__init__.pyがないため、この問題が発生しました。 Python 3.7。

__init__.pyeveryディレクトリに追加するだけで、python3 -m unittestはテストを自動的に検索します。

3
Max Malysh