[英]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.