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

我在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方法时,让它乐观地通过测试吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值