簡體   English   中英

如何為所有 unittest.TestCase 類執行 tearDown 和 setUp 方法

[英]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()

它可能與unittesthttps://stackoverflow.com/a/64892396/2679740這里復制答案

您可以通過定義unittest.TestResult類的startTestRunstopTestRun來實現。

通過將以下代碼添加到我的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.

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