2017-05-07 92 views
0

通過I類有這樣的事情:懲戒作爲參數

class ThisClass: 
    def my_method(self, param): 
     # Do normal stuff 
     pass 

class OtherClass: 
    def my_method(self, param): 
     # Do crazy stuff 
     pass 

def useful_function(some_class, some_param): 
    internal = some_class() 
    result = internal.my_method(some_param) 
    uses_result(result) 

# The useful_function can be called with any of the classes 
useful_function(ThisClass, 10) 

我想要做的是檢驗是否my_method被稱爲內useful_function。我試圖嘲笑類和它的方法,但它沒有工作:

# Inside the test class 
def test_case(self): 
    MockSomeClass = mock.Mock() 
    MockSomeClass.my_method.return_value = 'Some useful answer' 
    useful_function(MockSomeClass, 100) 
    MockSomeClass.my_method.assert_called_once() 

誤差依賴於我用的my_method結果在uses_result的事實,但如預期的那樣嘲笑方法不返回'Some useful answer'。我究竟做錯了什麼?

回答

1

的模擬必須考慮到的實例some_class()還有:

MockSomeClass.return_value.my_method.return_value = 'Some useful answer' 

internal = some_class() 
internal.my_method() # 'Some useful answer 
+0

它的工作就像一個魅力。只是爲了完成答案,斷言必須像'MockSomeClass.return_value.my_method.assert_called_once()'完成。謝謝! – lucastamoios