用python中的参数嘲笑另一个可重用方法的方法 [英] mocking a method with another reusable method with arguments in python
问题描述
要测试的类:
Class ClassToTest():
def compute(self):
result = self._get_xml()
返回结果
def _get_xml(self):
#get xml here
return xml
测试文件:
从mock导入补丁
class ClassTest():
@patch(' classToTest._get_xml',_get_fake_xml)
def computeetest(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)
返回xml_tree.getroot()
return xml
现在我如何在补丁中添加_get_fake_xml方法的参数
我尝试过:
@patch('classToTest ._get_xml',_get_fake_xml(mock.Mock(),'filenam.xml'))
但是没有工作。然后我试图将文件名作为全局变量,但是我收到以下错误:
self.filename不存在于ClassToTest实例中。
基本上我想要使用_get_fake_xml与任何其他文件名。
任何建议?
所以,经过一些想法,我决定使用mock .return_value。
@patch('classToTest._get_xml')
/ pre>
def calculateetest(self,get_xml )
get_xml.return_value = _get_fake_xml('filenam.xml')
test = ClassToTest()
toassert = test.compute()
我想知道有没有办法在补丁装饰器中添加参数。
I have an instance method that I want to test using mock. I am trying to substitute one of the method in this instance class with another method that takes arguments.
class to be test:
class ClassToTest(): def compute(self): result = self._get_xml() return result def _get_xml(self): #get xml here return xml
The test file:
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
Now how can I add the arguments for _get_fake_xml method in the patch
I have tried :
@patch('classToTest._get_xml', _get_fake_xml(mock.Mock(), 'filenam.xml'))
But that didn't work. Then I tried to make filename as a global variable but I get the following error:
self.filename does not exist in ClassToTest instance.
Basically I want to be able to reuse _get_fake_xml with any other filename.
Any suggestion?
解决方案So, After some thoughts, I decided to use 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()
I wonder thought if there is a way to add the arguments in the patch decorator.
这篇关于用python中的参数嘲笑另一个可重用方法的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!