我有一个我想用mock测试的实例方法。我试图用另一个带参数的方法替换此实例类中的一个方法。
要测试的课程:
class ClassToTest():
def compute(self):
result = self._get_xml()
return result
def _get_xml(self):
#get xml here
return xml
测试文件:
from mock import patch
class ClassTest():
@patch('classToTest._get_xml', _get_fake_xml)
def computetest(self):
test = ClassToTest()
toassert = test.compute()
#assert whatever
#self.assert(...)
def _get_fake_xml(self, objects, filename):
py_file = os.path.abspath(__file__)
py_dir = os.path.dirname(py_file)
xml_file = os.path.join(py_dir, filename)
xml_tree = objectify.parse(xml_file)
return xml_tree.getroot()
return xml
现在如何在补丁
中添加_get_fake_xml方法的参数我试过了:
@patch('classToTest._get_xml', _get_fake_xml(mock.Mock(), 'filenam.xml'))
但那没用。然后我尝试将filename作为全局变量,但是我收到以下错误:
ClassToTest实例中不存在self.filename。
基本上我希望能够将_get_fake_xml重用于任何其他文件名。
有什么建议吗?
答案 0 :(得分:2)
所以,经过一番思考后,我决定使用mock .return_value。
@patch('classToTest._get_xml')
def computetest(self, get_xml):
get_xml.return_value = _get_fake_xml('filenam.xml')
test = ClassToTest()
toassert = test.compute()
我想知道是否有办法在补丁装饰器中添加参数。
答案 1 :(得分:0)
你能把它放在封口吗?您可以从仍然可以访问_get_fake_xml
范围的_get_fake_xml
方法返回一个函数,如下所示:
from mock import patch
class ClassTest():
@patch('classToTest._get_xml', _get_fake_xml(mock.Mock(), 'filenam.xml'))
def computetest(self):
test = ClassToTest()
toassert = test.compute()
#assert whatever
#self.assert(...)
def _get_fake_xml(self, objects, filename):
py_file = os.path.abspath(__file__)
py_dir = os.path.dirname(py_file)
xml_file = os.path.join(py_dir, filename)
xml_tree = objectify.parse(xml_file)
# don't know much about mock, but I include *a in case this is passed self
return lambda *a: xml_tree.getroot()