Bre*_*nik 5 python json magicmock
在python中编写一些单元测试并使用MagicMock模拟一个接受JSON字符串作为输入的方法.在我的单元测试中,我想声明它是用给定的参数调用的,但是我遇到了assert语句的问题,因为除了字符串的assert语句之外,dict中对象的排序无关紧要.我想在下面尝试实现的简化示例.
mock_funct = MagicMock()
# mocked function called elsewhere
expected = {"a":"a", "b":"b"}
mock_funct.assert_called_once_with(json.dumps(expected))
Run Code Online (Sandbox Code Playgroud)
上述可以通过或由于可能无法在字典中键的任意排序,当它被转储到JSON,即两个'{"a":"a", "b":"b"}'和'{"b":"b", "a":"a"}'有效转储,但人会失败,一个会传球,但我想编写测试,使要么会通过.
mgi*_*son 12
不幸的是,你需要在这里做自己的检查.您可以通过它的call_args_list属性从模拟中获取调用(或者,call_args在这种情况下,因为您已经断言它只被调用一次).我假设你unittest在我的示例代码中使用 - 但它应该很容易适应任何测试框架......
mock_funct.assert_called_once_with(mock.ANY)
call = mock_funct.call_args
call_args, call_kwargs = call # calls are 2-tuples of (positional_args, keyword_args)
self.assertEqual(json.loads(call_args[0]), expected)
Run Code Online (Sandbox Code Playgroud)
我仍然习惯assert_called_once_with确保函数只用一个位置参数调用一次,但是然后我打开调用来查看该参数以检查它是否正确.
| 归档时间: |
|
| 查看次数: |
1773 次 |
| 最近记录: |