Подтвердить что ты не робот

Учитывает ли cover.py функции и определения классов?

Я пытаюсь получить 100% -ый охват базового модуля python. Я использую модуль Ned Batchelder coverage.py для тестирования.

1 class account(object):
2   def __init__(self, initial_balance=0):
3     self.balance = initial_balance
4   def add_one(self):
5    self.balance = self.balance + 1

Это тесты.

class TestAccount(unittest.TestCase):
  def test_create_edit_account(self):
    a = account1.account()
    a.add_one()

Вот что я получил в отчете о покрытии.

    COVERAGE REPORT =
    Name                    Stmts   Miss  Cover   Missing
   -----------------------------------------------------
   __init__                    1      1     0%   1
   account1                    5      3    40%   1-2, 4
   account2                    7      7     0%   1-7

Как мы видим, строки 1-2 и 4 не покрываются, которые являются дефектами. Остальные строки выполняются.

4b9b3361

Ответ 1

Я думаю, что ваша проблема описана в FAQ:

В: Почему тела функций (или классов) отображаются как выполненные, но линии def не?

Это происходит потому, что покрытие запускается после того, как функции определены. Строки определения выполняются без покрытия измерение, затем начинается освещение, затем вызывается функция. Это означает, что тело измеряется, но определение функции сам не является.

Чтобы исправить это, начните покрытие раньше. Если вы используете командную строку для запустите свою программу с охватом, тогда вся ваша программа будет мониторинг. Если вы используете API, вам нужно позвонить в службу покрытия .start() перед импортом модулей, которые определяют ваши функции.

Ответ 2

После ответа jcollado:

У меня есть эта проблема с носом Django, который охватывает только те строки, которые используются в тестах.

Для исправления я запускаю сначала manage.py с охватом и после запуска тестов. .coverage файл будет содержать оба отчета.

Моя первая команда пользовательская, которая печатает настройки моего проекта. Пример:

coverage run ./manage.py settings && ./manage.py test myapp