Answer a question

Consider we have this function under test located in the module.py:

def f(a, b):
    return (a - b) if a > b else 1 / 0

And, we have the following test case in the 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)

If we run tests with pytest with the enabled "branch coverage" with the HTML output reporting:

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

The report is going to claim 100% branch coverage with all the "partial" branches covered:

enter image description here

But, we clearly have not covered the else 1 / 0 part at all.

Is there a way to improve reporting to see the non-covered parts of the ternary operators?

Answers

Branch coverage can only measure branching from one line to another, since Python's trace facility currently only supports per-line tracing. Python 3.7 introduces some bytecode-level tracing, but it would require significant work to make use of it.

https://github.com/nedbat/coveragepy/issues/509 is an issue about this.

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐