我正在编写应该与 python 2.7 和 3.3+ 一起运行的 python 代码
我正在尝试找出一种方法来正确检查 http 状态代码并且不降低我的测试覆盖率。
如果我写类似:
try:
import http.client as httpclient
except ImportError:
import urllib as httpclient
覆盖率永远不会是 100%
所以我的问题是:有没有更好的方法呢?
我正在编写应该与 python 2.7 和 3.3+ 一起运行的 python 代码
我正在尝试找出一种方法来正确检查 http 状态代码并且不降低我的测试覆盖率。
如果我写类似:
try:
import http.client as httpclient
except ImportError:
import urllib as httpclient
覆盖率永远不会是 100%
所以我的问题是:有没有更好的方法呢?
在针对多个 Python 版本时,您很少能达到 100% 的测试覆盖率。Python 2 解释器将遵循一条执行路径,Python 3 解释器将遵循另一条执行路径,两种解释器都不会命中每一行代码。最好的解决方案是按照 Martijn 提到的方式进行操作并使用# pragma: no cover
. 以下是我在我的一个项目中解决这个问题的方法:
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:
评论具有类似的目的。我从SatelliteQE/nailgunnailgun/entities.py
中提取了上面的代码。