tox
、py.test
、coverage
、およびpytest-cov
で奇妙な問題が発生しています。py.test
オプションを指定して--cov
を起動するとtox
から、tests
フォルダーに__init__.py
ファイルが必要なようですが、すぐにはわかりません。
この記事を書いている間、私は前述のtests/__init__.py
を追加することで最初の問題を解決しましたが、今のところ正確に機能する理由と機能しない理由を完全には理解していないので、私はまだ求めています助けて。詳しくは下記をご覧ください。
SOで関連する質問を見つけましたが、答えがこれまでに理解したものと反対であるように見えるため、混乱を招くだけです: `py.test `および` __init __。py`ファイル
こちらの公式ドキュメントも参照してください: py.test-Good Integration Practices (ページの一番下)。
簡素化されたプロジェクト構造:
setup.py
tox.ini
.coveragerc
project/
__init__.py
module1.py
module2.py
tests/
__init__.py (optional, an empty file)
test_module1.py
test_module2.py
tox.ini
の関連部分:
[testenv:check]
commands = py.test --cov=project --cov-report=term
deps =
pytest
coverage
pytest-cov
[pytest]
python_files = test_*.py
norecursedirs = .tox
.coveragerc
の関連部分:
[run]
branch = True
omit = project/tests/*
今、結果:
py.test --cov=project --cov-report=term
プロジェクトルートから実行=> tests/__init__.py
ファイルが存在するかどうかに関係なく正しいカバレッジ。tox -e check
without tests/__init__.py
=>テストが検出されて実行されますが、「Coverage.py警告:データが収集されませんでした」という警告が表示されます。カバレッジはすべてのモジュールで0%ですtox -e check
with tests/__init__.py
=>カバレッジを再度修正します。tox
を実行するためにtests/__init__.py
ファイルが存在する必要がある理由(この空のファイルを追加すると最初の問題が解決した)はすぐにはわかりませんが、テストをいつ実行するかは問題ではありません/手動でカバレッジ。何か案は?
使用する --cov {envsitepackagesdir}/<your-package-name>
tox.iniで。
参照: カバレッジでpy.testを使用すると、インポートは含まれません
pytest-cov
の使用をやめ、代わりにcoverage
を完全に実行しました。
また、pytest
で気づきましたが、正しく機能するには、テストディレクトリに空白の__init__.py
が必要でした。おそらくどこかに理由があります。
これは数年前のことですが、誰かがこれに遭遇した場合に備えて。