【发布时间】:2017-04-28 07:04:18
【问题描述】:
在我的项目中,我有一个 TestCase 子类(称为 BaseTest),它会做一些事情来准备然后重置测试环境,以及大量实际的测试用例子类(大约 80 个),每个子类都有自己独特的设置方法。
我希望每个单独的测试用例子类在它们的 setUp 方法结束时调用一个特定的钩子。我想在不改变每一种方法的情况下做到这一点。
基本上,情况大致类似于这个示例文件:
import unittest
class BaseTest(unittest.TestCase):
def setUp(self):
super().setUp()
print('prepping env')
def tearDown(self):
super().tearDown()
print('resetting env')
def post_setup_hook(self):
print('in post_setup_hook')
class TestFeatureA(BaseTest):
def setUp(self):
super().setUp()
print('prepping a')
def tearDown(self):
super().tearDown()
def test_0(self):
print('testing a0')
def test_1(self):
print('testing a1')
class TestFeatureB(BaseTest):
def setUp(self):
super().setUp()
print('prepping b')
def tearDown(self):
super().tearDown()
def test_0(self):
print('testing b0')
def test_1(self):
print('testing b1')
if __name__ == '__main__':
unittest.main()
我希望运行python -m unittest example 的结果在每次打印“准备 a”或“准备 b”后打印“在设置后挂钩中”,但不修改 TestFeatureA 或 TestFeatureB。这个可以吗?
请注意,我使用的是 python 3.6。我认为这不会在 python 2.x 中运行。
【问题讨论】:
-
为什么不能在
BaseTest.setUp中调用post_setup_hook?订单很重要? -
是的,关键是它必须在TestFeatureA.setUp之后调用,这就是为什么它被称为post_setup_hook而不是sometime_during_setup_hook。
-
Python标准库很好,但unittest不是,特别是对于一些严肃的事情,你绝对应该看看pytest -
你注意到我说我有 80 个测试班吗?他们中的大多数都有几个测试用例。其中一些测试用例非常复杂。我可以在不重写的情况下切换到 pytest 吗?
-
是的,AFAIK
pytest支持使用unittest编写的测试,并允许您逐步重写测试以使用夹具和其他很棒的东西
标签: python python-3.x unit-testing testing python-unittest