使用Python中的mock模块进行单元测试

在进行单元测试的时候,有时候会遇到这种状况:python

出于某些缘由,咱们不想测试某一部份内容,可是咱们想要测试的部分却依赖这部份内容。函数

这时候,能够使用mock模块来模拟调用这部份内容,并给出返回结果,举例以下:单元测试

好比咱们不想测试类C中的函数a,只想获得一个返回结果,能够这么写:测试

#从Python 3.3 开始,mock被整合到了unittest中
#此时使用 from unittest import mock 引入mock模块
#python 3.3 以前使用 import mock
from
mock import patch import unittest class TestXXX(unites.TestCase) @patch.object(C, 'a')
  # or: @patch('C.a')
def test_xxx(self, Ca): Ca.return_value = 20 ......

这样在测试中调用C类中的a函数将直接返回20spa

如下方式也能实现目的:code

...
    def test_xxx(self):
        c = C()
        c.a = mock.Mock(return_value = 20)
......

以上模拟的是类中的函数,也能够使用Mock来模拟普通函数blog

from mock import Mock

mfunc = Mock()
mfunc.return_value = 3

mfunc()    #3
  

也能够使用参数调用,并assert参数:ci

mfunc(1, 'a')            # 3
mfunc.assert_called_with(1, 'a') #assert that calls are made in a particular way

 http://cizixs.com/2015/05/28/python-mock-usageit

相关文章
相关标签/搜索