我是Python单元测试的新手。我试图为我的班级编写单元测试。但是我遇到了问题:
from <path1> import InnerObj
from <path2> import new_obj
from <path3> import XYZ
class ClassToBeTested(object):
def __init__(self):
obj = new_obj(param1 = "XYZ", time = 1, innerObj = InnerObj())
self.attr1 = XYZ(obj)
def method(self, random, paramStr):
// Remainder of class
测试类别:
from mock import patch, PropertyMock, MagicMock
from <path1> import InnerObj
from <path2> import new_obj
from <path3> import XYZ
@pytest.fixture()
@patch('<path1>.InnerObj', new=MagicMock())
@patch('<path2>.new_obj', new=MagicMock())
@patch('<path3>.XYZ', new=MagicMock())
def mock_test():
return ClassToBeTested()
def test_method_true(mock_test):
random = Random_Object()
booleanResult = mock_test.method(random, paramStr)
assert booleanResult == True
我得到的错误是 ERROR at setup of test_method_true ______
错误堆栈中提到innerObj / init .py:26:init中qwerty_main = qwerty_assistant.get_root()
我可能会相信,对InnerObj的模拟未正确完成,因为它不应在模拟对象的init方法中调用代码。
我在这里做错什么了吗?有人可以帮忙指出正确的方向吗?
谢谢
patch
应该以正在使用的导入为目标,而不是导入路径。
例如
@patch('<path1>.InnerObj', new=MagicMock())
<path1>
是定义的位置,InnerObj
而不是使用它的文件。为了解决这个问题,InnerObj
应该在导入的模块中修补导入InnerObj
假装的路径ClassToBeTested
是path.to.class.to.be.tested
该补丁将是:
@patch('path.to.class.to.be.tested.InnerObj', new=MagicMock())
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句