Я хочу протестировать покрытие одного пакета в большом объеме программного обеспечения (в частности, надстройка 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.
Итак, cover.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 строки (определение класса, его строка документации и определение init ) пропущены.Заметно все строки документации (которые составляют около 10% исходного кода), как сообщается, пропущены.
Как можно указать покрытию, чтобы опустить определения верхнего уровня и считать только тела классов или функций(методы)?