python django test 使用mock库遇到的问题

在进行Django接口测试时,为确保测试独立性,通常使用Mock库模拟外部依赖。然而,如果在文件顶部直接导入依赖函数,Mock可能无效,因为模块在程序开始时已全局加载。解决方案是避免直接导入函数,而在需要时使用模块名.函数名的方式调用。通过调整导入方式,可以确保Mock正常工作,实现对测试目标的精确模拟。
摘要由CSDN通过智能技术生成

    场景:  在测试接口时依赖接口中其他函数返回的结果,, 如果其他函数不稳定会造成测试结果不通过,,    而单元测试的目的只针对当前模块的逻辑测试不应该受到其他依赖的影响,要保证依赖的稳定性.  

 这时可以使用django 的mock库  对外部依赖部件进行模拟,是单元测试的焦点只放在当前的单元功能,

这里简述一下mock库的原理:  通过导入相关模块,然后更新该模块函数的实例,通过该实例在被其他函数调用时,直接更改我们想要的返回值,以此达到模拟假数据的返回.

此处要注意  我就是被处坑了. 

在文件顶层处直接以 from 模块C import  函数Ac , # 函数Ac是第三方依赖部件 ,,你会发现 在test运行结果  mock 会不成功,  其原因是在程序开始时 from 模块A import  函数A  ,会直接将 函数A  加载,作用域是全局的,     而mock是在函数中导入作用域是局部的,    测试中会取全局的作用域.  所以mock会失效.   为什么会取全局的作用域  因为同一个模块就算被多次导入也只会加载一次,    这地方要注意

所以要想正常的mock, 因先 import 模块A 先加载模块A,  不要先加载函数A,   而要在要调用的地方以 模块A.函数A 的方式调用并加载,

 

以下是一个网上mock教程中通用的小例子, 但是其中的  模块导入的问题并没有提示到

 

# 模块C

def Ac(x, y):
    return 1

# 模块A

import C


def add_and_multiply(x, y):
    addition = x + y
    multiple = C.Ac(x, y)  # 掉用Ac 模块 此时返回的结果是 1
    return addition, multiple

# 模块B

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值