Как правильно использовать cover.py в Python?

Я только начал использоватьCoverage.py Модуль и так решил сделать простой тест, чтобы проверить, как он работает.

Sample.py

def sum(num1, num2):
    return num1 + num2


def sum_only_positive(num1, num2):
    if num1 > 0 and num2 > 0:
        return num1 + num2
    else:
        return None

test.py

from sample import sum, sum_only_positive

def test_sum():
    assert sum(5, 5) == 10

def test_sum_positive_ok():
    assert sum_only_positive(2, 2) == 4

def test_sum_positive_fail():
    assert sum_only_positive(-1, 2) is None

Как видите, весь мой код покрыт тестами, а py.test говорит, что все они пройдены. Я ожидаю, что Coverage.py покажет 100% охват. Ну нет.

Ну, Coverage.py может не видеть файл test.py, поэтому я скопировал тестовые функции вsample.py файл и снова запустил Coverage:

Затем я добавил этот блок кода:

if __name__ == "__main__":
    print(sum(2, 4))
    print(sum_only_positive(2, 4))
    print(sum_only_positive(-1, 3))

и удалил все тестовые функции. После этого Coverage.py показывает 100%:

Почему это так? Разве Coverage.py не должен показывать покрытие теста кода, а не только покрытие выполнения? Я прочитал официальныйЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ. для Coverage.py, но не могу найти решение.
Так как многие пользователи SO знакомы с тестированием кода и покрытием кода, я надеюсь, что вы можете сказать мне, где я ошибаюсь.

У меня есть только одна мысль: Coverage.py может просто наблюдать, какие строки кода не выполняются, поэтому я должен написать тесты для этих строк. Но есть строки, которые уже выполнены, но не покрыты тестами, поэтому Coverage.py здесь потерпит неудачу.

Ответы на вопрос(2)

Ваш ответ на вопрос