模拟/修补对象属性以测试方法(还需要访问其他类方法) [英] Mocking/patching an object attribute to test a method (also need access to other class methods)

查看:0
本文介绍了模拟/修补对象属性以测试方法(还需要访问其他类方法)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个要用pytest测试的类的方法,例如下面的方法_method_of_interest

class MyClass():
    def __init__(self, stuff):
     ...
    ..
    ..
    def _method_of_interest(self, list1, list2):
        """
        some logic that depends on list1, list2, and self.relevant_info
        Also calls self._helper_method(list)
        """
        output = list1 + list2 + self._helper_method(list2) + self.relevant_info

  
        return output 

    def _helper_method(self, lista):
        """
        Helper method depends on lista and self.relevant_info
        """
        
        return lista + self.relevant_info

我希望能够使用不同的list1、list2和self.related_info值测试_method_of_interest。因此,我主要需要能够为self.relevant_info指定值。使用Python执行此操作的最简洁方法是什么?

推荐答案

最简单的方法是使用内置unittest框架。

定义多个测试用例。在每个测试中,您都使用为该测试定义的stuff创建一个新的MyClass对象。然后将my_CLASS._METHOD_OF_INTERECT的输出与一些预定义的预期输出(使用unitest.TestCase的assertEquity方法)进行比较。当然,您可以对多个不同列表进行多个测试1&;2。

编辑: 如果您不能通过构造函数本身设置relevant_info,那么您总是可以手动调整它。类属性在Python中不受保护,没有人可以阻止您这样做:

my_class = MyClass(unrelevant_info)
my_class.relevant_info = relevant_info

但如果您需要这样做,则代码中有可疑之处。

这篇关于模拟/修补对象属性以测试方法(还需要访问其他类方法)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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