Python3 Unittest:如何与使用运算符的MagicMocks进行比较

问题描述 投票:2回答:1

最简单的事情就是从一个例子开始......

要测试的示例代码:

type1_instance1 = f1()
type1_instance2 = f2()

compareResult = type1_instance1 < type1_intstance2

if compareResult:
    print(type1_instance1.generate_value())

实例1和2是某些自定义类的实例。

在测试时,f1f2被嘲笑返回MagicMocks。这样就可以在返回的值上调用自定义类的方法。

执行比较代码时,我收到错误

'MagicMock'和'MagicMock'实例之间不支持'<'

启用MagicMocks与重载运算符一起使用的最佳方法是什么?

这是我的解决方案:

def __lt__(self, other):
    return mock.MagicMock

compareable_MagicMock_Instance = MagicMock()
setattr(compareable_MagicMock_Instance, '__lt__', __lt__)

f1.return_value = compareable_MagicMock_Instance
f2.return_value = another_compareable_MagicMock_Instance
python python-3.x python-unittest
1个回答
1
投票

您应该覆盖return_value对象的__lt__属性的MagicMock属性,并使用patch使f1f2返回自定义的MagicMock实例:

from unittest.mock import patch, MagicMock
def f1():
    pass
def f2():
    pass
compareable_MagicMock_Instance = MagicMock()
compareable_MagicMock_Instance.__lt__.return_value = True
with patch('__main__.f1', return_value=compareable_MagicMock_Instance), patch('__main__.f2', return_value=compareable_MagicMock_Instance):
    type1_instance1 = f1()
    type1_instance2 = f2()
    compareResult = type1_instance1 < type1_instance2
    if compareResult:
        print('type1_instance1 is less than type1_instance2')

这输出:

type1_instance1 is less than type1_instance2
© www.soinside.com 2019 - 2024. All rights reserved.