在进行单元测试的时候,有时候会遇到这种情况:
出于某些原因,我们不想测试某一部分内容,但是我们想要测试的部分却依赖这部分内容。
这时候,可以使用mock模块来模拟调用这部分内容,并给出返回结果,举例如下:
比如我们不想测试类C中的函数a,只想得到一个返回结果,可以这么写:
#从Python 3.3 开始,mock被整合到了unittest中
#此时使用 from unittest import mock 引入mock模块
#python 3.3 之前使用 import mock
from mock import patchimport unittestclass TestXXX(unites.TestCase)@patch.object(C, 'a')
# or: @patch('C.a')def test_xxx(self, Ca):Ca.return_value = 20......
这样在测试中调用C类中的a函数将直接返回20
以下方式也能实现目的:
...def test_xxx(self):c = C()c.a = mock.Mock(return_value = 20)......
以上模拟的是类中的函数,也可以使用Mock来模拟普通函数:
from mock import Mockmfunc = Mock()mfunc.return_value = 3mfunc() #3
也可以使用参数调用,并assert参数:
mfunc(1, 'a')# 3mfunc.assert_called_with(1, 'a') #assert that calls are made in a particular way
//05/28/python-mock-usage