python - 如何模拟类级别参数
问题描述
这是我想做的一个非常精简的版本。它可能看起来并不完全有用,但那是因为我已经剥离了与这个问题无关的所有元素;
假人.py
from another_mod import some_val
class Dummy:
A_DICT = {
'a': some_val*5,
'b': some_val*10,
}
def some_func(self, x):
return x*Dummy.A_DICT['a']
出于测试目的,我想使用模拟修改导入的值some_val
。假设未模拟的值为some_val
20。
test_dummy.py
import pytest
from dummy import Dummy
def test_some_func(mocker):
mocker.patch('dummy.some_val',10)
d = Dummy()
assert d.some_func(5) == 250
但是,这会失败,因为d.some_func(5)
= 500,这是未应用模拟时的结果。
我有一些想法,这是因为类变量A_DICT
可能是在应用模拟之前设置的。如果是这样,有什么办法可以做我想做的事情吗?我以前使用过 mocking,并且知道从错误的地方 mocking 东西经常会带来困难。然而,这是一个我以前没有处理过的具体案例......
如果这个例子看起来无用且做作,但我试图将一个例子简化为这个非常具体的问题。
解决方案
推荐阅读
- python-3.x - 将代码迁移到 Python3 时如何解决 TypeError
- reactjs - 状态未更新在 React Hooks 的使用效果中
- limit - Arango DB 查询限制不能超过 1000?
- python - 使用 Rhino Grasshopper Python 循环浏览选项
- python-3.x - 在 scipy 优化最小化中忽略了终止容差
- maven - mvn 版本:显示插件更新 - 结构化输出
- docusignapi - 签署文档后,可以使用docusignapi在netsuite中创建实体吗?
- excel - Excel:从序列日期到通用编号的 VLOOKUP
- javascript - 带有数组的过滤器对象无法使用 javascript
- d3.js - 使用 .data() 函数迭代每个第 n 个数据成员