第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Python單元測(cè)試-Mock一個(gè)裝飾器

標(biāo)簽:
Java Python

场景

测试一些方法时, 可能会遇到该方法需要鉴权的情况(如login_required之类), 需要想办法绕过装饰器.

解决方案

  1. 为装饰器加开关. 在装饰器中通过读取某个配置判断是否开启该装饰器;

  2. mock掉装饰器.

前者操作起来方便, 但是在遇到不同装饰器都需要mock时, 为每个装饰器添加开关有些工作量;
而后者也有弊端, 即此次测试中, 所有测试都基于该装饰器不生效的情况下测试. 因此对于如权限等的测试, 需要添加其他测试手段(如接口测试)来完成.

本文讲述的是第二个解决方案的具体实现.

技术点

Mock装饰器与普通方法的不同之处在于, 装饰器在方法声明时就已经产生影响, 而不像普通方法被调用前mock即可, 因此需要在测试执行的最开始, 还没初始化服务端代码时就mock装饰器.

写一个自己的装饰器

from functools import wrapsdef mock_decorator(*args, **kwargs):
    def decorator(f):        @wraps(f)
        def decorated_function(*args, **kwargs):
            return f(*args, **kwargs)        return decorated_function    return decorator

mock原来装饰器

在测试模块的__init__.py下执行Mock操作, 即可在运行测试前先替换原来的装饰器.

from unittest import mock

mock.patch('decoretor.path.to.mock',mock_decorator).start()

参考

[1] Can I patch a Python decorator before it wraps a function?, Stack Overflow



作者:严北
链接:https://www.jianshu.com/p/70a0bc3e3dc4


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消