Как правильно использовать 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 здесь потерпит неудачу.