0

Python 2.7 と 3.3+ の両方で実行する必要がある Python コードを書いています。

http ステータス コードを適切にチェックし、テスト カバレッジ % を減らさないようにする方法を見つけようとしています。

次のようなものを書くと:

try:
    import http.client as httpclient
except ImportError:
    import urllib as httpclient

カバレッジが 100% になることはありません

だから私の質問は:それを行うためのより良い方法はありますか?

4

1 に答える 1

0

複数のバージョンの 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から取得しました。

于 2015-06-15T14:07:25.887 に答える