私はJavaのMockitoなど、他の言語の他のモックライブラリに精通していますが、Pythonのmock
ライブラリは私の人生を混乱させます。
次のクラスをテストしたいと思います。
class MyClassUnderTest(object):
def submethod(self, *args):
do_dangerous_things()
def main_method(self):
self.submethod("Nothing.")
私のテストでは、main_method
が実行されたときにsubmethod
が呼び出され、正しい引数で呼び出されたことを確認したいと思います。 submethod
は危険なことをするので、実行したくありません。
どうやってこれを始めたらいいのか全くわかりません。モックのドキュメントは非常に理解しにくく、何をモックするのか、どのようにモックするのかわかりません。
main_method
の機能をそのままにして、submethod
関数をモックするにはどうすればよいですか?
あなたが探しているのはmock.patch.object
with mock.patch.object(MyClassUnderTest, "submethod") as submethod_mocked:
submethod_mocked.return_value = 13
MyClassUnderTest().main_method()
submethod_mocked.assert_called_once_with(user_id, 100, self.context,
self.account_type)
ここに小さな説明があります
patch.object(target, attribute, new=DEFAULT,
spec=None, create=False, spec_set=None,
autospec=None, new_callable=None, **kwargs)
オブジェクト(ターゲット)の名前付きメンバー(属性)にモックオブジェクトをパッチします。