2015-09-27 77 views
2

是否有可能使模擬正常python返回的名稱返回的函數。作爲函數返回:return()

爲什麼:那麼,在單元測試,我們可以從方法打破這種具有無限循環:

while True: 
    ... 
    time.sleep(x) 

我想要做這樣的事情...

def return(y): 
    ... 

self.mock_module['time'].sleep.side_effect = [return(z)] 

回答

3

號這是不可能。但是,您可以這樣做:

condition = [] 
while not condition: 
    ... 

self.mock_module['time'].sleep.side_effect = [lambda:condition.append(1)] 
1

您不能將return函數作爲函數 - 因爲該函數只是從它自身返回。我認爲你正在尋找的解決方案是一個例外:

class StopTest(Exception): 
    pass 

def stopTest(): 
    raise StopTest() 

... 

    self.mock_module['time'].sleep.side_effect = [stopTest] 

,然後用assertRaises期待您的單元測試StopTest例外。

+0

是的,我正在這樣做,但我有點不喜歡它...... – urosjarc

+0

好吧,沒有味道的會計。 ;-) –

+0

沒什麼個人的,但在side_effect調用異常是有點骯髒。 :P。但是,你是對的:D。 – urosjarc