簡體   English   中英

如何使用覆蓋率運行單元測試測試 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%

要使示例正常運行,您只需將對unittest.main()的調用放在 try/except 語句中,以便在單元測試完成后調用cov.stop()

# testInput.py
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()

    try:
        unittest.main()
    except:  # catch-all except clause
        pass

    cov.stop()
    cov.save()

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

這將按需要運行,包括打印Done. 在最后:

python3 testInput.py 
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
Done.

HTML 覆蓋率報告將在當前工作目錄的htmlcov目錄中創建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM