我想测试一个软件包在大量软件(特别是Odoo插件)中的覆盖率。我无法控制测试的整体设置。在加载模块之前对Odoo进行黑客攻击以启动覆盖率收集是不值得的——在常规硬件上运行所有Odoo测试大约需要20分钟;因此我想有选择地测试一些定制模块的覆盖率。你知道吗
我是这样使用setUpModule
和tearDownModule
:
_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加载。你知道吗
所以,覆盖率.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__
方法的行没有被报道,但是它的主体是命中的。前3行(类定义、其docstring和init定义)报告丢失。值得注意的是,所有docstring(约占源代码的10%)都报告丢失。你知道吗
如何指示coverage忽略顶级定义而只计算类或函数(方法)的主体?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐