Measure.py измеряет определения функций и классов? - PullRequest
17 голосов
/ 26 декабря 2011

Я пытаюсь достичь 100% покрытия базового модуля python. Я использую модуль Ned Batchelder cover.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 не охватываются, что является определениями. Остальные строки выполнены.

Ответы [ 2 ]

19 голосов
/ 26 декабря 2011

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

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

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

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

5 голосов
/ 31 января 2015

После ответа Джколладо:

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

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

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

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