使用unittest
模块,我喜欢feature to skip tests,但它仅适用于Python 2.7 +。
例如,考虑test.py
:
import unittest
try:
import proprietary_module
except ImportError:
proprietary_module = None
class TestProprietary(unittest.TestCase):
@unittest.skipIf(proprietary_module is None, "requries proprietary module")
def test_something_proprietary(self):
self.assertTrue(proprietary_module is not None)
if __name__ == '__main__':
unittest.main()
如果我尝试使用早期版本的Python运行测试,则会收到错误:
Traceback (most recent call last):
File "test.py", line 7, in <module>
class TestProprietary(unittest.TestCase):
File "test.py", line 8, in TestProprietary
@unittest.skipIf(proprietary_module is None, "requries proprietary module")
AttributeError: 'module' object has no attribute 'skipIf'
有没有办法“欺骗”旧版本的Python来忽略unittest装饰器,并跳过测试?
答案 0 :(得分:6)
unittest2是Python 2.7中添加到unittest测试框架的新功能的后端。它经过测试可以在Python 2.4 - 2.7上运行。
使用unittest2代替unittest只需更换 进口单位测试 同 import unittest2
答案 1 :(得分:4)
一般情况下,我建议不要使用unittest
,因为它实际上并不是pythonic API。
在Python中进行测试的一个好框架是nose
。您可以通过引发SkipTest
例外来跳过测试,例如:
if (sys.version_info < (2, 6, 0)):
from nose.plugins.skip import SkipTest
raise SkipTest
这适用于Python 2.3 +
鼻子中有很多功能:
答案 2 :(得分:2)
如何使用if
声明?
if proprietary_module is None:
print "Skipping test since it requires proprietary module"
else:
def test_something_proprietary(self):
self.assertTrue(proprietary_module is not None)