Python 如果在测试中从未直接调用函数,是否可以生成pytest报告? 例子
现在,您可以通过以下方式获得100%的测试覆盖率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
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)