summaryrefslogtreecommitdiff
path: root/googlemock/docs
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2020-10-13 10:14:25 -0400
committerDerek Mauro <dmauro@google.com>2020-10-14 18:25:40 -0400
commitd11c76175f24f23a1fd316fe37d3743133479e27 (patch)
tree8aa1ee355e320b5772f3b78f6bf01460015a6485 /googlemock/docs
parent2cf1f99b97e5a50b5d9db3d5450a6b474e36b79b (diff)
downloadgoogletest-git-d11c76175f24f23a1fd316fe37d3743133479e27.tar.gz
Googletest export
Suggest using generic lambdas for composing macros. Long chains of macros hurt legibility; generic lambdas are an easy way to abbreviate them, but are not an obvious solution to casual users. Compare: EXPECT_THAT(f(), ElementsAre( Property(&MyClass::foo, Property(&OtherClass::bar, Contains("x"))), Property(&MyClass::foo, Property(&OtherClass::bar, Contains("y")))); to: EXPECT_THAT(f(), ElementsAre(HasFooBar("x"), HasFooBar("y"))); PiperOrigin-RevId: 336870137
Diffstat (limited to 'googlemock/docs')
-rw-r--r--googlemock/docs/cook_book.md16
1 files changed, 16 insertions, 0 deletions
diff --git a/googlemock/docs/cook_book.md b/googlemock/docs/cook_book.md
index f8e9a50f..817d5cab 100644
--- a/googlemock/docs/cook_book.md
+++ b/googlemock/docs/cook_book.md
@@ -859,6 +859,22 @@ using ::testing::Not;
NULL));
```
+Matchers are function objects, and parametrized matchers can be composed just
+like any other function. However because their types can be long and rarely
+provide meaningful information, it can be easier to express them with C++14
+generic lambdas to avoid specifying types. For example,
+
+```cpp
+using ::testing::Contains;
+using ::testing::Property;
+
+inline constexpr auto HasFoo = [](const auto& f) {
+ return Property(&MyClass::foo, Contains(f));
+};
+...
+ EXPECT_THAT(x, HasFoo("blah"));
+```
+
### Casting Matchers {#SafeMatcherCast}
gMock matchers are statically typed, meaning that the compiler can catch your