Mock 全局符号
这里的 符号
包括:模块、类、类的实例、函数等。
代码:
1 | # example.py |
测试:
1 | from mock import MagicMock, patch |
Mock 局部实例化的类
代码:
1 | # example.py |
测试:
1 | from mock import patch |
Mock 局部实例化的类的属性
代码:
1 | # example.py |
测试:
1 | from mock import MagicMock, patch |
如果 method
的返回值比较复杂,这样写可读性更高:
1 | from mock import MagicMock, patch |
Mock 类的属性
代码:
1 | # example.py |
测试:
1 | from mock import patch |
Mock 局部导入的模块
代码:
1 | # example.py |
测试:
1 | from mock import MagicMock, patch |
Mock 具有特殊属性的对象
通常在 Mock 一个简单对象的时候,我们会使用 类 Mock
(或者它的 子类 MagicMock
)。但是 类 Mock
本身带有一些 可选参数,如果待 Mock 对象恰好具有一个属性,该属性与某个可选参数同名,我们在此定义这样的属性为 特殊属性
。
具有上述 特殊属性
的对象,无法通过 类 Mock
直接创建出来。例如:
1 | from mock import Mock |
可以看出,name 符合上述对 特殊属性
的定义,创建对象 m 时:
- name 并没有被当做 m 的属性,因此 m.name 的值并不是预期的 foo
- value 被当做了 m 的属性,因此 m.value 的值是预期的 bar
想要 name 被当做 m 的属性,有两种方式:
直接赋值覆盖
1
2
3
4
5
6
7from mock import Mock
'bar') m = Mock(value=
'foo' m.name =
m.name
'foo'
m.value
'bar'借助 configure_mock 方法(个人更倾向于这种方式)
1
2
3
4
5
6m = Mock()
'foo', value='bar') m.configure_mock(name=
m.name
'foo'
m.value
'bar'