Python 知识点集合

Python的装饰器的作用

装饰器模式是一个强大的模式,可以给一个函数增加额外的方法而不用修改原来的代码
比如,当我们需要给原来的代码添加日志记录时,需要将原来的代码进行修改,在函数里面增加日志记录的代码。但如果使用装饰器模式,使用装饰器装饰原来的代码,将日志记录放在装饰器里,就可以避免修改原有的代码,同时又实现了所需的功能。这种编程模式就叫做面向切片编程

作用和使用场景

  • 引入日志

  • 函数执行时间统计

  • 执行函数前预备处理

  • 执行函数前的清理功能

  • 权限效验等

参考阅读
Python的装饰器的作用


Python Mock单元测试

在这里插入图片描述

为什么要使Mock

场景模拟1:比如有A和B两个模块,A模块中有调用到B模块的方法,但是很不幸,B模块中被A模块调用的方法由于一定的原因需要被修改,然而我们又不想让影响A模块的功能测试,所以就用到了单元测试模块unittest中的mock模块;mock模块就是模拟出一个假的B模块

场景模拟2:有时需要为单元测试的初始设置准备一些其他的资源,但是这些资源又不太经常使用或者是使用起来比较笨拙,此时我们就可以定义一个mock对象来模拟一个需要使用的资源;mock对象用于代替测试的准备资源

Mock基本使用

  1. Mock构造器
    init是mock对象的构造器,init(name = None, return_ralue = DEFAULT, side_effect =None, spec = None)
    name是mock对象的唯一标识
    spec设置的是mock对象的属性,可以是property或者方法,也可以是其他的列表字符串或者其他的python类
    return_value设置的是,当这个mock对象被调用的时候,显示出的结果就是return_value的值
    side_effect是和return_value是相反的,覆盖了return_value,也就是说当这个mock对象被调用的时候,返回的是side_effect的值,而不是return_value

  2. Mock断言
    assert_called_with(*argSeq, **argKW):检查mock方法是否获得了正确的参数;当至少有一个参数有错误的值或者类型时,当参数的个数出错时,当参数的顺序不正确时,这个断言就会发生错误
    assert_called_once_with(*argSeq, **argKW)这个断言,当某个方法被多次调用的时候,它就会报错
    assert_any_call()用于检查测试的mock对象在测试例程中是否调用了方法,和前边的两个断言不一样,前边的两个只是检查最近一次的调用;看下边的例子(mock的构造仍和上边的例子一样)
    assert_has_calls()检查是否按照正确的顺序和正确的参数进行调用的;所以,我们需要给出一个方法的调用顺序,assert的时候按照这个顺序进行检查

  3. Mock管理方法
    attach_mock():将一个mock对象添加到另一个mock对象中
    configure_mock():更改mock对象的return_value值
    mock_add_spec(aSpec, spec_set = False):这个函数就是给mock对象添加一个新的属性(mock对象原来的属性就会被擦除),第二个参数是指属性是可读可写,默认是只读,如果想让其拥有写权限,可以将其设置为true
    reset_mock():将mock对象恢复到测试之前的状态,这里也就是避免了重新构造mock对象带来的开销。这里就不给出举例

Mock统计

called: 跟踪mock对象所做的任意调用的访问器
call_count:mock对象被工厂调用的次数
call_args:获取工厂调用时的参数(最近使用的参数)
call_args_list:获取工厂调用的的所有参数,是个列表
method_calls:测试一个mock对象都调用了哪些方法,结果是一个list
mock_calls:显示工厂调用和方法调用

参考阅读

return_value 和 side_effec
Python中的模块学习之mock模块

参考阅读
Python中的模块学习之mock模块
return_value 和 side_effect 使用


Python代码中func(*args, **kwargs)

参考阅读
Python代码中func(*args, **kwargs)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值