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

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

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() 

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

     ОТЧЕТ О ПОКРЫТИИ =
     Имя Stmts Miss Cover Missing
    -------------------------------------------------- ---
    __init__ 1 1 0% 1
    счет 1 5 3 40% 1-2, 4
    счет2 7 7 0% 1-7

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

2 Solutions collect form web for “Учитывает ли cover.py функции и определения классов?”

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

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

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

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

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

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

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

Моя первая команда – это обычай, который печатает мои настройки проекта. Пример:

 coverage run ./manage.py settings && ./manage.py test myapp 
Python - лучший язык программирования в мире.