我有一套使用 TestLoader 的(来自单元测试模块) loadTestsFromModule() 方法加载的测试,即
suite = loader.loadTestsFromModule(module)
这给了我一个非常充足的、运行良好的测试列表。我的问题是,我正在使用的测试工具有时需要根据各种标准跳过某些测试。我想做的是这样的:
for test in suite:
mark the test as 'to-skip' if it meets certain criteria
请注意,我不能只是从测试列表中删除测试,因为我希望单元测试测试运行程序实际上跳过测试,将它们添加到跳过的计数中,以及所有这些爵士乐。
单元测试文档建议使用装饰器 http://docs.python.org/2/library/unittest.html#unittest-skipping围绕测试方法或类。由于我从模块加载这些测试并根据测试本身中未包含的标准确定跳过,因此我无法真正使用装饰器。有没有一种方法可以迭代每个单独的测试,以及如何将其标记为“跳过”测试,而无需直接访问测试类或类中的方法?
Using unittest.TestCase.skipTest http://docs.python.org/2/library/unittest.html#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)
prints
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)
UPDATE
更新了补丁代码setUp
而不是测试方法。否则,setUp
/tearDown
将执行要跳过的测试的方法。
NOTE
unittest.TestCase.skipTest
Python 中引入了(测试跳过)2.7, 3.1。所以这个方法只适用于Python 2.7+、3.1+.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)