您的位置:首页 > 编程语言 > Python开发

为Python2.6的单元模块unittest做hack

2013-01-31 17:06 344 查看
我在Windows上开发Python用的版本是2.7,在Ubuntu上开发的版本是2.6,而在Python的unittest模块中,有几个方法是在2.7才有的,它们是:

MethodChecks thatNew 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 isb2.7
assertIsNot(a,b)a isnotb2.7
assertIsNone(x)x isNone2.7
assertIsNotNone(x)x isnotNone2.7
assertIn(a,b)a inb2.7
assertNotIn(a,b)a notinb2.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方法时,让它乐观地通过测试吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: