Как дать команду range.py пропустить определения верхнего уровня и считать только тела метода? - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу протестировать покрытие одного пакета в большом объеме программного обеспечения (в частности, надстройка 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% исходного кода), как сообщается, пропущены.

Как можно указать покрытию, чтобы опустить определения верхнего уровня и считать только тела классов или функций(методы)?

...