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

Python mock测试static 方法——狸猫换太子

2013-11-22 22:47 211 查看
主流的大部分的测试框架貌似都不支持static method,貌似因为静态方法的代码有味道,所以官方故意不支持静态方法测试?il不知道

承认代码可能写的不够好,需要重构,但是测试也是需要的,所以仍然需要静态方法来做重构的保障。

在python中实现静态测试的思路如下:

假设有一个Util类,

class Util:
    @classmethod
    def tai_zi(a, b=''):
        print '太子'
        return '太子'

class View()
    def view(self):
        print Util.tai_zi(1, 'M')


困难在于,我们要测试这个View的view()方法,但是这个view()方法使用了一个关键的static方法,而且有时候这个static方法很难操控,或者执行时间慢,或者带来其他问题等,但是我们又需要测试view(),所以必须绕过去

class UtilTest(MockTestCase):
    @classmethod
    def mock_tai_zi(cls, *args, **kwargs):
        print '狸猫'
        return '狸猫'

    def setUp(self):
        pass

    def tearDown(self):
        pass

    def mock_tai_zi(self):
        self.tai_zi_ = Util.tai_zi #备份
        Util.tai_zi = staticmethod(mock_tai_zi)

         v = View()
         v.view()        
         Util.tai_zi = self.tai_zi_  #恢复过来


本思路来自http://bbs.csdn.net/topics/380260214

解决问题有时候关键就是思路,有了思路一切都好办了。

m = staticmethod(lambda *arg, **args: '狸猫')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: