我有一套测试是使用TestLoader的(从unittest模块)loadTestsFromModule()方法加载的,即
suite = loader.loadTestsFromModule(module)
这给了我一个很好的测试列表。我的问题是,我正在使用的测试工具有时需要根据各种标准跳过某些测试。我想做的是这样的:
for test in suite:
mark the test as 'to-skip' if it meets certain criteria
请注意,我不能仅仅从测试列表中删除测试,因为我希望单元测试测试运行者实际上跳过测试,将它们添加到跳过的计数中,以及所有这些爵士乐。
单元测试文档建议在测试方法或类周围使用修饰符。由于我是从模块加载这些测试,并根据测试本身未包含的条件决定跳过这些测试,因此我不能真正使用装饰器。有没有一种方法可以遍历每个单独的测试,并且有一些方法可以将其标记为“跳过”测试而无需直接访问测试类或该类中的方法?
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 +。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句