7

我想知道在 pytest 中进行断言时是否有一种方法可以忽略 dict 中的元素。我们有一个断言,它将比较一个包含 last_modified_date 的列表。日期将始终更新,因此无法确保日期与最初输入的日期相同。

例如:

{'userName':'bob','lastModified':'2012-01-01'}

谢谢杰

4

3 回答 3

13

我通过创建等于一切的对象解决了这个问题:

class EverythingEquals:
    def __eq__(self, other):
        return True

everything_equals = EverythingEquals()

def test_compare_dicts():
    assert {'userName':'bob','lastModified':'2012-01-01'} == {'userName': 'bob', 'lastModified': everything_equals}

这样,它将被比较为相同的,并且您将检查'lastModified'您的字典中是否有。

于 2016-06-07T13:18:58.403 回答
5

ANY系统库中有一个很好的符号unittest.mock,可以用作通配符。尝试这个

from unittest.mock import ANY
actual = {'userName':'bob', 'lastModified':'2012-01-01'}
expected = {'userName':'bob', 'lastModified': ANY}
assert actual == expected
于 2021-04-16T11:40:48.973 回答
1

在断言之前制作副本dict并从副本中删除lastModified密钥,或将其设置为静态值。由于delanddict.update()之类的不返回dict,您可以为此编写一个辅助函数:

def ignore_keys(d, *args):
    d = dict(d)
    for k in args:
        del d[k]
    return d

assert ignore_keys(myDict, "lastModified") == {"userName": "bob")
于 2013-08-05T18:11:02.510 回答