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

Python 如果在测试中从未直接调用函数,是否可以生成pytest报告? 例子,python,pytest,test-coverage,pytest-cov,Python,Pytest,Test Coverage,Pytest Cov,现在,您可以通过以下方式获得100%的测试覆盖率 import unittest from script import main class Foobar(unittest.TestCase): def test_main(self): self.assertEquals(main(3), 9) 但是,也许有人希望fooa变成p%2==0 问题 分支覆盖率可以解释这一点,但我还想知道函数是否从未被测试“直接”调用(例如示例中的main),而只是间接调用(例如示例中的f

现在,您可以通过以下方式获得100%的测试覆盖率

import unittest
from script import main

class Foobar(unittest.TestCase):
    def test_main(self):
        self.assertEquals(main(3), 9)
但是,也许有人希望
fooa
变成
p%2==0

问题 分支覆盖率可以解释这一点,但我还想知道函数是否从未被测试“直接”调用(例如示例中的
main
),而只是间接调用(例如示例中的
foo_a


pytest是否可以实现这一点?

首先,一般的思路是对
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一起使用,这个工具可以准确地显示在测试期间调用了哪些代码行

但我认为还有另一种方法可以检查你的问题,那就是变异测试,这里有一些库可以帮助你解决这个问题


还可以查看基于属性的测试库,如“但是可能有人希望foo_a为p%2==0”的目的是什么?我想说的是,尽管函数foo_a具有100%的行和分支覆盖率,但它实际上没有经过测试。代码已覆盖,但未检查值。
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)