首页 > 解决方案 > Python assert_has_calls 失败,对象参数的属性顺序不同

问题描述

我有这样的断言-

obj_instance_1 = SomeType(a=1,b=2,c=3)
//invoke the test function
mock_calls = [
            mock.call(param1=obj_instance_1, param2=mocked_obj),
            mock.call(param1=obj_instance_1, param2=mocked_obj),
        ]
mock_instance.assert_has_calls(mock_calls)

assert_has_calls断言失败并出现错误-

Expected: [call(param2=<MagicMock name='SomeName' id='140133686336928'>, param1=<SomeType(a=1,b=2,c=3)>),
call(param2=<MagicMock name='SomeName' id='140133686336928'>, param1=<SomeType(a=1,b=2,c=3)>)]
Actual: 
[call(param2=<MagicMock name='SomeName' id='140133686336928'>, param1=<SomeType(b=2,a=1,c=3)>),
call(param2=<MagicMock name='SomeName' id='140133686336928'>, param1=<SomeType(b=2,a=1,c=3)>)]

我看到的唯一区别是 param1 对象的属性顺序在预期和实际中不同。但是对象的属性值是相同的。为什么会导致测试失败?

标签: pythonpython-3.xpython-3.6pytestpython-unittest

解决方案


推荐阅读