假设我有以下Python UnitTest:
import unittest
def Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
# Get some resources
...
if error_occurred:
assert(False)
@classmethod
def tearDownClass(cls):
# release resources
...
字符串
如果setUpClass调用失败,则不会调用tearDownClass,因此资源永远不会释放。如果下一个测试需要资源,则在测试运行期间会出现问题。
当setUpClass调用失败时,有没有一种方法可以进行清理?
4条答案
按热度按时间nqwrtyyt1#
你可以在setUpClass方法中放置一个try catch,并直接调用except中的tearDown。
字符串
需要外部资源来运行单元测试是不好的做法。如果这些资源不可用,而你需要测试代码的一部分,以发现奇怪的错误,你将无法快速运行它。尝试区分集成测试和单元测试。
tyky79it2#
与您在其他地方保护资源的方式相同。
try-except
:字符串
测试可以简单到在
except
块中调用cls.tearDownClass()
。* 然后 * 您可以调用assert(False)
或任何您喜欢的方法来提前退出测试。isr3a4wc3#
我有一大堆测试助手函数,它们接受一个测试示例,并使用addfocus来干净地设置/拆除线程、临时文件等,所以我也需要addfocus API来为类级别的fixtures工作。
字符串
xv8emn3q4#
与此同时,
addClassCleanup
类方法已被添加到unittest.TestCase
中,正是为了达到这个目的:https://docs.python.org/3/library/unittest.html#unittest.TestCase.addClassCleanup