我想嘲笑一个模块级函数用于初始化类级(非实例)属性。这里有一个简单的例子:Python:如何模拟类属性初始化函数
# a.py
def fn():
return 'asdf'
class C:
cls_var = fn()
这里是试图嘲笑a.fn()一个单元测试:
# test_a.py
import unittest, mock
import a
class TestStuff(unittest.TestCase):
# we want to mock a.fn so that the class variable
# C.cls_var gets assigned the output of our mock
@mock.patch('a.fn', return_value='1234')
def test_mock_fn(self, mocked_fn):
print mocked_fn(), " -- as expected, prints '1234'"
self.assertEqual('1234', a.C.cls_var) # fails! C.cls_var is 'asdf'
我相信这个问题是where to patch但我已经试过进口两种变化,没有运气。我甚至尝试将import语句移入test_mock_fn(),以便在a.C进入作用域之前模拟的a.fn()将“存在” - nope仍然失败。
任何有识之士将不胜感激!
您是否尝试更改要从语句中使用的导入? 来自进口fn – Rainer
嗨Ranier - 是的,试过了;没有运气。 (当我提到'......这两个变体都是导入...'时,我应该已经更清楚了,模拟中的Python文档给出了使用'import a'和'from import SomeClass'的例子,我尝试了这两种方法) –