2016-05-15 67 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作爲副作用

你可能想要的是取代method1method2,您可以通過使用new參數做:

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

請注意,如果你這樣做,你不能使用assert_called_with,如這僅適用於實際的Mock對象。

另一種方法是完全與method2做掉,只是做

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

這將與Mock例如,它可以記住所有的呼叫,並允許你做assert_called_with取代method