天天看点

Mock入门

#关键参数

name:唯一标识

return_value 当被调用时,返回的值(可为函数)

side_effct = 当存在时,return_value不生效。返回side_effect

导入库
from unittest import mock
           
使用
## mock = mock.Mock(name=name,return_value=xx,side_effect=xx)  

e.g:
1.
class a ():
    def add(self,a,b):
        return a + b
        
        

from xx import a


def test_add():  
  a.add = mock.Mock(return_value=3)  
  # 此时,a.add被调用时,返回的就是return_value的值  
  a.add = mock.Mock(return_value=a.add)  
  #可返回函数(包括本身),相当于没有使用mock  
  a.add = mock.Mock(name = xx,return_value=3,side_effect = 7) 
  #此时返回的事side_effect
           

@patch快捷使用mock

note:使用@patch,导入的文件,在py层即可,否则容易出错(a.py: import a,不要具体到类或函数)

第一种:mock和函数结合

a.py
def fun1():
    pass
           
使用
class test():
    @mock.patch('a.fun1')
    def test(self,mockfun1):随意命名
        mockfun1.return_value = 7
        mockfun1.side_effect = xx
           

第二种:mock和类结合

a.py
class name1():
    def fun1(self):
        pass
           
使用
class test():
    @mock.path.object(a.name1,'fun1'):
    def test_a(self,传参):
        参数.retur_value
        XXXX参考上

           

第三种:mock和类,函数的结合

a.py
class name1():
    def func1():
        pass

def fun2():
    pass
           
class test():
    @mock.patch.object(a.name1,'fun1')
    @mock.patch('a.fun2')
    def test1(self,param1,param2):
        #param1对应 fun2; param2 对应fun1
        pass