在pytest中断言时忽略dict中的元素

时间:2013-08-05 17:58:27

标签: python pytest

我想知道在pytest中执行断言时是否有办法忽略dict中的元素。我们有一个断言,它将比较包含last_modified_date的列表。日期将始终更新,因此无法确定日期是否等于最初输入的日期。

例如:

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

由于 杰

3 个答案:

答案 0 :(得分:6)

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

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'

答案 1 :(得分:1)

在声明之前,复制dict并从副本中删除lastModified键,或将其设置为静态值。由于deldict.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")

答案 2 :(得分:0)

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

from unittest.mock import ANY
actual = {'userName':'bob', 'lastModified':'2012-01-01'}
expected = {'userName':'bob', 'lastModified': ANY}
assert actual == expected