次の要件を持つクラスをモックしたいと思います。
- クラスには、その
__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
クラスのサブクラス化、use attach_mock()
、およびを含むいくつかのアプローチをすでに試しましたmock_add_spec()
が、常に行き詰まりに遭遇しました。
標準のモックライブラリを使用しています。