首页 > 解决方案 > 如何模拟类级别参数

问题描述

这是我想做的一个非常精简的版本。它可能看起来并不完全有用,但那是因为我已经剥离了与这个问题无关的所有元素;

假人.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_val20。

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 东西经常会带来困难。然而,这是一个我以前没有处理过的具体案例......

如果这个例子看起来无用且做作,但我试图将一个例子简化为这个非常具体的问题。

标签: pythonmockingpytestpytest-mock

解决方案


推荐阅读