[英]Use different implementations of `setUp` and `tearDown` of unittest.TestCase instances
[英]How can I execute tearDown and setUp method for all unittest.TestCase classes
我有一個 BaseTest 類,所有測試都是從它擴展而來的。 測試位於不同的模塊和包中。 setUpClass 和 tearDownClass 方法在每個 unittest.TestCase 類之前執行。 如何只執行一次 setUp 和 tearDown。 在所有測試之前和之后。
這是代碼示例:
import unittest
class BaseTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setUpClass")
@classmethod
def tearDownClass(cls):
print("tearDownClass")
if __name__ == '__main__':
unittest.main()
模塊2.py:
class TestOne(BaseTest):
def test_one(self):
print("Test One")
class TestTwo(BaseTest):
def test_two(self):
print("Test Two")
if __name__ == '__main__':
unittest.main()
模塊3.py
class TestThree(BaseTest):
def test_three(self):
print("Test Three")
class TestFour(BaseTest):
def test_four(self):
print("Test Four")
if __name__ == '__main__':
unittest.main()
模塊4.py
class TestFive(BaseTest):
def test_five(self):
print("Test Five")
if __name__ == '__main__':
unittest.main()
它可能與unittest
從https://stackoverflow.com/a/64892396/2679740這里復制答案
您可以通過定義unittest.TestResult
類的startTestRun
、 stopTestRun
來實現。
通過將以下代碼添加到我的tests/__init__.py
我設法實現了它。 此代碼僅對所有測試運行一次(無論測試類和測試文件的數量如何)。
def startTestRun(self):
"""
https://docs.python.org/3/library/unittest.html#unittest.TestResult.startTestRun
Called once before any tests are executed.
:return:
"""
DockerCompose().start()
setattr(unittest.TestResult, 'startTestRun', startTestRun)
def stopTestRun(self):
"""
https://docs.python.org/3/library/unittest.html#unittest.TestResult.stopTestRun
Called once after all tests are executed.
:return:
"""
DockerCompose().compose.stop()
setattr(unittest.TestResult, 'stopTestRun', stopTestRun)
我認為 unittest 沒有通用設置和拆卸工具。 你應該看看 pytest,它的裝置更強大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.