【问题标题】:How can I improve code coverage of Python3如何提高 Python3 的代码覆盖率
【发布时间】:2020-02-20 19:11:14
【问题描述】:

使用unittest 和 Coverage.py,

def add_one(num: int):
    num = num + 1
    return num
from unittest import TestCase

from add_one import add_one


class TestAddOne(TestCase):

    def test_add_one(self):
        self.assertEqual(add_one(0), 1)
        self.assertNotEqual(add_one(0), 2)

这是覆盖范围:

如何测试整个文件?

【问题讨论】:

    标签: python python-unittest coverage.py python-3.8


    【解决方案1】:

    假设您的测试文件名为test_one.py,在同一目录下运行此命令:

    coverage run  -m unittest test_one.py && coverage report
    

    结果应该类似于:

    .
    ----------------------------------------------------------------------
    Ran 1 test in 0.000s
    
    OK
    Name          Stmts   Miss  Cover
    ---------------------------------
    add_one.py        3      0   100%
    test_one.py       6      0   100%
    ---------------------------------
    TOTAL             9      0   100%
    
    

    【讨论】:

      【解决方案2】:

      您永远不会调用test_add_one 方法。

      注意函数定义是如何执行的,而不是函数体。要运行测试,请添加 __main__ 检查和 TestSuite/TextTestRunner (https://docs.python.org/3/library/unittest.html)

      from unittest import TestCase, TestSuite, TextTestRunner
      from add_one import add_one
      
      
      class TestAddOne(TestCase):
      
          def test_add_one(self):
              self.assertEqual(add_one(0), 1)
              self.assertNotEqual(add_one(0), 2)
      
      if __name__ == "__main__":
          suite = TestSuite()
          suite.addTest(TestAddOne("test_add_one"))
      
          TextTestRunner().run(suite)
      

      结果

      coverage run <file.py>
      coverage html
      # OR
      coverage report -m
      

      是否已测试所有行。

      【讨论】:

      • 您不再需要编写这些 TestSuite 节。只需使用“python -m unittest discover”
      • 那么您将无法运行coverage run 并运行测试。覆盖模块的入口点是__main__(尽管我可能遗漏了一个细节);通常你是完全正确的。
      猜你喜欢
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 2023-04-09
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 2019-04-08
      相关资源
      最近更新 更多