Можно ли сделать отчет о Pytest, если функция никогда не вызывается непосредственно в тесте? - PullRequest
0 голосов
/ 16 мая 2018

Пример

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 Ответ

0 голосов
/ 27 мая 2018

Прежде всего, просто общая линия мышления относится и к юнит-тесту 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

...