python - 在 python 中使用带有参数的另一个可重用方法来模拟一个方法

标签 python django mocking

我有一个实例方法,我想使用模拟来测试它。我试图用另一种带有参数的方法替换此实例类中的方法之一。

要测试的类:

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'))

但这没有用。然后我尝试将文件名设置为全局变量,但出现以下错误:

ClassToTest 实例中不存在 self.filename。

基本上我希望能够将 _get_fake_xml 与任何其他文件名一起使用。

有什么建议吗?

最佳答案

所以,经过一番思考,我决定使用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()

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

关于python - 在 python 中使用带有参数的另一个可重用方法来模拟一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13090104/

相关文章:

django - 在django的get方法中隐藏csrf token

java - 使用 easymock 注入(inject)静态方法/字段?

python - 覆盖字符串列表中属性的 getter 和 setter

python - 如何在python中用字符串初始化一系列列表?

python - django mssql 安装程序 : error initializing DB

python - 与 Django 的惰性 psql 连接

python - 在 Python 中对嵌套对象(DynamoDB 和表)使用 Mock

angular 2 - 具有 injectionToken 依赖性的模拟组件

python - 如何编写一个函数来仅计算类数组对象的前 n 项并返回它们的和?

python - 如何在 flask 中建立一个获取表单的帖子