如何指示coverage.py省略顶级定义并仅计算方法的主体?

时间:2019-02-21 16:15:57

标签: python coverage.py

我想测试大型软件(特别是Odoo插件)中单个软件包的覆盖范围。我无法控制测试的总体设置。在加载模块之前,对Odoo进行黑客攻击以启动coverage收集是不值得的-在常规硬件上运行所有Odoo测试大约需要20分钟;所以我想选择性地测试一些自定义模块的覆盖范围。

我正在这样使用setUpModuletearDownModule

_coverage = Coverage(
    source=[
        'odoo.addons.xhg_autrement_prices.models',
    ],
    config_file=_join('.coveragerc'),
    auto_data=True,
    data_file=_join('.coverage'),
)


def setUpModule():
    _coverage.start()


def tearDownModule():
    from test.support import captured_stderr
    _coverage.stop()
    _coverage.save()
    with captured_stderr() as stderr:
        total = _coverage.report(skip_covered=True, file=sys.stderr)
    report = stderr.getvalue()
    fail_under = _coverage.get_option('report:fail_under')
    assert not fail_under or total >= fail_under, \
        f"Coverage not reached. total: {total}; expected: {fail_under}\n{report}"

但是,当测试设备调用setUpModule时,Odoo已经加载了被测模型模块。

因此,coverage.py将定义某些函数(或类)的行报告为未命中。例如,在以下类别中:

class SumAggregator(SimpleAggregator):
    '''Aggregate by sum.'''
    def __init__(self, start: Result = 0) -> None:
        self.start = start

    def __call__(self, results: Iterable[Result], env: Environment) -> Result:
        return sum(results, self.start)

报告了定义__call__方法的行未覆盖,但其内容被点击。报告缺少前三行(类定义,其文档字符串和 init 定义)。据报告所有文档字符串(约占源代码的10%)被遗漏了。

如何指示覆盖范围省略顶级定义并仅计算类或函数(方法)的主体?

0 个答案:

没有答案