Why pyhamcrest is failing contains() matcher for list of 2 or more dicts, but works fine with list of 1 dict?
What is the best way to write hamcrest (pyhamcrest) matcher for list of dicts?
First test passed, second failed in this unittest example.
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 output:
File "/usr/local/lib/python3.6/site-packages/hamcrest/core/assert_that.py",
line 57, in _assert_match raise AssertionError(description)
AssertionError:
Expected: a sequence containing [a dictionary containing {'a': <1>, 'b': <2>}]
but: Not matched: <{'a': 1, 'b': 2}>
Ran 1 test in 0.027s
FAILED (failures=1)
Process finished with exit code 1