Python的unittest是否为整个TestSuite提供了全局设置?

2024-04-27 04:21:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python的unittest库有点陌生,目前正在考虑在运行任何集成测试之前设置Flask服务器。我知道unittest.TestCase类允许您在类中的每个测试用例之前使用setUp()。我还知道,同一个类有另一个名为setUpClass()的方法,它只对整个类运行一次

我真正感兴趣的是试图找出如何在整个unittest.TestSuite上完成类似于setUpClass()的操作。然而,我在这方面没有运气

当然,我可以为每个测试用例设置服务器,但我希望避免这样做

在一个单独的问题上有一个answer,它表明通过重写unittest.TestResult的startTestRun(),您可以拥有一个覆盖整个测试套件的设置函数。但是,我尝试将自定义TestResult对象传递到unittest中。TextTestRunner没有成功

那么,我怎样才能为整个测试套件进行设置呢


Tags: 方法answer服务器flask套件setup测试用例unittest
1条回答
网友
1楼 · 发布于 2024-04-27 04:21:47

这是没有很好的记录,但我最近也需要这样做

docs mention thatTestResult.startTestRun“在执行任何测试之前调用一次”

如您所见,在the implementation中,该方法不做任何事情

我试着对TestResult和各种事情进行子类化。我一点也做不到,所以我最后在课堂上打了个补丁

在我的测试包的__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的自定义实现上

相关问题 更多 >