代码覆盖和三元运算符

时间:2017-12-24 04:56:09

标签: python testing code-coverage pytest coverage.py

请考虑我们在module.py

中测试此功能
def f(a, b):
    return (a - b) if a > b else 1 / 0

而且,我们在test_module.py中有以下测试用例:

from unittest import TestCase

from module import f


class ModuleTestCase(TestCase):
    def test_a_greater_than_b(self):
        self.assertEqual(f(10, 5), 5)

如果我们使用pytest启用带有"分支覆盖范围的测试"使用HTML输出报告:

pytest test_module.py --cov=. --cov-branch --cov-report html

该报告将要求所有"部分" 100%的分支覆盖率。分支机构

enter image description here

但是,我们显然根本没有涵盖else 1 / 0部分。

有没有办法改进报告以查看三元运算符的未覆盖部分?

1 个答案:

答案 0 :(得分:4)

分支覆盖只能测量从一行到另一行的分支,因为Python的跟踪工具目前仅支持每行跟踪。 Python 3.7引入了一些字节码级别的跟踪,但要使用它需要大量的工作。

https://bitbucket.org/ned/coveragepy/issues/606/variable-assignment-with-an-if-else是一个封闭的问题。