在@bman的回答基础上进行扩展,利用类似于集合的对象的比较运算符被重载为子集运算符的特点,您可以使用assertGreaterEqual
以获得(可以说是)更好的错误消息。
比较这两个测试:
import unittest
class SubsetTestCase(unittest.TestCase):
def test_dict_1(self):
a = {1: 1, 2: 2}
b = {1: 2}
self.assertTrue(a.items() >= b.items())
def test_dict_2(self):
a = {1: 1, 2: 2}
b = {1: 2}
self.assertGreaterEqual(a.items(), b.items())
unittest.main()
结果是:
======================================================================
FAIL: test_dict_1 (__main__.SubsetTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test.py", line 9, in test_dict_1
self.assertTrue(a.items() >= b.items())
AssertionError: False is not true
======================================================================
FAIL: test_dict_2 (__main__.SubsetTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test.py", line 15, in test_dict_2
self.assertGreaterEqual(a.items(), b.items())
AssertionError: dict_items([(1, 1), (2, 2)]) not greater than or equal to dict_items([(1, 2)])
----------------------------------------------------------------------
使用 assertGreaterEqual
,你可以从错误消息中查看两个字典的内容。
assertDictEqual
而不是assertEqual
,以获得更好的失败消息。 - Paul PriceassertEqual(b, a | b)
或assertEqual(b, {**a, **b})
。根据文档[https://peps.python.org/pep-0584/#specification],如果一个键在两个操作数中都出现,则以右操作数中的值为准。 - mosi_khaa
中与b
不同,则a
不是b
的子集。若要忽略这些值,请使用a.keys().issubset(b.keys())
或a.keys() <= b.keys()
。 - user3064538