如何对分支 python 版本有 100% 的覆盖率?
Posted
技术标签:
【中文标题】如何对分支 python 版本有 100% 的覆盖率?【英文标题】:How to have 100% coverage on branching python versions? 【发布时间】:2019-03-21 10:07:57 【问题描述】:在我从 Python 2 移植到 Python 3 的一些代码中,但仍然需要在两者上运行,我有类似的东西:
if six.PY2:
_text = widget.get_text().strip().decode('utf-8')
else:
_text = widget.get_text().strip()
因为 GTK-3 widget.get_text()
在 Python 2 中返回字节,在 Python 3 中返回 unicode。这是一个 PITA,因为我将 _text
传递给的方法需要 unicode。因此,在 Python 2 中,我必须解码我得到的任何数据。
我有模拟 widget.get_text
的单元测试,但很明显,这些单元测试运行在一个且只有一个版本的 Python 下。我可以在 Python 2 分支中添加 pragma: no test
,但这感觉像是作弊。
所以,问题:
如何在没有编译指示的情况下使用上述获得 100% 的测试覆盖率。。 如何重构此代码以使我完全没有分支?【问题讨论】:
【参考方案1】:为什么不在两个版本下测量覆盖率,然后结合数据并在结合结果中寻找 100%?
例如:
$ python2 -m coverage run --parallel run_the_tests.py
$ python3 -m coverage run --parallel run_the_tests.py
$ python3 -m coverage combine
$ python3 -m coverage html
【讨论】:
那是……不知道你能做到这一点!您能否向我指出有关如何执行此操作的文档?谢谢。以上是关于如何对分支 python 版本有 100% 的覆盖率?的主要内容,如果未能解决你的问题,请参考以下文章
在 JEST + ENZYME 中无法达到 100% 的分支覆盖率