我希望模拟具有以下要求的课程:
- 该类具有公共读/写属性,在其
__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
类化、 useattach_mock()
和 and mock_add_spec()
,但总是遇到一些死胡同。
我正在使用标准的模拟库。