ale*_*cxe 10 python testing code-coverage coverage.py pytest
考虑我们有这个被测函数位于module.py:
def f(a, b):
return (a - b) if a > b else 1 / 0
Run Code Online (Sandbox Code Playgroud)
并且,我们有以下测试用例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)
Run Code Online (Sandbox Code Playgroud)
如果我们pytest使用启用的“分支覆盖”和 HTML 输出报告运行测试:
pytest test_module.py --cov=. --cov-branch --cov-report html
Run Code Online (Sandbox Code Playgroud)
该报告将声称 100% 的分支覆盖率涵盖所有“部分”分支:
但是,我们显然根本没有涵盖该else 1 / 0部分。
有没有办法改进报告以查看三元运算符未涵盖的部分?
Ned*_*der 10
分支覆盖率只能测量从一行到另一行的分支,因为 Python 的跟踪工具目前仅支持每行跟踪。Python 3.7 引入了一些字节码级别的跟踪,但需要大量工作才能使用它。
https://github.com/nedbat/coveragepy/issues/509是一个关于此的问题。