Mock笔记

mock的几种用法

1. mock

mock用于在测试中替换掉一些麻烦的外界服务(网络请求、文件操作等),专注于测试测试对象本身。

mock的使用介绍已经有很多,这里只记录Python中mock测试的构造方法,便于以后查阅。

2. 构造方式

2.1. 通过patch构造对象

def setUp(self):

        self.request_patcher = mock.patch(REQUEST_MANAGER_PATH)

        self.mock_request_manager = self.request_patcher.start()

        self.csm = CustomerServiceManager(self.mock_request_manager)

def tearDown(self):  // 该部分在以下例子略去

        self.request_patcher.stop()  

2.2. 通过patch构造方法

self.request_patcher = mock.patch(REQUEST_MANAGER_PATH)

self.mock_request_manager = self.request_patcher.start()

self.mock_request_manager.get.return_value = 'returns'

2.3. 通过Mock构造对象

self.mock_response = mock.Mock()

self.mock_response.content = 'something'

这里不能直接赋值

错误示例:self.mock_response = 'something'    结果就是mock_response从mock对象变成了字符串对象。

2.4. 通过Mock构造方法

self.mock_request = Mock()

self.mock_request.return_value = 'something'

2.5. 通过patch装饰器构造

从之前几例已经不难看出,无论是构造方法还是对象,都是基于一个Mock对象。更何况在Python中方法本来就是对象

@mock.patch(REST_PATH + '.sendTemplateSMS')

def test_send_auth_code(self, mock_send):

        pass

mock替换后对象作为参数传入函数。

当存在多个patch装饰器时,需要注意参数顺序。

@mock.patch(func2)

@mock.patch(func1)

def test_funcs(self, mock_func1, mock_func2):

        pass

3. 如何抓到mock对象

初写mock测试时,感觉mock的思想很容易理解,mock的用法也挺人性化,主要困扰是我已经想好了mock与测试计划,可是我就是patch不到我想mock的对象。

其实这里主要是要看我要patch的对象什么时候被测试对象用到,然后在被用前抓住mock掉。

模拟一个东西要看它用在何处,而不是来自哪里。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • scrapy学习笔记(有示例版) 我的博客 scrapy学习笔记1.使用scrapy1.1创建工程1.2创建爬虫模...
    陈思煜阅读 12,780评论 4 46
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • Startup 单元测试的核心价值在于两点: 更加精确地定义某段代码的作用,从而使代码的耦合性更低 避免程序员写出...
    wuwenxiang阅读 10,154评论 1 27
  • 明代官僚反对改变国家的农业大国形象,不愿意去进行任何发展实验;他们管理国家的思想观念和现实之间的断裂,再不能以技术...
    RiboseYim阅读 2,291评论 2 3