python mock的简单使用

先记录今天用到的,以后再整理。

假设要测试的方法:

def target():
    wb = openpyxl.load_workbook('test')
    ws = wb['sheet']
    ws.values
    ...

可以看到,target中使用了openpyxl读取excel文件,然后处理,测试的时候不想再读取文件了,需要mock下openpyxl.
我需要先创建一个类,要求支持以[]的方式读取值,而且返回的values必须是一个iterator,每一项是个元组:

class Values:
    
    @property
    def values(self):
        for k, v in self._values:
            yield k, v
            
    @values.setter
    def values(self, values):
        self._values = values

class LoadWorkbook:
    # 因为要mock的方法接收了一个参数,所以这里也需要接收一个参数
    def __init__(self, workbook):
        pass
    
    # 支持以[]方式读取数据
    def __getitem__(self, item):
        return Values()

然后在test中使用:

from unitest.mock import patch

...

@patch('openpyxl.load_workbook')
def test_target(mock_load_workbook):
    # mock_load_workbook会代替target方法中的load_workbook
    # 给mock_load_workbook添加副作用,当target中执行load_workbook('test')时
    # 会执行LoadWorkbook('test')
    mock_load_workbook.side_effect = LoadWorkbook
    ...
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值