我想模拟一个有以下要求的班级:
__init__()
方法中定义的公共读/写属性autospec=True
,这样在调用时将严格检查类的API简化的类示例:
class MyClass():
id = 0
def __init__(self, x=0.0, y=1.0):
self.x = x
self.y = y
self.id = MyClass._id
MyClass.id +=1
def calc_x_times_y(self):
return self.x*self.y
def calc_x_div_y(self, raise_if_y_not_zero=True):
try:
return self.x/self.y
except ZeroDivisionError:
if raise_if_y_not_zero:
raise ZeroDivisionError
else:
return float('nan')
就属性而言,我需要模拟对象的行为与原始对象相同:
x,y
属性
但是mock方法调用应该被mock拦截,并验证其调用签名最好的办法是什么?在
编辑
我已经尝试过几种方法,包括子类化Mock
类,使用attach_mock()
,和mock_add_spec()
,但总是遇到一些死胡同。在
我使用的是标准的mock库。在
很抱歉挖出一篇旧文章,但是可以让您准确地完成您想要实现的事情的方法是修补}并在那里设置{},而不是嘲笑整个类的创建。在
calc_x_times_y
和{比如:
由于没有答案,我将发布对我有效的方法(不一定是最好的方法,但这里是这样):
我创建了一个模拟工厂,它创建了一个
Mock()
对象,使用描述的here语法设置其id
属性,并返回该对象:现在,我可以为我的测试修补
^{pr2}$MyClass()
构造函数:相关问题 更多 >
编程相关推荐