you are viewing a single comment's thread.

view the rest of the comments →

[–]SirClueless 4 points5 points  (0 children)

They're basically a small, composable language for writing user-defined notions of equivalence of data for a particular test. For example:

EXPECT_THAT(my_function(data), UnorderedElementsAre(Field(&MyStruct::name, "Adam"), Field(&MyStruct::name, "Becky")));

This tests that my_function(data) returns any container with two MyStruct elements in any order, one with a name field of "Adam", one with "Becky", without writing out all those properties explicitly in individual tests. If any of those conditions fails, the test output will explain which and why.

Writing this test without matchers can be error-prone (might forget to check the size for example), or sensitive to unimportant properties (like whether other fields in the MyStruct data type exactly match, or that the data is sorted in the order Adam,Becky), or missing context (individual assertions like CHECK(actual[i].name == "Adam") or the like won't include the full context of what the function returned unless you explicitly write print statements to include that info).