如何为所有 unittest.TestCase 类 执行 tearDown 和 setUp 方法
How can I execute tearDown and setUp method for all unittest.TestCase classes
我有一个 class BaseTest,所有测试都是从它扩展的。
测试位于不同的模块和包中。
setUpClass 和 tearDownClass 方法在每个 unittest.TestCase class 之前执行。
我怎样才能只执行一次 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()
module2.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()
module3.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()
module4.py
class TestFive(BaseTest):
def test_five(self):
print("Test Five")
if __name__ == '__main__':
unittest.main()
我认为 unittest 没有用于通用设置和拆卸的工具。你应该看看pytest,它的fixtures更强大。
可能与 unittest
相关,请在此处复制 的答案
你可以通过定义 startTestRun
,stopTestRun
of unittest.TestResult
class.
来实现
通过将以下代码添加到我的 tests/__init__.py
我设法实现了它。此代码对所有测试仅运行一次(无论测试 classes 和测试文件的数量如何)。
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)
我有一个 class BaseTest,所有测试都是从它扩展的。 测试位于不同的模块和包中。 setUpClass 和 tearDownClass 方法在每个 unittest.TestCase class 之前执行。 我怎样才能只执行一次 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()
module2.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()
module3.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()
module4.py
class TestFive(BaseTest):
def test_five(self):
print("Test Five")
if __name__ == '__main__':
unittest.main()
我认为 unittest 没有用于通用设置和拆卸的工具。你应该看看pytest,它的fixtures更强大。
可能与 unittest
相关,请在此处复制 的答案
你可以通过定义 startTestRun
,stopTestRun
of unittest.TestResult
class.
通过将以下代码添加到我的 tests/__init__.py
我设法实现了它。此代码对所有测试仅运行一次(无论测试 classes 和测试文件的数量如何)。
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)