代码之家  ›  专栏  ›  技术社区  ›  Jerinaw

Python3 Unittest:如何使用操作符与MagicMocks进行比较

  •  0
  • Jerinaw  · 技术社区  · 7 年前

    最简单的是从一个例子开始。。。

    要测试的示例代码:

    type1_instance1 = f1()
    type1_instance2 = f2()
    
    compareResult = type1_instance1 < type1_intstance2
    
    if compareResult:
        print(type1_instance1.generate_value())
    

    测试时 f1 和 f2 被嘲笑返回魔法锁。以便可以对这些返回值调用自定义类的方法。

    当比较代码被执行时,我得到了错误

    “MagicMock”和“MagicMock”的实例之间不支持“<”

    我的解决方案是:

    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
    
    0 回复  |  直到 7 年前
        1
  •  2
  •   blhsing    7 年前

    你应该重写 return_value __lt__ 的属性 MagicMock 对象,并使用 patch 使 f1 和 f2 返回定制的 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