如何对分支 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% 的分支覆盖率

代码覆盖率/分支覆盖率推荐值

jacoco 分支覆盖和声纳条件覆盖有啥区别?

如何使用 Git 分支支持覆盖 TeamCity 7.1 中的 <default> 分支名称?

如何对支持不同依赖版本的多个发布分支进行版本控制?

如何将一个远程分支覆盖而不是合并到另一个分支?