我遇到了一个例子,我为其编写单元测试的方法中有一些类实例化。实例化的类在其__init__
中有文件打开调用。我不想逐个修补,所以我决定修补整个类。但后来在该方法中,该类被强制转换为一个列表
例如:
class ClassUnderTest:
def hard_to_test_method(self):
something_to_do()
a = ClassWithSideEffects()
b = ClassWithSideEffects()
something_else_to_do()
return list(b)
我没有找到合适的文件来解决这样的案件
经过长时间的谷歌搜索,我在这里找到了解决方案的提示:https://programmaticallyspeaking.com/mocking-__iter__-with-a-magic-mock-in-python.html
幸运的是,解决方案很短:
说明:
c
是一个MagicMock
实例李>mock_class.return_value.__iter__.return_value = [1, 2, 3]
),我们设置了__iter__
magic方法的返回值。当对对象调用len()
时,这个神奇的方法会做出响应李>@patch
行。默认情况下,补丁程序返回一个Mock
实例,但这次我们需要一个MagicMock
实例,因为只有MagicMock
会像我们预期的那样响应len()
调用,因为它比普通的Mock
类对这种情况有更合适的__iter__
处理李>相关问题 更多 >
编程相关推荐