我正在为一些python模块编写单元测试。但是,我无法想办法模拟导入实例的方法。下面是我要测试的python模块。
- bar.py -
delete
- foo.py -
class A():
@classmethod
def method_1(self):
...
a = A()
- test_foo.py -
from bar import a
class B():
@classmethod
def b(cls):
if a.method_1():
return True
else:
return False
这不起作用。我的测试用例仍在调用原始from foo import B
class TestB(TestCase):
@patch('foo.a.method_1')
def test_b(self, mock_method_1):
mock_method_1.return_value = True
test_b = B.b()
...
而不是我嘲笑的那个。
答案 0 :(得分:0)
请改用patch.object
decorator。它修补了对象的属性,而不是修补全局方法。
如果这不起作用,请尝试修补bar.a
代替foo.a
,但我不认为这是您的问题。
问题变成了一个类方法,所以我认为这样可行:
- test_foo.py -
from foo import B
class TestB(TestCase):
@patch('bar.A.method_1')
def test_b(self, mock_method_1):
mock_method_1.return_value = True
test_b = B.b()
...