我想模拟一个用于初始化类级别(而不是实例)属性的模块级函数。 这里有一个简化的例子:
# a.py
def fn():
return 'asdf'
class C:
cls_var = fn()
以下是一个尝试mock 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'
我认为问题在于patch的位置,但我尝试了两种导入的变化都没有成功。我甚至尝试将导入语句移动到test_mock_fn()中,以便mocked a.fn()会在a.C进入作用域之前“存在” - 但是还是失败了。
任何见解都将不胜感激!
import a
和from a import SomeClass
的示例。我尝试了这两种方式) - Steven Colby