2016-05-15 2 views
3

方法置き換える:Pythonのmock.patch:私はモックとクラスでメソッドを置き換えるしたい

from unittest.mock import patch 

class A(object): 
    def method(self, string): 
     print(self, "method", string) 

def method2(self, string): 
    print(self, "method2", string) 

with patch.object(A, 'method', side_effect=method2): 
    a = A() 
    a.method("string") 
    a.method.assert_called_with("string") 

を...しかし、私は、コンピュータによって侮辱を受ける:

TypeError: method2() missing 1 required positional argument: 'string' 

答えて

4

side_effectパラメータは、methodへのコールがmethod2への呼び出しを副作用として持つことを示します。

あなたはおそらくしたいことは、あなたがnewパラメータを使用していますが、これはmethod2method1を交換にある:

with patch.object(A, 'method', new=method2): 

は、あなたがこれを行うならば、あなたはとして、assert_called_withを使用できないことに注意してくださいこれは実際のMockオブジェクトでのみ利用可能です。

代替は、完全に、ちょうどこれがそれにすべてのコールを覚えて、あなたがassert_called_withを行うことができますMockインスタンス、とmethodに置き換えられます

with patch.object(A, 'method'): 

を行うmethod2を廃止することです。

関連する問題