模拟/修补对象属性以测试方法(还需要访问其他类方法) [英] Mocking/patching an object attribute to test a method (also need access to other class methods)
本文介绍了模拟/修补对象属性以测试方法(还需要访问其他类方法)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个要用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屋!
查看全文