我正在尝试修补由我要测试的类实例化的类,但是它不起作用。我已经阅读了各种文档,但仍然没有发现我做错了什么。这是代码片段:
在tests/Test.py
:
from module.ClassToTest import ClassToTest
class Test(object):
@mock.patch('module.ClassToPatch.ClassToPatch', autospec = False)
def setUp(self, my_class_mock):
self.instance = my_class_mock.return_value
self.instance.my_method.return_value = "def"
self.class_to_test = ClassToTest()
def test(self):
val = self.class_to_test.instance.my_method() #Returns 'abc' instead of 'def'
self.assertEqual(val, 'def')
在module/ClassToPatch.py
:
class ClassToPatch(object):
def __init__(self):
pass
def my_method(self):
return "abc"
在module/ClassToTest.py
:
from module.ClassToPatch import ClassToPatch
class ClassToTest(object):
def __init__:
# Still instantiates the concrete class instead of the mock
self.instance = ClassToPatch()
我知道在这种情况下,我可以轻松注入依赖项,但这只是一个例子。同样,我们对每个文件策略使用一个类,文件的名称类似于该类,因此使用了奇怪的导入命名。
正如诺伯特提到的,解决方法是将模拟行从
@mock.patch('module.ClassToPatch.ClassToPatch', autospec = False)
到
@mock.patch('module.ClassToTest.ClassToPatch', autospec = False)
根据文档:
使用patch()装饰器/上下文管理器可以轻松模拟被测模块中的类或对象。在测试期间,您指定的对象将被模拟(或其他对象)替换,并在测试结束时恢复。
您正在测试ClassToTest
模块,而不是ClassToPatch
模块。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句