我在Windows上开发Python用的版本是2.7,在Ubuntu上开发的版本是2.6,而在Python的unittest模块中,有几个方法是在2.7才有的,它们是:
Method | Checks that | New in |
---|---|---|
assertEqual(a,b) | a ==b | |
assertNotEqual(a,b) | a !=b | |
assertTrue(x) | bool(x) is True | |
assertFalse(x) | bool(x) is False | |
assertIs(a,b) | a isb | 2.7 |
assertIsNot(a,b) | a isnotb | 2.7 |
assertIsNone(x) | x isNone | 2.7 |
assertIsNotNone(x) | x isnotNone | 2.7 |
assertIn(a,b) | a inb | 2.7 |
assertNotIn(a,b) | a notinb | 2.7 |
assertIsInstance(a,b) | isinstance(a, b) | 2.7 |
assertNotIsInstance(a,b) | not isinstance(a,b) | 2.7 |
为了能让在Python2.7上开发的单元测试代码顺利地在Python2.6上运行,我做了一下hack。
#!/usr/bin/python
#coding: UTF-8
"""
@author: CaiKnife
"""
import __init__, unittest
def __getattr__(self, name):
if name in ("assertIs", "assertIsNone"):
statement = "a is b"
elif name in ("assertIsNot", "assertIsNotNone"):
statement = "a is not b"
elif name == "assertIn":
statement = "a in b"
elif name == "assertNotIn":
statement = "a not in b"
elif name == "assertIsInstance":
statement = "isinstance(a, b)"
elif name == "assertIsNotInstance":
statement = "not isinstance(a, b)"
else:
statement = "True"
def wrapper(a=None, b=None):
return self.assertTrue(eval(statement))
return wrapper
unittest.TestCase.__getattr__ = __getattr__
class TestCase(unittest.TestCase):
def test_func(self):
self.assertHahahaha()
if __name__ == '__main__':
unittest.main()
测试顺利通过,默认调用不存在的assert方法时,让它乐观地通过测试吧。