Можно ли сделать отчет о Pytest, если функция никогда не вызывается непосредственно в тесте?
пример
def main(p):
if foo_a(p):
return False
return p**2
def foo_a(p):
return p % 11 == 0
Теперь вы можете получить 100% тестовое покрытие по
import unittest
from script import main
class Foobar(unittest.TestCase):
def test_main(self):
self.assertEquals(main(3), 9)
Но, возможно, один хотел foo_a
быть p % 2 == 0
вместо.
Вопрос
Покрытие ветвлений пролило бы свет на это, но я также хотел бы знать, если функция никогда не вызывалась "напрямую" тестом (таким как main
в примере), но только косвенно (например, foo_a
в примере).
Это возможно с pytest?
1 ответ
Прежде всего, просто общая линия мышления состоит в том, чтобы протестировать foo_a
также
import unittest
from script import main, foo_a
class Foobar(unittest.TestCase):
def test_main(self):
self.assertEquals(main(3), 9)
def test_foo_a(self):
self.assertEquals(foo_a(11), True)
Вы, вероятно, ищете https://coverage.readthedocs.io/en/coverage-4.5.1/ который можно использовать с pytest https://pypi.org/project/pytest-cov/, этот инструмент может показать вам точно какие строки кода были вызваны во время тестирования
Но я думаю, что есть другой способ проверить вашу проблему, это называется мутационным тестированием, вот несколько библиотек, которые могут помочь вам в этом.
https://github.com/sixty-north/cosmic-ray
https://github.com/mutpy/mutpy
А также посмотрите на библиотеки тестирования на основе свойств, такие как https://github.com/HypothesisWorks/hypothesis/tree/master/hypothesis-python