除一个键外,断言等于两个命令

2024-04-23 10:13:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要测试一个函数,它将在django中返回一个带有rest_framework.test.APITestCase's assertEqual的dict。格言是这样的:

{
    "first_name": "John",
    "last_name": "Doe",
    "random": some random number
}

除了random键外,我如何用合适的结果检查返回的dict

我的意思是assertEqual(a, result)应该返回True如果这两个dict被通过:

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
]

在不考虑每个dict中的random键的情况下,应该是相等的

我必须循环浏览列表并逐个比较dicts,还是有一个最快的解决方案


Tags: name列表randomresult解决方案johndictlist
2条回答

您可以创建字典的副本并从中弹出随机数

a_copy = a.copy()
a_copy.pop("random")
result_copy = result.copy()
result_copy.pop("random")

assertEqual(a_copy, result_copy)

如果不想保留原始版本,请直接在现有词典上使用pop()

如果您有两个dict列表,您可以使用zip对这两个dict进行迭代并比较每一对

for l, r in zip(copy.deepcopy(list_of_dicts), copy.deepcopy(expected_result_list)):
    l.pop("random")
    r.pop("random")
    assertEqual(l, r)

您可以复制和修改其中一个DICT以更正差异,而不是同时复制和修改两个副本:

a_copy = a.copy()
a_copy['random'] = b['random']
assertEqual(a_copy, b)

相关问题 更多 >