2017-12-18 169 views
1

在編寫測試時,我經常需要模擬幾個類的方法。目前我正在通過嵌套with陳述包含mock引用例如什麼是嘲諷Python中的類的多個方法的乾淨方式?

from ... import A 


def test_sample(self) 
    instance = A() 
    with mock(A, 'function_1', return_value=1): 
     with mock(A, 'function_2', return_value=2): 
      with mock(A, 'function_3', return_value=3): 
       assert A.function_4, 10 

是否有一個整潔的/推薦的方式做到這一點?能夠刪除幾個嵌套的呼叫將是很好的!

在這個過程中,可能有也可能沒有其他類沒有被模擬的方法。

+0

是否有'其他方法一個會在測試中運行的,沒有被嘲笑的? – solarissmoke

+0

謝謝@solarissmoke我已經更新了這個問題,補充說可能有也可能沒有非模擬方法 –

回答

1

你不需要有嵌套上下文管理器 - 你可以修補一氣呵成所有的方法:

def test_sample(self) 
    instance = A() 
    with (mock(A, 'function_1', return_value=1), 
      mock(A, 'function_2', return_value=2), 
      mock(A, 'function_3', return_value=3)): 

     assert A.function_4, 10 

或者您可以使用patch.multiple

from unittest import patch 

def test_sample(self) 
    instance = A() 
    with patch.multiple(A, function_1=2, function_2=2, function_3=3) as patched_values: 
     assert A.function_4, 10