【发布时间】:2012-11-25 09:14:53
【问题描述】:
我希望模拟一个具有以下要求的类:
- 该类具有公共读/写属性,在其
__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')
就属性而言,我需要模拟对象的行为与原始对象一样:
- 它应该自动增加分配给每个新创建的模拟对象的 ID
- 它应该允许访问其
x,y属性 但是模拟方法调用应该被模拟拦截,并验证其调用签名
最好的解决方法是什么?
编辑
我已经尝试了几种方法,包括继承Mock 类、使用attach_mock() 和mock_add_spec(),但总是遇到一些死胡同。
我正在使用标准的mock 库。
【问题讨论】:
标签: python properties attributes mocking subclassing