PyHamcrest包含字典列表的匹配器

2024-04-29 22:34:08 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么pyhamcrest对2个或多个dict的列表匹配器失败,但对1个dict的列表工作得很好?在

PyHamcrest contains

为dicts列表编写hamcrest(pyhamcrest)matcher的最佳方法是什么?在

在这个unittest示例中,第一个测试通过,第二个测试失败。在

import unittest
from hamcrest import contains, assert_that, has_entries

class ContainsTest(unittest.TestCase):

    dict1, dict2 = {"a": 1, "b": 2}, {"a": 1, "b": 2}
    sequence1, sequence2 = list(), list()
    sequence1.append(dict1)
    sequence2.append(dict1)
    sequence2.append(dict2)

    @staticmethod
    def test_sequence():
        assert_that(ContainsTest.sequence1, contains(has_entries({'a': 1, 'b': 2})))
        assert_that(ContainsTest.sequence2, contains(has_entries({'a': 1, 'b': 2})))


if __name__ == "__main__":  
    ContainsTest.test_sequence()

Unittest输出:

^{pr2}$

Tags: 列表thatassertunittestdictentrieshascontains
1条回答
网友
1楼 · 发布于 2024-04-29 22:34:08

您要找的是^{},而不是{}。在

有点令人困惑的是,PyHamcrest的contains并不是__contains__魔法方法意义上的包容检查。它的语义是模仿原始Hamcrest的^{} matcher。它不测试列表中的某些元素是否与给定的匹配器匹配;它希望为每个列表元素提供一个单独的匹配器,并将匹配器应用于列表的相应元素。has_item是检查某些项是否匹配的项。在

引用docs

Matches if sequence’s elements satisfy a given list of matchers, in order.

Parameters: match1,... – A comma-separated list of matchers.
This matcher iterates the evaluated sequence and a given list of matchers, seeing if each element satisfies its corresponding matcher.

Any argument that is not a matcher is implicitly wrapped in an equal_to matcher to check for equality.

您为两个元素的列表提供了一个匹配器。皮哈姆克雷斯特想要两个火柴。第二个词不匹配。在

相关问题 更多 >