gpt4 book ai didi

python - 跳过没有装饰器语法的单元测试测试

转载 作者:IT老高 更新时间:2023-10-28 21:02:53 25 4
gpt4 key购买 nike

我有一套测试,我使用 TestLoader(来自 unittest 模块)的 loadTestsFromModule() 方法加载了这些测试,即

suite = loader.loadTestsFromModule(module)

这为我提供了一个非常充足的测试列表,这些测试可以正常工作。我的问题是我正在使用的测试工具有时需要根据各种标准跳过某些测试。我想做的是这样的:

for test in suite:
mark the test as 'to-skip' if it meets certain criteria

请注意,我不能只从测试列表中删除测试,因为我希望 unittest 测试运行器实际跳过测试,将它们添加到跳过的计数中,以及所有这些爵士乐。

单元测试文档suggests using decorators围绕测试方法或类。由于我从一个模块加载这些测试并根据测试本身不包含的标准决定跳过,所以我不能真正使用装饰器。有没有一种方法可以迭代每个单独的测试,以及如何将其标记为“跳过”测试,而无需直接访问测试类或类中的方法?

最佳答案

使用 unittest.TestCase.skipTest :

import unittest

class TestFoo(unittest.TestCase):
def setUp(self): print('setup')
def tearDown(self): print('teardown')
def test_spam(self): pass
def test_egg(self): pass
def test_ham(self): pass

if __name__ == '__main__':
import sys
loader = unittest.loader.defaultTestLoader
runner = unittest.TextTestRunner(verbosity=2)
suite = loader.loadTestsFromModule(sys.modules['__main__'])
for ts in suite:
for t in ts:
if t.id().endswith('am'): # To skip `test_spam` and `test_ham`
setattr(t, 'setUp', lambda: t.skipTest('criteria'))
runner.run(suite)

打印

test_egg (__main__.TestFoo) ... setup
teardown
ok
test_ham (__main__.TestFoo) ... skipped 'criteria'
test_spam (__main__.TestFoo) ... skipped 'criteria'

----------------------------------------------------------------------
Ran 3 tests in 0.001s

OK (skipped=2)


----------------------------------------------------------------------
Ran 3 tests in 0.002s

OK (skipped=2)

更新

更新了代码以修补 setUp 而不是测试方法。否则,将执行 setUp/tearDown 方法以跳过测试。

注意

unittest.TestCase.skipTest(测试跳过)是在 Python 2.7、3.1 中引入的。所以这个方法只适用于Python 2.7+, 3.1+

关于python - 跳过没有装饰器语法的单元测试测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19031953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com