我想知道在pytest中执行断言时是否有办法忽略dict中的元素.我们有一个断言,它将比较包含last_modified_date的列表.日期将始终更新,因此无法确定日期是否等于最初输入的日期.
例如:
{'userName':'bob','lastModified':'2012-01-01'}
Run Code Online (Sandbox Code Playgroud)
谢谢Jay
vid*_*ige 21
ANY
系统库中有一个优秀的符号unittest.mock
可以用作通配符。尝试这个
from unittest.mock import ANY
actual = {'userName':'bob', 'lastModified':'2012-01-01'}
expected = {'userName':'bob', 'lastModified': ANY}
assert actual == expected
Run Code Online (Sandbox Code Playgroud)
小智 7
我通过创建等于所有东西的对象解决了这个问题:
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}
Run Code Online (Sandbox Code Playgroud)
这样它将被比较为相同,你也会检查'lastModified'
你的dict.
在断言之前,创建 的副本并从副本中dict
删除密钥,或将其设置为静态值。lastModified
由于del
和dict.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")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1245 次 |
最近记录: |