用python中的参数嘲笑另一个可重用方法的方法 [英] mocking a method with another reusable method with arguments in python

查看:148
本文介绍了用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')
def calculateetest(self,get_xml )
get_xml.return_value = _get_fake_xml('filenam.xml')
test = ClassToTest()
toassert = test.compute()
/ pre>

我想知道有没有办法在补丁装饰器中添加参数。


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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆