如果在测试中从不直接调用函数,是否可以生成pytest报告?

时间:2018-05-16 12:22:49

标签: python pytest test-coverage pytest-cov

实施例

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 :(得分:0)

首先,一般思路是单元测试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)

您可能正在寻找可与pytest https://coverage.readthedocs.io/en/coverage-4.5.1/一起使用的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