考虑我们在 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)
如果我们使用带有HTML输出报告的启用"branch coverage"的 pytest
运行测试:
pytest test_module.py --cov=. --cov-branch --cov-report html
该报告将覆盖所有"partial"分支机构的100%分支机构覆盖率:
但是,我们显然根本没有涵盖 else 1 / 0
部分 .
有没有办法改进报告,以查看三元运算符的未覆盖部分?
1 回答
分支覆盖只能测量从一行到另一行的分支,因为Python的跟踪工具目前仅支持每行跟踪 . Python 3.7引入了一些字节码级跟踪,但要使用它需要大量工作 .
https://bitbucket.org/ned/coveragepy/issues/606/variable-assignment-with-an-if-else是一个关于此问题的封闭式问题 .