gpt4 book ai didi

python - 在单元测试中比较字典时如何忽略某些值?

转载 作者:行者123 更新时间:2023-12-04 12:21:03 24 4
gpt4 key购买 nike

我想断言两个字典是相等的,使用 Python 的 unittest ,但忽略字典中某些键的值,使用方便的语法,如下所示:

from unittest import TestCase

class Example(TestCase):
def test_example(self):
result = foobar()
self.assertEqual(
result,
{
"name": "John Smith",
"year_of_birth": 1980,
"image_url": ignore(), # how to do this?
"unique_id": ignore(), #
},
)

明确地说,我想检查所有四个键是否存在,并且我想检查 "name" 的值和 "year_of_birth" ,(但不是 "image_url""unique_id”),我想检查是否不存在其他键。

我知道我可以修改 result这里是 "image_url" 的键值对和 "unique_id" ,但我想要更方便的东西,不会修改原始字典。

(这是受到 Perl 5 的 Test::Deep 的启发。)

最佳答案

unittest.mock.ANY 比较等于一切。

from unittest import TestCase
import unittest.mock as mock

class Example(TestCase):
def test_happy_path(self):
result = {
"name": "John Smith",
"year_of_birth": 1980,
"image_url": 42,
"unique_id": 'foo'
}
self.assertEqual(
result,
{
"name": "John Smith",
"year_of_birth": 1980,
"image_url": mock.ANY,
"unique_id": mock.ANY
}
)

def test_missing_key(self):
result = {
"name": "John Smith",
"year_of_birth": 1980,
"unique_id": 'foo'
}
self.assertNotEqual(
result,
{
"name": "John Smith",
"year_of_birth": 1980,
"image_url": mock.ANY,
"unique_id": mock.ANY
}
)

def test_extra_key(self):
result = {
"name": "John Smith",
"year_of_birth": 1980,
"image_url": 42,
"unique_id": 'foo',
"maiden_name": 'Doe'
}
self.assertNotEqual(
result,
{
"name": "John Smith",
"year_of_birth": 1980,
"image_url": mock.ANY,
"unique_id": mock.ANY
}
)

def test_wrong_value(self):
result = {
"name": "John Smith",
"year_of_birth": 1918,
"image_url": 42,
"unique_id": 'foo'
}
self.assertNotEqual(
result,
{
"name": "John Smith",
"year_of_birth": 1980,
"image_url": mock.ANY,
"unique_id": mock.ANY
}
)

关于python - 在单元测试中比较字典时如何忽略某些值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57624731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com