複数のバージョンの Python を対象とする場合、100% のテスト カバレッジを達成できることはめったにありません。Python 2 インタープリターは 1 つの実行パスをたどり、Python 3 インタープリターは別の実行パスをたどり、どちらのインタープリターもコードのすべての行をヒットしません。最善の解決策は、Martijn が言及して使用するようにすること# pragma: no cover
です。私のプロジェクトの1つでこの問題を解決した方法は次のとおりです。
from sys import version_info
if version_info.major == 2: # pragma: no cover
from httplib import ACCEPTED, NO_CONTENT # pylint:disable=import-error
else: # pragma: no cover
from http.client import ACCEPTED, NO_CONTENT # pylint:disable=import-error
上記のソリューションは、カバレッジ、flake8、および pylint を満たします。
- 各条件の最後にコメントを配置する
# pragma: no cover
と、カバレッジがその行または次のブロック内の何かをカウントできなくなります。
- コメントは同様の
# pylint:
目的を果たします。
- 各コメントの前に 2 つのスペースを配置すると、flake8 スタイル チェッカーが快適になります。
上記のコードはSatelliteQE/nailgunnailgun/entities.py
から取得しました。