Я только что начал использовать модуль Coverage.py и решил сделать простой тест, чтобы проверить, как он работает.Как правильно использовать cover.py в Python?
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
файл и снова побежал Покрытие:
Затем я добавил этот блок кода:
if __name__ == "__main__":
print(sum(2, 4))
print(sum_only_positive(2, 4))
print(sum_only_positive(-1, 3))
и удалены все тестовые функции. После этого, Coverage.py показывает 100%:
Почему это так? Не следует ли Coverage.py показывать покрытие кода, а не только покрытие выполнения? Я прочитал официальный номер F.A.Q. для Coverage.py, но не могу найти решение.
Поскольку многие пользователи SO знакомы с тестированием кода и охватом кода, я надеюсь, вы можете мне сказать, где я ошибаюсь.
У меня есть только одна мысль здесь: Coverage.py может просто наблюдать, какие строки кода не выполняются, поэтому я должен написать тесты для этих строк. Но есть строки, которые уже выполняются, но не покрываются тестами, поэтому Coverage.py не работает.
Как вы ссылаетесь на покрытие/pytest? –
@Rogalski pytest: 'python -m py.test test.py' и покрытие:' python -m cover run sample.py' (в Windows) – Groosha