如何 运行 使用覆盖率 API 进行单元测试

How to run unittest tests using coverage API

我正在尝试使用 coverage-API (https://coverage.readthedocs.io/en/6.3.2/api.html#api).

生成覆盖率报告

链接页面上描述的简单用例告诉我将执行的代码包装在他们提供的代码片段中。我正在使用 unittest.main() 来执行测试。下面的代码运行没有错误,但既没有创建任何报告信息,也没有执行 print("Done.")

我猜 unittest.main() 在途中某处调用了 sys.exit()?如何使用 API 执行所有单元测试?

例子

import coverage
import unittest


def func(input):
    return input


class testInput(unittest.TestCase):
    def test_func(self):
        self.assertEqual(func(1), 1)

    
if __name__ == '__main__':
    cov = coverage.Coverage()
    cov.start()

    unittest.main()

    cov.stop()
    cov.save()

    cov.html_report()
    print("Done.")

是的,看起来 unittest.main() 正在调用 sys.exit()。您确定要使用覆盖率 API 吗?您可以跳过覆盖范围和大部分单元测试:

# foo.py
import unittest


def func(input):
    return input


class testInput(unittest.TestCase):
    def test_func(self):
        self.assertEqual(func(1), 1)

然后:

$ python -m coverage run -m unittest foo.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

$ python -m coverage report -m
Name     Stmts   Miss  Cover   Missing
--------------------------------------
foo.py       6      0   100%
--------------------------------------
TOTAL        6      0   100%