我想模拟一个用于初始化类级(而不是实例)属性的模块级函数。这是一个简化的示例:
# 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'
我相信问题出在哪里修补,但我已经尝试了两种导入变体,但没有运气。我什至尝试将 import 语句移动到 test_mock_fn() 中,以便模拟的 a.fn() 在 aC 进入范围之前“存在” - 不,仍然失败。
任何见解将不胜感激!