代码覆盖率和三元运算符
Code Coverage and Ternary Operators
考虑到我们在 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
进行测试并启用 "branch coverage" 并使用 HTML 输出报告:
pytest test_module.py --cov=. --cov-branch --cov-report html
该报告将要求 100% 的分支覆盖率,涵盖所有 "partial" 个分支:
但是,我们显然根本没有涵盖 else 1 / 0
部分。
有没有办法改进报告以查看三元运算符的未涵盖部分?
分支覆盖率只能测量从一行到另一行的分支,因为 Python 的跟踪工具目前仅支持逐行跟踪。 Python 3.7 引入了一些字节码级别的跟踪,但要使用它需要大量工作。
考虑到我们在 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
进行测试并启用 "branch coverage" 并使用 HTML 输出报告:
pytest test_module.py --cov=. --cov-branch --cov-report html
该报告将要求 100% 的分支覆盖率,涵盖所有 "partial" 个分支:
但是,我们显然根本没有涵盖 else 1 / 0
部分。
有没有办法改进报告以查看三元运算符的未涵盖部分?
分支覆盖率只能测量从一行到另一行的分支,因为 Python 的跟踪工具目前仅支持逐行跟踪。 Python 3.7 引入了一些字节码级别的跟踪,但要使用它需要大量工作。