什么是嘲讽Python中的类的多个方法的干净方式?

什么是嘲讽Python中的类的多个方法的干净方式?

问题描述:

在编写测试时,我经常需要模拟几个类的方法。目前我正在通过嵌套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我已经更新了这个问题,补充说可能有也可能没有非模拟方法 –

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

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