assertEqual 除一个键外的两个字典
assertEqual two dicts except one key
我需要测试一个函数,它将 return 一个带有 django
中的 rest_framework.test.APITestCase's assertEqual
的字典。字典是这样的:
{
"first_name": "John",
"last_name": "Doe",
"random": some random number
}
除了 random
键,我如何用我合适的结果检查 returned 字典?
我的意思是 assertEqual(a, result)
应该 return True
如果这两个命令通过:
a = {
"first_name": "John",
"last_name": "Doe",
"random": 12
}
result = {
"first_name": "John",
"last_name": "Doe",
"random": 24
}
在 assertEqual
中是否有任何例外情况,或者我必须使用 assert
?
更新:
感谢大家,我得到了很好的解决方案,但是如果我得到一个包含这些命令的列表,比如:
assertEqual(list_of_dicts, expected_result_list)
我的意思是在这两个列表中:
list1 = [
d1,
d2,
d3
]
list2 = [
d1,
d2,
d3
]
应该相等而不考虑每个字典中的random
键
我是否必须循环遍历列表并逐一比较字典,还是有最快的解决方案?
您可以创建字典的副本并从那里弹出随机数
a_copy = a.copy()
a_copy.pop("random")
result_copy = result.copy()
result_copy.pop("random")
assertEqual(a_copy, result_copy)
如果您不想保留原文,请直接在现有词典上使用pop()
。
如果你有两个字典列表,你可以用 zip
遍历它们并比较每一对
for l, r in zip(copy.deepcopy(list_of_dicts), copy.deepcopy(expected_result_list)):
l.pop("random")
r.pop("random")
assertEqual(l, r)
与其复制和修改两个副本,不如复制和修改其中一个字典以更正差异:
a_copy = a.copy()
a_copy['random'] = b['random']
assertEqual(a_copy, b)
我需要测试一个函数,它将 return 一个带有 django
中的 rest_framework.test.APITestCase's assertEqual
的字典。字典是这样的:
{
"first_name": "John",
"last_name": "Doe",
"random": some random number
}
除了 random
键,我如何用我合适的结果检查 returned 字典?
我的意思是 assertEqual(a, result)
应该 return True
如果这两个命令通过:
a = {
"first_name": "John",
"last_name": "Doe",
"random": 12
}
result = {
"first_name": "John",
"last_name": "Doe",
"random": 24
}
在 assertEqual
中是否有任何例外情况,或者我必须使用 assert
?
更新:
感谢大家,我得到了很好的解决方案,但是如果我得到一个包含这些命令的列表,比如:
assertEqual(list_of_dicts, expected_result_list)
我的意思是在这两个列表中:
list1 = [
d1,
d2,
d3
]
list2 = [
d1,
d2,
d3
]
应该相等而不考虑每个字典中的random
键
我是否必须循环遍历列表并逐一比较字典,还是有最快的解决方案?
您可以创建字典的副本并从那里弹出随机数
a_copy = a.copy()
a_copy.pop("random")
result_copy = result.copy()
result_copy.pop("random")
assertEqual(a_copy, result_copy)
如果您不想保留原文,请直接在现有词典上使用pop()
。
如果你有两个字典列表,你可以用 zip
遍历它们并比较每一对
for l, r in zip(copy.deepcopy(list_of_dicts), copy.deepcopy(expected_result_list)):
l.pop("random")
r.pop("random")
assertEqual(l, r)
与其复制和修改两个副本,不如复制和修改其中一个字典以更正差异:
a_copy = a.copy()
a_copy['random'] = b['random']
assertEqual(a_copy, b)