Python mock 的使用
使用 mock 对象替换系统的一部分并且能获取它们的使用情况。
具体的说,你可以获取方法/属性的使用情况以及它们的调用参数。也可以指定返回值和设置属性。
思路是将对象设置为 mock 对象,然后根据需要配置 mock 对象,比如返回值、异常等。
设置类方法的返回值并验证被调用过
# -*- coding: utf-8 -*-
from unittest.mock import MagicMock
class ProductionClass:
def method(self, arg1, arg2, key):
pass
thing = ProductionClass()
# thing.method 现在指向一个 MagicMock 实例,当这个实例被调用时返回 3
thing.method = MagicMock(return_value=3)
print(thing.method(3, 4, key='value')) # 3
thing.method.assert_called_with(3, 4, key='value')
设置调用 mock 后的副作用
side_effect 可以是一个函数、iterable 或 exception(类或实例)。
详情见:https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.side_effect
使用装饰器和上下文管理器
上面『设置类方法的返回值并验证被调用过』比较啰嗦且不利用复用,所以改写为装饰器或者
上下文管理器。
装饰器:
# -*- coding: utf-8 -*-
from unittest.mock import patch
from strategy.module import ProductionClass
@patch('strategy.module.ProductionClass.method', return_value=3)
def test(method):
print(ProductionClass().method(3, 4, key='value')) # 3
method.assert_called_with(3, 4, key='value')
test()
上下文管理器:
# -*- coding: utf-8 -*-
from unittest.mock import patch
from strategy.module import ProductionClass
def test():
with patch.object(ProductionClass, 'method', return_value=3) as mock_method:
print(ProductionClass().method(3, 4, key='value')) # 3
mock_method.assert_called_with(3, 4, key='value')
test()
对于其他对象,比如函数,只需要将 patch 中的路径变为函数的路径即可。
Python mock 的使用的更多相关文章
- Python mock
在测试过程中,为了更好地展开单元测试,mock一些数据跟对象在所难免,下面讲一下python的mock的简单用法. 关于python mock,网上有很多资料,这里不会讲的特别深,但一定会是实用为主, ...
- 使用 Python Mock 类进行单元测试
数据类型.模型或节点——这些都只是mock对象可承担的角色.但mock在单元测试中扮演一个什么角色呢? 有时,你需要为单元测试的初始设置准备一些“其他”的代码资源.但这些资源兴许会不可用,不稳定,或者 ...
- Python Mock的入门(转)
原文:https://segmentfault.com/a/1190000002965620 Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西. ...
- Python Mock的入门学习
一.Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西.准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象 ...
- 开发神技能 | Python Mock 的入门
Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西.准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代 ...
- Python Mock 的入门
Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西.准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代 ...
- python mock模块使用(二)
本篇继续介绍mock里面另一种实现方式,patch装饰器的使用,patch() 作为函数装饰器,为您创建模拟并将其传递到装饰函数 官方文档地址 patch简介 1.unittest.mock.patc ...
- python mock模块使用(一)
什么是mock unittest.mock是一个用于在Python中进行单元测试的库,Mock翻译过来就是模拟的意思,顾名思义这个库的主要功能是模拟一些东西. 它的主要功能是使用mock对象替代掉指定 ...
- 一文熟练使用python mock
mock作为python测试模拟对象工具,在单元测试当中使用较多,官方文档详细不够精简,这篇文章介绍mock常用的用法,以下为引用全文,留给自己和有需要的人查阅. https://realpython ...
随机推荐
- thread_线程间协作:wait、notify、notifyAll和Condition
经典模式:生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权.因为生产者如果不释放对临界资源的占用权,那么消费 ...
- 第一篇:初识python
1.python介绍 Python, 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python的官方介绍是: ...
- HDU 1978 How many ways DP问题
How many ways Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- Hadoop 2.0 编译问题小结
原文见 http://xiguada.org/hadoop-2-x-compile/ 这些问题是2013年初整理的,不过到目前为止,即使最新的hadoop2.0系列,编译总体上变化不大,因此还能适用. ...
- linux学习笔记32---命令ping和telnet
Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”.不能打开网页时会说“你先ping网关地址192.168.1.1试试”. ...
- H4CK1T CTF 2016 Mexico-Remote pentest writeup
进去网站之后发现连接都是包含类型的,就能想到文件包含漏洞(话说刚总结过就能遇到这题,也算是复习啦) 这里用php://filter/read=convert.base64-encode/resourc ...
- 本地运行storm时报错
java.lang.NoClassDefFoundError: backtype/storm/topology/IRichSpout at java.lang.Class.getDeclaredMet ...
- jQuery 实战读书笔记之第二章:选择元素
基本选择器 html 代码如下,后面的 js 使用的 html 基本大同小异. <!doctype html> <html> <head> <title> ...
- C++基础细节2
1.关于引用和指针 概念上,引用(&)并不是对象,而是一个已经存在的对象的别名:引用不可以重新绑定到另外一个对象,因此引用必须初始化.(类比const,一经定义就不能修改,所以必须初始化,是同 ...
- vhost in nodejs
关于vhost 个人理解为vhost是一种可以在一个ip下同时部署多个不同域名站点的的概念. 其好处就是对一些小型的网站不必每个网站都占用一个ip,或者说一个服务,举个例子,vhost的概念就相当于打 ...