web-dev-qa-db-ja.com

py.testはCoverage.py警告を出します:モジュールsample.pyは決してインポートされませんでした

このスレッドからサンプルコードを実行しました。 Pythonでcoverage.pyを適切に使用する方法

ただし、このコマンドを実行するとpy.test test.py --cov=sample.py警告が表示されたため、レポートは作成されませんでした。

platform linux2 -- Python 2.7.12, pytest-3.2.3, py-1.4.34, pluggy-0.4.0
rootdir: /media/sf_Virtual_Drive/ASU/CSE565_testand 
validation/Assignments/temp, inifile:
plugins: cov-2.5.1
collected 3 items                                                                                                                                                                                                                      

test.py ...Coverage.py warning: Module sample.py was never imported. (module-not-imported)
Coverage.py warning: No data was collected. (no-data-collected)

誰もがなぜcoverage.py 動作しません?

したがって、coverage run -m py.test test.py別に、警告は表示されません。

16
pypabot

短い答え:ファイル名ではなく、モジュール名で実行する必要があります:pytest --cov sample test.py

あなたがリンクした回答の1つのコメント( Pythonでcoverage.pyを適切に使用する方法? )は、カバレッジを取得しようとしているファイルがインポートされたモジュールである場合、これが機能しないように見えることを説明していますテストによって。私はそれを再現することができました:

./ sample.py

def add(*args):
    return sum(args)

./ test.py

from sample import add

def test_add():
    assert add(1, 2) == 3

そして私は同じエラーを受け取ります:

$ pytest --cov sample.py test.py
========================================================================================== test session starts ===========================================================================================
platform darwin -- Python 3.7.2, pytest-4.3.1, py-1.8.0, pluggy-0.9.0
rootdir: /path/to/directory, inifile:
plugins: cov-2.6.1
collected 1 item

test.py .                                                                                                                                                                                          [100%]Coverage.py warning: Module sample.py was never imported. (module-not-imported)
Coverage.py warning: No data was collected. (no-data-collected)
/path/to/directory/.venv/lib/python3.7/site-packages/pytest_cov/plugin.py:229: PytestWarning: Failed to generate report: No data to report.

  self.cov_controller.finish()
WARNING: Failed to generate report: No data to report.

ただし、代わりにモジュール名を使用する場合:

pytest --cov sample test.py
========================================================================================== test session starts ===========================================================================================
platform darwin -- Python 3.7.2, pytest-4.3.1, py-1.8.0, pluggy-0.9.0
rootdir: /path/to/directory, inifile:
plugins: cov-2.6.1
collected 1 item

test.py .                                                                                                                                                                                          [100%]

---------- coverage: platform darwin, python 3.7.2-final-0 -----------
Name        Stmts   Miss  Cover
-------------------------------
sample.py       2      0   100%

pytest-cov のドキュメントは、PATHを使用できることを示しているようですが、すべてのケースで機能するとは限りません...