Python 的单元测试是否具有针对整个测试套件的全局设置?
Does Python's unittest have a global setUp for an entire TestSuite?
我对 Python 的 unittest
库有点陌生,我目前正在考虑在 运行 我的任何集成测试之前设置我的 Flask 服务器。我知道 unittest.TestCase class 允许您在 class 中的每个测试用例之前使用 setUp()
。我也知道同一个 class 有另一个名为 setUpClass()
的方法,它在整个 class.
中只运行一次
我真正感兴趣的是试图弄清楚如何做类似 setUpClass()
的事情,但要在整个 unittest.TestSuite 上完成。但是,我运气不好。
当然,我可以为每个 TestCase 设置服务器,但我想避免这样做。
在一个单独的问题上有一个 ,它建议通过覆盖 unittest.TestResult 的 startTestRun()
,您可以拥有一个覆盖整个测试套件的设置函数。但是,我尝试将自定义 TestResult 对象传递到单元测试中。 TextTestRunner 没有成功。
那么,我究竟应该如何为整个测试套件进行设置?
这没有很好的记录,但我最近也需要这样做。
docs mention that TestResult.startTestRun
是“在执行任何测试之前调用一次。”
如您所见,在 the implementation 中,该方法不执行任何操作。
我试过 subclassing TestResult
和各种东西。我无法完成任何工作,所以我最终只猴子修补 class.
在我的测试包的 __init__.py
中,我做了以下操作:
import unittest
OLD_TEST_RUN = unittest.result.TestResult.startTestRun
def startTestRun(self):
# whatever custom code you want to run exactly once before
# any of your tests runs goes here:
...
# just in case future versions do something in this method
# we'll call the existing method
OLD_TEST_RUN(self)
unittest.result.TestResult.startTestRun = startTestRun
如果您需要在所有测试 运行.
之后 运行 清理代码,还有一个 stopTestRun
方法
请注意,这并不是 TestResult
的单独版本。 unittest
模块照常使用现有的。我们所做的唯一一件事就是对 startTestRun
的自定义实现进行手术移植
我对 Python 的 unittest
库有点陌生,我目前正在考虑在 运行 我的任何集成测试之前设置我的 Flask 服务器。我知道 unittest.TestCase class 允许您在 class 中的每个测试用例之前使用 setUp()
。我也知道同一个 class 有另一个名为 setUpClass()
的方法,它在整个 class.
我真正感兴趣的是试图弄清楚如何做类似 setUpClass()
的事情,但要在整个 unittest.TestSuite 上完成。但是,我运气不好。
当然,我可以为每个 TestCase 设置服务器,但我想避免这样做。
在一个单独的问题上有一个 startTestRun()
,您可以拥有一个覆盖整个测试套件的设置函数。但是,我尝试将自定义 TestResult 对象传递到单元测试中。 TextTestRunner 没有成功。
那么,我究竟应该如何为整个测试套件进行设置?
这没有很好的记录,但我最近也需要这样做。
docs mention that TestResult.startTestRun
是“在执行任何测试之前调用一次。”
如您所见,在 the implementation 中,该方法不执行任何操作。
我试过 subclassing TestResult
和各种东西。我无法完成任何工作,所以我最终只猴子修补 class.
在我的测试包的 __init__.py
中,我做了以下操作:
import unittest
OLD_TEST_RUN = unittest.result.TestResult.startTestRun
def startTestRun(self):
# whatever custom code you want to run exactly once before
# any of your tests runs goes here:
...
# just in case future versions do something in this method
# we'll call the existing method
OLD_TEST_RUN(self)
unittest.result.TestResult.startTestRun = startTestRun
如果您需要在所有测试 运行.
之后 运行 清理代码,还有一个stopTestRun
方法
请注意,这并不是 TestResult
的单独版本。 unittest
模块照常使用现有的。我们所做的唯一一件事就是对 startTestRun