Python mock测试static 方法——狸猫换太子
2013-11-22 22:47
211 查看
主流的大部分的测试框架貌似都不支持static method,貌似因为静态方法的代码有味道,所以官方故意不支持静态方法测试?il不知道
承认代码可能写的不够好,需要重构,但是测试也是需要的,所以仍然需要静态方法来做重构的保障。
在python中实现静态测试的思路如下:
假设有一个Util类,
困难在于,我们要测试这个View的view()方法,但是这个view()方法使用了一个关键的static方法,而且有时候这个static方法很难操控,或者执行时间慢,或者带来其他问题等,但是我们又需要测试view(),所以必须绕过去
本思路来自http://bbs.csdn.net/topics/380260214
解决问题有时候关键就是思路,有了思路一切都好办了。
m = staticmethod(lambda *arg, **args: '狸猫')
承认代码可能写的不够好,需要重构,但是测试也是需要的,所以仍然需要静态方法来做重构的保障。
在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: '狸猫')
相关文章推荐
- pip 与 virtualenv 的使用
- 关于python文件操作
- [PYTHON] 核心编程笔记之十-Python错误和异常
- [PYTHON] 核心编程笔记之九-Python文件和输入输出
- [PYTHON] 核心编程笔记之八-Python条件和循环
- [PYTHON] 核心编程笔记之七-Python映射和集合类型
- [PYTHON] 核心编程笔记之六-Python序列
- [PYTHON] 核心编程笔记之五-Python数字
- [PYTHON] 核心编程笔记之四-Python对象
- [PYTHON] 核心编程笔记之三-Python基础
- [PYTHON] 核心编程笔记之二-Python起步
- Python中的sqlite模块无法导入的解决方案
- Python清屏方法
- 用PYTHON输入输出字符串
- python进阶3--文件系统
- [转]python操作MySQL数据库
- 全面解读python web 程序的9种部署方式
- python 如何计算时间差
- 在python中实现数据生成饼图,并且饼图要显示在HTML页面中
- Python源码分析