xref: /aosp_15_r20/external/googletest/docs/reference/mocking.md (revision 481dde660366d6f317d242b6974ef1b20adb843c)
1*481dde66SAndroid Build Coastguard Worker# Mocking Reference
2*481dde66SAndroid Build Coastguard Worker
3*481dde66SAndroid Build Coastguard WorkerThis page lists the facilities provided by GoogleTest for creating and working
4*481dde66SAndroid Build Coastguard Workerwith mock objects. To use them, add `#include <gmock/gmock.h>`.
5*481dde66SAndroid Build Coastguard Worker
6*481dde66SAndroid Build Coastguard Worker## Macros {#macros}
7*481dde66SAndroid Build Coastguard Worker
8*481dde66SAndroid Build Coastguard WorkerGoogleTest defines the following macros for working with mocks.
9*481dde66SAndroid Build Coastguard Worker
10*481dde66SAndroid Build Coastguard Worker### MOCK_METHOD {#MOCK_METHOD}
11*481dde66SAndroid Build Coastguard Worker
12*481dde66SAndroid Build Coastguard Worker`MOCK_METHOD(`*`return_type`*`,`*`method_name`*`, (`*`args...`*`));` \
13*481dde66SAndroid Build Coastguard Worker`MOCK_METHOD(`*`return_type`*`,`*`method_name`*`, (`*`args...`*`),
14*481dde66SAndroid Build Coastguard Worker(`*`specs...`*`));`
15*481dde66SAndroid Build Coastguard Worker
16*481dde66SAndroid Build Coastguard WorkerDefines a mock method *`method_name`* with arguments `(`*`args...`*`)` and
17*481dde66SAndroid Build Coastguard Workerreturn type *`return_type`* within a mock class.
18*481dde66SAndroid Build Coastguard Worker
19*481dde66SAndroid Build Coastguard WorkerThe parameters of `MOCK_METHOD` mirror the method declaration. The optional
20*481dde66SAndroid Build Coastguard Workerfourth parameter *`specs...`* is a comma-separated list of qualifiers. The
21*481dde66SAndroid Build Coastguard Workerfollowing qualifiers are accepted:
22*481dde66SAndroid Build Coastguard Worker
23*481dde66SAndroid Build Coastguard Worker| Qualifier                  | Meaning                                      |
24*481dde66SAndroid Build Coastguard Worker| -------------------------- | -------------------------------------------- |
25*481dde66SAndroid Build Coastguard Worker| `const`                    | Makes the mocked method a `const` method. Required if overriding a `const` method. |
26*481dde66SAndroid Build Coastguard Worker| `override`                 | Marks the method with `override`. Recommended if overriding a `virtual` method. |
27*481dde66SAndroid Build Coastguard Worker| `noexcept`                 | Marks the method with `noexcept`. Required if overriding a `noexcept` method. |
28*481dde66SAndroid Build Coastguard Worker| `Calltype(`*`calltype`*`)` | Sets the call type for the method, for example `Calltype(STDMETHODCALLTYPE)`. Useful on Windows. |
29*481dde66SAndroid Build Coastguard Worker| `ref(`*`qualifier`*`)`     | Marks the method with the given reference qualifier, for example `ref(&)` or `ref(&&)`. Required if overriding a method that has a reference qualifier. |
30*481dde66SAndroid Build Coastguard Worker
31*481dde66SAndroid Build Coastguard WorkerNote that commas in arguments prevent `MOCK_METHOD` from parsing the arguments
32*481dde66SAndroid Build Coastguard Workercorrectly if they are not appropriately surrounded by parentheses. See the
33*481dde66SAndroid Build Coastguard Workerfollowing example:
34*481dde66SAndroid Build Coastguard Worker
35*481dde66SAndroid Build Coastguard Worker```cpp
36*481dde66SAndroid Build Coastguard Workerclass MyMock {
37*481dde66SAndroid Build Coastguard Worker public:
38*481dde66SAndroid Build Coastguard Worker  // The following 2 lines will not compile due to commas in the arguments:
39*481dde66SAndroid Build Coastguard Worker  MOCK_METHOD(std::pair<bool, int>, GetPair, ());              // Error!
40*481dde66SAndroid Build Coastguard Worker  MOCK_METHOD(bool, CheckMap, (std::map<int, double>, bool));  // Error!
41*481dde66SAndroid Build Coastguard Worker
42*481dde66SAndroid Build Coastguard Worker  // One solution - wrap arguments that contain commas in parentheses:
43*481dde66SAndroid Build Coastguard Worker  MOCK_METHOD((std::pair<bool, int>), GetPair, ());
44*481dde66SAndroid Build Coastguard Worker  MOCK_METHOD(bool, CheckMap, ((std::map<int, double>), bool));
45*481dde66SAndroid Build Coastguard Worker
46*481dde66SAndroid Build Coastguard Worker  // Another solution - use type aliases:
47*481dde66SAndroid Build Coastguard Worker  using BoolAndInt = std::pair<bool, int>;
48*481dde66SAndroid Build Coastguard Worker  MOCK_METHOD(BoolAndInt, GetPair, ());
49*481dde66SAndroid Build Coastguard Worker  using MapIntDouble = std::map<int, double>;
50*481dde66SAndroid Build Coastguard Worker  MOCK_METHOD(bool, CheckMap, (MapIntDouble, bool));
51*481dde66SAndroid Build Coastguard Worker};
52*481dde66SAndroid Build Coastguard Worker```
53*481dde66SAndroid Build Coastguard Worker
54*481dde66SAndroid Build Coastguard Worker`MOCK_METHOD` must be used in the `public:` section of a mock class definition,
55*481dde66SAndroid Build Coastguard Workerregardless of whether the method being mocked is `public`, `protected`, or
56*481dde66SAndroid Build Coastguard Worker`private` in the base class.
57*481dde66SAndroid Build Coastguard Worker
58*481dde66SAndroid Build Coastguard Worker### EXPECT_CALL {#EXPECT_CALL}
59*481dde66SAndroid Build Coastguard Worker
60*481dde66SAndroid Build Coastguard Worker`EXPECT_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))`
61*481dde66SAndroid Build Coastguard Worker
62*481dde66SAndroid Build Coastguard WorkerCreates an [expectation](../gmock_for_dummies.md#setting-expectations) that the
63*481dde66SAndroid Build Coastguard Workermethod *`method_name`* of the object *`mock_object`* is called with arguments
64*481dde66SAndroid Build Coastguard Workerthat match the given matchers *`matchers...`*. `EXPECT_CALL` must precede any
65*481dde66SAndroid Build Coastguard Workercode that exercises the mock object.
66*481dde66SAndroid Build Coastguard Worker
67*481dde66SAndroid Build Coastguard WorkerThe parameter *`matchers...`* is a comma-separated list of
68*481dde66SAndroid Build Coastguard Worker[matchers](../gmock_for_dummies.md#matchers-what-arguments-do-we-expect) that
69*481dde66SAndroid Build Coastguard Workercorrespond to each argument of the method *`method_name`*. The expectation will
70*481dde66SAndroid Build Coastguard Workerapply only to calls of *`method_name`* whose arguments match all of the
71*481dde66SAndroid Build Coastguard Workermatchers. If `(`*`matchers...`*`)` is omitted, the expectation behaves as if
72*481dde66SAndroid Build Coastguard Workereach argument's matcher were a [wildcard matcher (`_`)](matchers.md#wildcard).
73*481dde66SAndroid Build Coastguard WorkerSee the [Matchers Reference](matchers.md) for a list of all built-in matchers.
74*481dde66SAndroid Build Coastguard Worker
75*481dde66SAndroid Build Coastguard WorkerThe following chainable clauses can be used to modify the expectation, and they
76*481dde66SAndroid Build Coastguard Workermust be used in the following order:
77*481dde66SAndroid Build Coastguard Worker
78*481dde66SAndroid Build Coastguard Worker```cpp
79*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(mock_object, method_name(matchers...))
80*481dde66SAndroid Build Coastguard Worker    .With(multi_argument_matcher)  // Can be used at most once
81*481dde66SAndroid Build Coastguard Worker    .Times(cardinality)            // Can be used at most once
82*481dde66SAndroid Build Coastguard Worker    .InSequence(sequences...)      // Can be used any number of times
83*481dde66SAndroid Build Coastguard Worker    .After(expectations...)        // Can be used any number of times
84*481dde66SAndroid Build Coastguard Worker    .WillOnce(action)              // Can be used any number of times
85*481dde66SAndroid Build Coastguard Worker    .WillRepeatedly(action)        // Can be used at most once
86*481dde66SAndroid Build Coastguard Worker    .RetiresOnSaturation();        // Can be used at most once
87*481dde66SAndroid Build Coastguard Worker```
88*481dde66SAndroid Build Coastguard Worker
89*481dde66SAndroid Build Coastguard WorkerSee details for each modifier clause below.
90*481dde66SAndroid Build Coastguard Worker
91*481dde66SAndroid Build Coastguard Worker#### With {#EXPECT_CALL.With}
92*481dde66SAndroid Build Coastguard Worker
93*481dde66SAndroid Build Coastguard Worker`.With(`*`multi_argument_matcher`*`)`
94*481dde66SAndroid Build Coastguard Worker
95*481dde66SAndroid Build Coastguard WorkerRestricts the expectation to apply only to mock function calls whose arguments
96*481dde66SAndroid Build Coastguard Workeras a whole match the multi-argument matcher *`multi_argument_matcher`*.
97*481dde66SAndroid Build Coastguard Worker
98*481dde66SAndroid Build Coastguard WorkerGoogleTest passes all of the arguments as one tuple into the matcher. The
99*481dde66SAndroid Build Coastguard Workerparameter *`multi_argument_matcher`* must thus be a matcher of type
100*481dde66SAndroid Build Coastguard Worker`Matcher<std::tuple<A1, ..., An>>`, where `A1, ..., An` are the types of the
101*481dde66SAndroid Build Coastguard Workerfunction arguments.
102*481dde66SAndroid Build Coastguard Worker
103*481dde66SAndroid Build Coastguard WorkerFor example, the following code sets the expectation that
104*481dde66SAndroid Build Coastguard Worker`my_mock.SetPosition()` is called with any two arguments, the first argument
105*481dde66SAndroid Build Coastguard Workerbeing less than the second:
106*481dde66SAndroid Build Coastguard Worker
107*481dde66SAndroid Build Coastguard Worker```cpp
108*481dde66SAndroid Build Coastguard Workerusing ::testing::_;
109*481dde66SAndroid Build Coastguard Workerusing ::testing::Lt;
110*481dde66SAndroid Build Coastguard Worker...
111*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(my_mock, SetPosition(_, _))
112*481dde66SAndroid Build Coastguard Worker    .With(Lt());
113*481dde66SAndroid Build Coastguard Worker```
114*481dde66SAndroid Build Coastguard Worker
115*481dde66SAndroid Build Coastguard WorkerGoogleTest provides some built-in matchers for 2-tuples, including the `Lt()`
116*481dde66SAndroid Build Coastguard Workermatcher above. See [Multi-argument Matchers](matchers.md#MultiArgMatchers).
117*481dde66SAndroid Build Coastguard Worker
118*481dde66SAndroid Build Coastguard WorkerThe `With` clause can be used at most once on an expectation and must be the
119*481dde66SAndroid Build Coastguard Workerfirst clause.
120*481dde66SAndroid Build Coastguard Worker
121*481dde66SAndroid Build Coastguard Worker#### Times {#EXPECT_CALL.Times}
122*481dde66SAndroid Build Coastguard Worker
123*481dde66SAndroid Build Coastguard Worker`.Times(`*`cardinality`*`)`
124*481dde66SAndroid Build Coastguard Worker
125*481dde66SAndroid Build Coastguard WorkerSpecifies how many times the mock function call is expected.
126*481dde66SAndroid Build Coastguard Worker
127*481dde66SAndroid Build Coastguard WorkerThe parameter *`cardinality`* represents the number of expected calls and can be
128*481dde66SAndroid Build Coastguard Workerone of the following, all defined in the `::testing` namespace:
129*481dde66SAndroid Build Coastguard Worker
130*481dde66SAndroid Build Coastguard Worker| Cardinality         | Meaning                                             |
131*481dde66SAndroid Build Coastguard Worker| ------------------- | --------------------------------------------------- |
132*481dde66SAndroid Build Coastguard Worker| `AnyNumber()`       | The function can be called any number of times.     |
133*481dde66SAndroid Build Coastguard Worker| `AtLeast(n)`        | The function call is expected at least *n* times.   |
134*481dde66SAndroid Build Coastguard Worker| `AtMost(n)`         | The function call is expected at most *n* times.    |
135*481dde66SAndroid Build Coastguard Worker| `Between(m, n)`     | The function call is expected between *m* and *n* times, inclusive. |
136*481dde66SAndroid Build Coastguard Worker| `Exactly(n)` or `n` | The function call is expected exactly *n* times. If *n* is 0, the call should never happen. |
137*481dde66SAndroid Build Coastguard Worker
138*481dde66SAndroid Build Coastguard WorkerIf the `Times` clause is omitted, GoogleTest infers the cardinality as follows:
139*481dde66SAndroid Build Coastguard Worker
140*481dde66SAndroid Build Coastguard Worker*   If neither [`WillOnce`](#EXPECT_CALL.WillOnce) nor
141*481dde66SAndroid Build Coastguard Worker    [`WillRepeatedly`](#EXPECT_CALL.WillRepeatedly) are specified, the inferred
142*481dde66SAndroid Build Coastguard Worker    cardinality is `Times(1)`.
143*481dde66SAndroid Build Coastguard Worker*   If there are *n* `WillOnce` clauses and no `WillRepeatedly` clause, where
144*481dde66SAndroid Build Coastguard Worker    *n* >= 1, the inferred cardinality is `Times(n)`.
145*481dde66SAndroid Build Coastguard Worker*   If there are *n* `WillOnce` clauses and one `WillRepeatedly` clause, where
146*481dde66SAndroid Build Coastguard Worker    *n* >= 0, the inferred cardinality is `Times(AtLeast(n))`.
147*481dde66SAndroid Build Coastguard Worker
148*481dde66SAndroid Build Coastguard WorkerThe `Times` clause can be used at most once on an expectation.
149*481dde66SAndroid Build Coastguard Worker
150*481dde66SAndroid Build Coastguard Worker#### InSequence {#EXPECT_CALL.InSequence}
151*481dde66SAndroid Build Coastguard Worker
152*481dde66SAndroid Build Coastguard Worker`.InSequence(`*`sequences...`*`)`
153*481dde66SAndroid Build Coastguard Worker
154*481dde66SAndroid Build Coastguard WorkerSpecifies that the mock function call is expected in a certain sequence.
155*481dde66SAndroid Build Coastguard Worker
156*481dde66SAndroid Build Coastguard WorkerThe parameter *`sequences...`* is any number of [`Sequence`](#Sequence) objects.
157*481dde66SAndroid Build Coastguard WorkerExpected calls assigned to the same sequence are expected to occur in the order
158*481dde66SAndroid Build Coastguard Workerthe expectations are declared.
159*481dde66SAndroid Build Coastguard Worker
160*481dde66SAndroid Build Coastguard WorkerFor example, the following code sets the expectation that the `Reset()` method
161*481dde66SAndroid Build Coastguard Workerof `my_mock` is called before both `GetSize()` and `Describe()`, and `GetSize()`
162*481dde66SAndroid Build Coastguard Workerand `Describe()` can occur in any order relative to each other:
163*481dde66SAndroid Build Coastguard Worker
164*481dde66SAndroid Build Coastguard Worker```cpp
165*481dde66SAndroid Build Coastguard Workerusing ::testing::Sequence;
166*481dde66SAndroid Build Coastguard WorkerSequence s1, s2;
167*481dde66SAndroid Build Coastguard Worker...
168*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(my_mock, Reset())
169*481dde66SAndroid Build Coastguard Worker    .InSequence(s1, s2);
170*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(my_mock, GetSize())
171*481dde66SAndroid Build Coastguard Worker    .InSequence(s1);
172*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(my_mock, Describe())
173*481dde66SAndroid Build Coastguard Worker    .InSequence(s2);
174*481dde66SAndroid Build Coastguard Worker```
175*481dde66SAndroid Build Coastguard Worker
176*481dde66SAndroid Build Coastguard WorkerThe `InSequence` clause can be used any number of times on an expectation.
177*481dde66SAndroid Build Coastguard Worker
178*481dde66SAndroid Build Coastguard WorkerSee also the [`InSequence` class](#InSequence).
179*481dde66SAndroid Build Coastguard Worker
180*481dde66SAndroid Build Coastguard Worker#### After {#EXPECT_CALL.After}
181*481dde66SAndroid Build Coastguard Worker
182*481dde66SAndroid Build Coastguard Worker`.After(`*`expectations...`*`)`
183*481dde66SAndroid Build Coastguard Worker
184*481dde66SAndroid Build Coastguard WorkerSpecifies that the mock function call is expected to occur after one or more
185*481dde66SAndroid Build Coastguard Workerother calls.
186*481dde66SAndroid Build Coastguard Worker
187*481dde66SAndroid Build Coastguard WorkerThe parameter *`expectations...`* can be up to five
188*481dde66SAndroid Build Coastguard Worker[`Expectation`](#Expectation) or [`ExpectationSet`](#ExpectationSet) objects.
189*481dde66SAndroid Build Coastguard WorkerThe mock function call is expected to occur after all of the given expectations.
190*481dde66SAndroid Build Coastguard Worker
191*481dde66SAndroid Build Coastguard WorkerFor example, the following code sets the expectation that the `Describe()`
192*481dde66SAndroid Build Coastguard Workermethod of `my_mock` is called only after both `InitX()` and `InitY()` have been
193*481dde66SAndroid Build Coastguard Workercalled.
194*481dde66SAndroid Build Coastguard Worker
195*481dde66SAndroid Build Coastguard Worker```cpp
196*481dde66SAndroid Build Coastguard Workerusing ::testing::Expectation;
197*481dde66SAndroid Build Coastguard Worker...
198*481dde66SAndroid Build Coastguard WorkerExpectation init_x = EXPECT_CALL(my_mock, InitX());
199*481dde66SAndroid Build Coastguard WorkerExpectation init_y = EXPECT_CALL(my_mock, InitY());
200*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(my_mock, Describe())
201*481dde66SAndroid Build Coastguard Worker    .After(init_x, init_y);
202*481dde66SAndroid Build Coastguard Worker```
203*481dde66SAndroid Build Coastguard Worker
204*481dde66SAndroid Build Coastguard WorkerThe `ExpectationSet` object is helpful when the number of prerequisites for an
205*481dde66SAndroid Build Coastguard Workerexpectation is large or variable, for example:
206*481dde66SAndroid Build Coastguard Worker
207*481dde66SAndroid Build Coastguard Worker```cpp
208*481dde66SAndroid Build Coastguard Workerusing ::testing::ExpectationSet;
209*481dde66SAndroid Build Coastguard Worker...
210*481dde66SAndroid Build Coastguard WorkerExpectationSet all_inits;
211*481dde66SAndroid Build Coastguard Worker// Collect all expectations of InitElement() calls
212*481dde66SAndroid Build Coastguard Workerfor (int i = 0; i < element_count; i++) {
213*481dde66SAndroid Build Coastguard Worker  all_inits += EXPECT_CALL(my_mock, InitElement(i));
214*481dde66SAndroid Build Coastguard Worker}
215*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(my_mock, Describe())
216*481dde66SAndroid Build Coastguard Worker    .After(all_inits);  // Expect Describe() call after all InitElement() calls
217*481dde66SAndroid Build Coastguard Worker```
218*481dde66SAndroid Build Coastguard Worker
219*481dde66SAndroid Build Coastguard WorkerThe `After` clause can be used any number of times on an expectation.
220*481dde66SAndroid Build Coastguard Worker
221*481dde66SAndroid Build Coastguard Worker#### WillOnce {#EXPECT_CALL.WillOnce}
222*481dde66SAndroid Build Coastguard Worker
223*481dde66SAndroid Build Coastguard Worker`.WillOnce(`*`action`*`)`
224*481dde66SAndroid Build Coastguard Worker
225*481dde66SAndroid Build Coastguard WorkerSpecifies the mock function's actual behavior when invoked, for a single
226*481dde66SAndroid Build Coastguard Workermatching function call.
227*481dde66SAndroid Build Coastguard Worker
228*481dde66SAndroid Build Coastguard WorkerThe parameter *`action`* represents the
229*481dde66SAndroid Build Coastguard Worker[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function
230*481dde66SAndroid Build Coastguard Workercall will perform. See the [Actions Reference](actions.md) for a list of
231*481dde66SAndroid Build Coastguard Workerbuilt-in actions.
232*481dde66SAndroid Build Coastguard Worker
233*481dde66SAndroid Build Coastguard WorkerThe use of `WillOnce` implicitly sets a cardinality on the expectation when
234*481dde66SAndroid Build Coastguard Worker`Times` is not specified. See [`Times`](#EXPECT_CALL.Times).
235*481dde66SAndroid Build Coastguard Worker
236*481dde66SAndroid Build Coastguard WorkerEach matching function call will perform the next action in the order declared.
237*481dde66SAndroid Build Coastguard WorkerFor example, the following code specifies that `my_mock.GetNumber()` is expected
238*481dde66SAndroid Build Coastguard Workerto be called exactly 3 times and will return `1`, `2`, and `3` respectively on
239*481dde66SAndroid Build Coastguard Workerthe first, second, and third calls:
240*481dde66SAndroid Build Coastguard Worker
241*481dde66SAndroid Build Coastguard Worker```cpp
242*481dde66SAndroid Build Coastguard Workerusing ::testing::Return;
243*481dde66SAndroid Build Coastguard Worker...
244*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(my_mock, GetNumber())
245*481dde66SAndroid Build Coastguard Worker    .WillOnce(Return(1))
246*481dde66SAndroid Build Coastguard Worker    .WillOnce(Return(2))
247*481dde66SAndroid Build Coastguard Worker    .WillOnce(Return(3));
248*481dde66SAndroid Build Coastguard Worker```
249*481dde66SAndroid Build Coastguard Worker
250*481dde66SAndroid Build Coastguard WorkerThe `WillOnce` clause can be used any number of times on an expectation. Unlike
251*481dde66SAndroid Build Coastguard Worker`WillRepeatedly`, the action fed to each `WillOnce` call will be called at most
252*481dde66SAndroid Build Coastguard Workeronce, so may be a move-only type and/or have an `&&`-qualified call operator.
253*481dde66SAndroid Build Coastguard Worker
254*481dde66SAndroid Build Coastguard Worker#### WillRepeatedly {#EXPECT_CALL.WillRepeatedly}
255*481dde66SAndroid Build Coastguard Worker
256*481dde66SAndroid Build Coastguard Worker`.WillRepeatedly(`*`action`*`)`
257*481dde66SAndroid Build Coastguard Worker
258*481dde66SAndroid Build Coastguard WorkerSpecifies the mock function's actual behavior when invoked, for all subsequent
259*481dde66SAndroid Build Coastguard Workermatching function calls. Takes effect after the actions specified in the
260*481dde66SAndroid Build Coastguard Worker[`WillOnce`](#EXPECT_CALL.WillOnce) clauses, if any, have been performed.
261*481dde66SAndroid Build Coastguard Worker
262*481dde66SAndroid Build Coastguard WorkerThe parameter *`action`* represents the
263*481dde66SAndroid Build Coastguard Worker[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function
264*481dde66SAndroid Build Coastguard Workercall will perform. See the [Actions Reference](actions.md) for a list of
265*481dde66SAndroid Build Coastguard Workerbuilt-in actions.
266*481dde66SAndroid Build Coastguard Worker
267*481dde66SAndroid Build Coastguard WorkerThe use of `WillRepeatedly` implicitly sets a cardinality on the expectation
268*481dde66SAndroid Build Coastguard Workerwhen `Times` is not specified. See [`Times`](#EXPECT_CALL.Times).
269*481dde66SAndroid Build Coastguard Worker
270*481dde66SAndroid Build Coastguard WorkerIf any `WillOnce` clauses have been specified, matching function calls will
271*481dde66SAndroid Build Coastguard Workerperform those actions before the action specified by `WillRepeatedly`. See the
272*481dde66SAndroid Build Coastguard Workerfollowing example:
273*481dde66SAndroid Build Coastguard Worker
274*481dde66SAndroid Build Coastguard Worker```cpp
275*481dde66SAndroid Build Coastguard Workerusing ::testing::Return;
276*481dde66SAndroid Build Coastguard Worker...
277*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(my_mock, GetName())
278*481dde66SAndroid Build Coastguard Worker    .WillRepeatedly(Return("John Doe"));  // Return "John Doe" on all calls
279*481dde66SAndroid Build Coastguard Worker
280*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(my_mock, GetNumber())
281*481dde66SAndroid Build Coastguard Worker    .WillOnce(Return(42))        // Return 42 on the first call
282*481dde66SAndroid Build Coastguard Worker    .WillRepeatedly(Return(7));  // Return 7 on all subsequent calls
283*481dde66SAndroid Build Coastguard Worker```
284*481dde66SAndroid Build Coastguard Worker
285*481dde66SAndroid Build Coastguard WorkerThe `WillRepeatedly` clause can be used at most once on an expectation.
286*481dde66SAndroid Build Coastguard Worker
287*481dde66SAndroid Build Coastguard Worker#### RetiresOnSaturation {#EXPECT_CALL.RetiresOnSaturation}
288*481dde66SAndroid Build Coastguard Worker
289*481dde66SAndroid Build Coastguard Worker`.RetiresOnSaturation()`
290*481dde66SAndroid Build Coastguard Worker
291*481dde66SAndroid Build Coastguard WorkerIndicates that the expectation will no longer be active after the expected
292*481dde66SAndroid Build Coastguard Workernumber of matching function calls has been reached.
293*481dde66SAndroid Build Coastguard Worker
294*481dde66SAndroid Build Coastguard WorkerThe `RetiresOnSaturation` clause is only meaningful for expectations with an
295*481dde66SAndroid Build Coastguard Workerupper-bounded cardinality. The expectation will *retire* (no longer match any
296*481dde66SAndroid Build Coastguard Workerfunction calls) after it has been *saturated* (the upper bound has been
297*481dde66SAndroid Build Coastguard Workerreached). See the following example:
298*481dde66SAndroid Build Coastguard Worker
299*481dde66SAndroid Build Coastguard Worker```cpp
300*481dde66SAndroid Build Coastguard Workerusing ::testing::_;
301*481dde66SAndroid Build Coastguard Workerusing ::testing::AnyNumber;
302*481dde66SAndroid Build Coastguard Worker...
303*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(my_mock, SetNumber(_))  // Expectation 1
304*481dde66SAndroid Build Coastguard Worker    .Times(AnyNumber());
305*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(my_mock, SetNumber(7))  // Expectation 2
306*481dde66SAndroid Build Coastguard Worker    .Times(2)
307*481dde66SAndroid Build Coastguard Worker    .RetiresOnSaturation();
308*481dde66SAndroid Build Coastguard Worker```
309*481dde66SAndroid Build Coastguard Worker
310*481dde66SAndroid Build Coastguard WorkerIn the above example, the first two calls to `my_mock.SetNumber(7)` match
311*481dde66SAndroid Build Coastguard Workerexpectation 2, which then becomes inactive and no longer matches any calls. A
312*481dde66SAndroid Build Coastguard Workerthird call to `my_mock.SetNumber(7)` would then match expectation 1. Without
313*481dde66SAndroid Build Coastguard Worker`RetiresOnSaturation()` on expectation 2, a third call to `my_mock.SetNumber(7)`
314*481dde66SAndroid Build Coastguard Workerwould match expectation 2 again, producing a failure since the limit of 2 calls
315*481dde66SAndroid Build Coastguard Workerwas exceeded.
316*481dde66SAndroid Build Coastguard Worker
317*481dde66SAndroid Build Coastguard WorkerThe `RetiresOnSaturation` clause can be used at most once on an expectation and
318*481dde66SAndroid Build Coastguard Workermust be the last clause.
319*481dde66SAndroid Build Coastguard Worker
320*481dde66SAndroid Build Coastguard Worker### ON_CALL {#ON_CALL}
321*481dde66SAndroid Build Coastguard Worker
322*481dde66SAndroid Build Coastguard Worker`ON_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))`
323*481dde66SAndroid Build Coastguard Worker
324*481dde66SAndroid Build Coastguard WorkerDefines what happens when the method *`method_name`* of the object
325*481dde66SAndroid Build Coastguard Worker*`mock_object`* is called with arguments that match the given matchers
326*481dde66SAndroid Build Coastguard Worker*`matchers...`*. Requires a modifier clause to specify the method's behavior.
327*481dde66SAndroid Build Coastguard Worker*Does not* set any expectations that the method will be called.
328*481dde66SAndroid Build Coastguard Worker
329*481dde66SAndroid Build Coastguard WorkerThe parameter *`matchers...`* is a comma-separated list of
330*481dde66SAndroid Build Coastguard Worker[matchers](../gmock_for_dummies.md#matchers-what-arguments-do-we-expect) that
331*481dde66SAndroid Build Coastguard Workercorrespond to each argument of the method *`method_name`*. The `ON_CALL`
332*481dde66SAndroid Build Coastguard Workerspecification will apply only to calls of *`method_name`* whose arguments match
333*481dde66SAndroid Build Coastguard Workerall of the matchers. If `(`*`matchers...`*`)` is omitted, the behavior is as if
334*481dde66SAndroid Build Coastguard Workereach argument's matcher were a [wildcard matcher (`_`)](matchers.md#wildcard).
335*481dde66SAndroid Build Coastguard WorkerSee the [Matchers Reference](matchers.md) for a list of all built-in matchers.
336*481dde66SAndroid Build Coastguard Worker
337*481dde66SAndroid Build Coastguard WorkerThe following chainable clauses can be used to set the method's behavior, and
338*481dde66SAndroid Build Coastguard Workerthey must be used in the following order:
339*481dde66SAndroid Build Coastguard Worker
340*481dde66SAndroid Build Coastguard Worker```cpp
341*481dde66SAndroid Build Coastguard WorkerON_CALL(mock_object, method_name(matchers...))
342*481dde66SAndroid Build Coastguard Worker    .With(multi_argument_matcher)  // Can be used at most once
343*481dde66SAndroid Build Coastguard Worker    .WillByDefault(action);        // Required
344*481dde66SAndroid Build Coastguard Worker```
345*481dde66SAndroid Build Coastguard Worker
346*481dde66SAndroid Build Coastguard WorkerSee details for each modifier clause below.
347*481dde66SAndroid Build Coastguard Worker
348*481dde66SAndroid Build Coastguard Worker#### With {#ON_CALL.With}
349*481dde66SAndroid Build Coastguard Worker
350*481dde66SAndroid Build Coastguard Worker`.With(`*`multi_argument_matcher`*`)`
351*481dde66SAndroid Build Coastguard Worker
352*481dde66SAndroid Build Coastguard WorkerRestricts the specification to only mock function calls whose arguments as a
353*481dde66SAndroid Build Coastguard Workerwhole match the multi-argument matcher *`multi_argument_matcher`*.
354*481dde66SAndroid Build Coastguard Worker
355*481dde66SAndroid Build Coastguard WorkerGoogleTest passes all of the arguments as one tuple into the matcher. The
356*481dde66SAndroid Build Coastguard Workerparameter *`multi_argument_matcher`* must thus be a matcher of type
357*481dde66SAndroid Build Coastguard Worker`Matcher<std::tuple<A1, ..., An>>`, where `A1, ..., An` are the types of the
358*481dde66SAndroid Build Coastguard Workerfunction arguments.
359*481dde66SAndroid Build Coastguard Worker
360*481dde66SAndroid Build Coastguard WorkerFor example, the following code sets the default behavior when
361*481dde66SAndroid Build Coastguard Worker`my_mock.SetPosition()` is called with any two arguments, the first argument
362*481dde66SAndroid Build Coastguard Workerbeing less than the second:
363*481dde66SAndroid Build Coastguard Worker
364*481dde66SAndroid Build Coastguard Worker```cpp
365*481dde66SAndroid Build Coastguard Workerusing ::testing::_;
366*481dde66SAndroid Build Coastguard Workerusing ::testing::Lt;
367*481dde66SAndroid Build Coastguard Workerusing ::testing::Return;
368*481dde66SAndroid Build Coastguard Worker...
369*481dde66SAndroid Build Coastguard WorkerON_CALL(my_mock, SetPosition(_, _))
370*481dde66SAndroid Build Coastguard Worker    .With(Lt())
371*481dde66SAndroid Build Coastguard Worker    .WillByDefault(Return(true));
372*481dde66SAndroid Build Coastguard Worker```
373*481dde66SAndroid Build Coastguard Worker
374*481dde66SAndroid Build Coastguard WorkerGoogleTest provides some built-in matchers for 2-tuples, including the `Lt()`
375*481dde66SAndroid Build Coastguard Workermatcher above. See [Multi-argument Matchers](matchers.md#MultiArgMatchers).
376*481dde66SAndroid Build Coastguard Worker
377*481dde66SAndroid Build Coastguard WorkerThe `With` clause can be used at most once with each `ON_CALL` statement.
378*481dde66SAndroid Build Coastguard Worker
379*481dde66SAndroid Build Coastguard Worker#### WillByDefault {#ON_CALL.WillByDefault}
380*481dde66SAndroid Build Coastguard Worker
381*481dde66SAndroid Build Coastguard Worker`.WillByDefault(`*`action`*`)`
382*481dde66SAndroid Build Coastguard Worker
383*481dde66SAndroid Build Coastguard WorkerSpecifies the default behavior of a matching mock function call.
384*481dde66SAndroid Build Coastguard Worker
385*481dde66SAndroid Build Coastguard WorkerThe parameter *`action`* represents the
386*481dde66SAndroid Build Coastguard Worker[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function
387*481dde66SAndroid Build Coastguard Workercall will perform. See the [Actions Reference](actions.md) for a list of
388*481dde66SAndroid Build Coastguard Workerbuilt-in actions.
389*481dde66SAndroid Build Coastguard Worker
390*481dde66SAndroid Build Coastguard WorkerFor example, the following code specifies that by default, a call to
391*481dde66SAndroid Build Coastguard Worker`my_mock.Greet()` will return `"hello"`:
392*481dde66SAndroid Build Coastguard Worker
393*481dde66SAndroid Build Coastguard Worker```cpp
394*481dde66SAndroid Build Coastguard Workerusing ::testing::Return;
395*481dde66SAndroid Build Coastguard Worker...
396*481dde66SAndroid Build Coastguard WorkerON_CALL(my_mock, Greet())
397*481dde66SAndroid Build Coastguard Worker    .WillByDefault(Return("hello"));
398*481dde66SAndroid Build Coastguard Worker```
399*481dde66SAndroid Build Coastguard Worker
400*481dde66SAndroid Build Coastguard WorkerThe action specified by `WillByDefault` is superseded by the actions specified
401*481dde66SAndroid Build Coastguard Workeron a matching `EXPECT_CALL` statement, if any. See the
402*481dde66SAndroid Build Coastguard Worker[`WillOnce`](#EXPECT_CALL.WillOnce) and
403*481dde66SAndroid Build Coastguard Worker[`WillRepeatedly`](#EXPECT_CALL.WillRepeatedly) clauses of `EXPECT_CALL`.
404*481dde66SAndroid Build Coastguard Worker
405*481dde66SAndroid Build Coastguard WorkerThe `WillByDefault` clause must be used exactly once with each `ON_CALL`
406*481dde66SAndroid Build Coastguard Workerstatement.
407*481dde66SAndroid Build Coastguard Worker
408*481dde66SAndroid Build Coastguard Worker## Classes {#classes}
409*481dde66SAndroid Build Coastguard Worker
410*481dde66SAndroid Build Coastguard WorkerGoogleTest defines the following classes for working with mocks.
411*481dde66SAndroid Build Coastguard Worker
412*481dde66SAndroid Build Coastguard Worker### DefaultValue {#DefaultValue}
413*481dde66SAndroid Build Coastguard Worker
414*481dde66SAndroid Build Coastguard Worker`::testing::DefaultValue<T>`
415*481dde66SAndroid Build Coastguard Worker
416*481dde66SAndroid Build Coastguard WorkerAllows a user to specify the default value for a type `T` that is both copyable
417*481dde66SAndroid Build Coastguard Workerand publicly destructible (i.e. anything that can be used as a function return
418*481dde66SAndroid Build Coastguard Workertype). For mock functions with a return type of `T`, this default value is
419*481dde66SAndroid Build Coastguard Workerreturned from function calls that do not specify an action.
420*481dde66SAndroid Build Coastguard Worker
421*481dde66SAndroid Build Coastguard WorkerProvides the static methods `Set()`, `SetFactory()`, and `Clear()` to manage the
422*481dde66SAndroid Build Coastguard Workerdefault value:
423*481dde66SAndroid Build Coastguard Worker
424*481dde66SAndroid Build Coastguard Worker```cpp
425*481dde66SAndroid Build Coastguard Worker// Sets the default value to be returned. T must be copy constructible.
426*481dde66SAndroid Build Coastguard WorkerDefaultValue<T>::Set(value);
427*481dde66SAndroid Build Coastguard Worker
428*481dde66SAndroid Build Coastguard Worker// Sets a factory. Will be invoked on demand. T must be move constructible.
429*481dde66SAndroid Build Coastguard WorkerT MakeT();
430*481dde66SAndroid Build Coastguard WorkerDefaultValue<T>::SetFactory(&MakeT);
431*481dde66SAndroid Build Coastguard Worker
432*481dde66SAndroid Build Coastguard Worker// Unsets the default value.
433*481dde66SAndroid Build Coastguard WorkerDefaultValue<T>::Clear();
434*481dde66SAndroid Build Coastguard Worker```
435*481dde66SAndroid Build Coastguard Worker
436*481dde66SAndroid Build Coastguard Worker### NiceMock {#NiceMock}
437*481dde66SAndroid Build Coastguard Worker
438*481dde66SAndroid Build Coastguard Worker`::testing::NiceMock<T>`
439*481dde66SAndroid Build Coastguard Worker
440*481dde66SAndroid Build Coastguard WorkerRepresents a mock object that suppresses warnings on
441*481dde66SAndroid Build Coastguard Worker[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The
442*481dde66SAndroid Build Coastguard Workertemplate parameter `T` is any mock class, except for another `NiceMock`,
443*481dde66SAndroid Build Coastguard Worker`NaggyMock`, or `StrictMock`.
444*481dde66SAndroid Build Coastguard Worker
445*481dde66SAndroid Build Coastguard WorkerUsage of `NiceMock<T>` is analogous to usage of `T`. `NiceMock<T>` is a subclass
446*481dde66SAndroid Build Coastguard Workerof `T`, so it can be used wherever an object of type `T` is accepted. In
447*481dde66SAndroid Build Coastguard Workeraddition, `NiceMock<T>` can be constructed with any arguments that a constructor
448*481dde66SAndroid Build Coastguard Workerof `T` accepts.
449*481dde66SAndroid Build Coastguard Worker
450*481dde66SAndroid Build Coastguard WorkerFor example, the following code suppresses warnings on the mock `my_mock` of
451*481dde66SAndroid Build Coastguard Workertype `MockClass` if a method other than `DoSomething()` is called:
452*481dde66SAndroid Build Coastguard Worker
453*481dde66SAndroid Build Coastguard Worker```cpp
454*481dde66SAndroid Build Coastguard Workerusing ::testing::NiceMock;
455*481dde66SAndroid Build Coastguard Worker...
456*481dde66SAndroid Build Coastguard WorkerNiceMock<MockClass> my_mock("some", "args");
457*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(my_mock, DoSomething());
458*481dde66SAndroid Build Coastguard Worker... code that uses my_mock ...
459*481dde66SAndroid Build Coastguard Worker```
460*481dde66SAndroid Build Coastguard Worker
461*481dde66SAndroid Build Coastguard Worker`NiceMock<T>` only works for mock methods defined using the `MOCK_METHOD` macro
462*481dde66SAndroid Build Coastguard Workerdirectly in the definition of class `T`. If a mock method is defined in a base
463*481dde66SAndroid Build Coastguard Workerclass of `T`, a warning might still be generated.
464*481dde66SAndroid Build Coastguard Worker
465*481dde66SAndroid Build Coastguard Worker`NiceMock<T>` might not work correctly if the destructor of `T` is not virtual.
466*481dde66SAndroid Build Coastguard Worker
467*481dde66SAndroid Build Coastguard Worker### NaggyMock {#NaggyMock}
468*481dde66SAndroid Build Coastguard Worker
469*481dde66SAndroid Build Coastguard Worker`::testing::NaggyMock<T>`
470*481dde66SAndroid Build Coastguard Worker
471*481dde66SAndroid Build Coastguard WorkerRepresents a mock object that generates warnings on
472*481dde66SAndroid Build Coastguard Worker[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The
473*481dde66SAndroid Build Coastguard Workertemplate parameter `T` is any mock class, except for another `NiceMock`,
474*481dde66SAndroid Build Coastguard Worker`NaggyMock`, or `StrictMock`.
475*481dde66SAndroid Build Coastguard Worker
476*481dde66SAndroid Build Coastguard WorkerUsage of `NaggyMock<T>` is analogous to usage of `T`. `NaggyMock<T>` is a
477*481dde66SAndroid Build Coastguard Workersubclass of `T`, so it can be used wherever an object of type `T` is accepted.
478*481dde66SAndroid Build Coastguard WorkerIn addition, `NaggyMock<T>` can be constructed with any arguments that a
479*481dde66SAndroid Build Coastguard Workerconstructor of `T` accepts.
480*481dde66SAndroid Build Coastguard Worker
481*481dde66SAndroid Build Coastguard WorkerFor example, the following code generates warnings on the mock `my_mock` of type
482*481dde66SAndroid Build Coastguard Worker`MockClass` if a method other than `DoSomething()` is called:
483*481dde66SAndroid Build Coastguard Worker
484*481dde66SAndroid Build Coastguard Worker```cpp
485*481dde66SAndroid Build Coastguard Workerusing ::testing::NaggyMock;
486*481dde66SAndroid Build Coastguard Worker...
487*481dde66SAndroid Build Coastguard WorkerNaggyMock<MockClass> my_mock("some", "args");
488*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(my_mock, DoSomething());
489*481dde66SAndroid Build Coastguard Worker... code that uses my_mock ...
490*481dde66SAndroid Build Coastguard Worker```
491*481dde66SAndroid Build Coastguard Worker
492*481dde66SAndroid Build Coastguard WorkerMock objects of type `T` by default behave the same way as `NaggyMock<T>`.
493*481dde66SAndroid Build Coastguard Worker
494*481dde66SAndroid Build Coastguard Worker### StrictMock {#StrictMock}
495*481dde66SAndroid Build Coastguard Worker
496*481dde66SAndroid Build Coastguard Worker`::testing::StrictMock<T>`
497*481dde66SAndroid Build Coastguard Worker
498*481dde66SAndroid Build Coastguard WorkerRepresents a mock object that generates test failures on
499*481dde66SAndroid Build Coastguard Worker[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The
500*481dde66SAndroid Build Coastguard Workertemplate parameter `T` is any mock class, except for another `NiceMock`,
501*481dde66SAndroid Build Coastguard Worker`NaggyMock`, or `StrictMock`.
502*481dde66SAndroid Build Coastguard Worker
503*481dde66SAndroid Build Coastguard WorkerUsage of `StrictMock<T>` is analogous to usage of `T`. `StrictMock<T>` is a
504*481dde66SAndroid Build Coastguard Workersubclass of `T`, so it can be used wherever an object of type `T` is accepted.
505*481dde66SAndroid Build Coastguard WorkerIn addition, `StrictMock<T>` can be constructed with any arguments that a
506*481dde66SAndroid Build Coastguard Workerconstructor of `T` accepts.
507*481dde66SAndroid Build Coastguard Worker
508*481dde66SAndroid Build Coastguard WorkerFor example, the following code generates a test failure on the mock `my_mock`
509*481dde66SAndroid Build Coastguard Workerof type `MockClass` if a method other than `DoSomething()` is called:
510*481dde66SAndroid Build Coastguard Worker
511*481dde66SAndroid Build Coastguard Worker```cpp
512*481dde66SAndroid Build Coastguard Workerusing ::testing::StrictMock;
513*481dde66SAndroid Build Coastguard Worker...
514*481dde66SAndroid Build Coastguard WorkerStrictMock<MockClass> my_mock("some", "args");
515*481dde66SAndroid Build Coastguard WorkerEXPECT_CALL(my_mock, DoSomething());
516*481dde66SAndroid Build Coastguard Worker... code that uses my_mock ...
517*481dde66SAndroid Build Coastguard Worker```
518*481dde66SAndroid Build Coastguard Worker
519*481dde66SAndroid Build Coastguard Worker`StrictMock<T>` only works for mock methods defined using the `MOCK_METHOD`
520*481dde66SAndroid Build Coastguard Workermacro directly in the definition of class `T`. If a mock method is defined in a
521*481dde66SAndroid Build Coastguard Workerbase class of `T`, a failure might not be generated.
522*481dde66SAndroid Build Coastguard Worker
523*481dde66SAndroid Build Coastguard Worker`StrictMock<T>` might not work correctly if the destructor of `T` is not
524*481dde66SAndroid Build Coastguard Workervirtual.
525*481dde66SAndroid Build Coastguard Worker
526*481dde66SAndroid Build Coastguard Worker### Sequence {#Sequence}
527*481dde66SAndroid Build Coastguard Worker
528*481dde66SAndroid Build Coastguard Worker`::testing::Sequence`
529*481dde66SAndroid Build Coastguard Worker
530*481dde66SAndroid Build Coastguard WorkerRepresents a chronological sequence of expectations. See the
531*481dde66SAndroid Build Coastguard Worker[`InSequence`](#EXPECT_CALL.InSequence) clause of `EXPECT_CALL` for usage.
532*481dde66SAndroid Build Coastguard Worker
533*481dde66SAndroid Build Coastguard Worker### InSequence {#InSequence}
534*481dde66SAndroid Build Coastguard Worker
535*481dde66SAndroid Build Coastguard Worker`::testing::InSequence`
536*481dde66SAndroid Build Coastguard Worker
537*481dde66SAndroid Build Coastguard WorkerAn object of this type causes all expectations encountered in its scope to be
538*481dde66SAndroid Build Coastguard Workerput in an anonymous sequence.
539*481dde66SAndroid Build Coastguard Worker
540*481dde66SAndroid Build Coastguard WorkerThis allows more convenient expression of multiple expectations in a single
541*481dde66SAndroid Build Coastguard Workersequence:
542*481dde66SAndroid Build Coastguard Worker
543*481dde66SAndroid Build Coastguard Worker```cpp
544*481dde66SAndroid Build Coastguard Workerusing ::testing::InSequence;
545*481dde66SAndroid Build Coastguard Worker{
546*481dde66SAndroid Build Coastguard Worker  InSequence seq;
547*481dde66SAndroid Build Coastguard Worker
548*481dde66SAndroid Build Coastguard Worker  // The following are expected to occur in the order declared.
549*481dde66SAndroid Build Coastguard Worker  EXPECT_CALL(...);
550*481dde66SAndroid Build Coastguard Worker  EXPECT_CALL(...);
551*481dde66SAndroid Build Coastguard Worker  ...
552*481dde66SAndroid Build Coastguard Worker  EXPECT_CALL(...);
553*481dde66SAndroid Build Coastguard Worker}
554*481dde66SAndroid Build Coastguard Worker```
555*481dde66SAndroid Build Coastguard Worker
556*481dde66SAndroid Build Coastguard WorkerThe name of the `InSequence` object does not matter.
557*481dde66SAndroid Build Coastguard Worker
558*481dde66SAndroid Build Coastguard Worker### Expectation {#Expectation}
559*481dde66SAndroid Build Coastguard Worker
560*481dde66SAndroid Build Coastguard Worker`::testing::Expectation`
561*481dde66SAndroid Build Coastguard Worker
562*481dde66SAndroid Build Coastguard WorkerRepresents a mock function call expectation as created by
563*481dde66SAndroid Build Coastguard Worker[`EXPECT_CALL`](#EXPECT_CALL):
564*481dde66SAndroid Build Coastguard Worker
565*481dde66SAndroid Build Coastguard Worker```cpp
566*481dde66SAndroid Build Coastguard Workerusing ::testing::Expectation;
567*481dde66SAndroid Build Coastguard WorkerExpectation my_expectation = EXPECT_CALL(...);
568*481dde66SAndroid Build Coastguard Worker```
569*481dde66SAndroid Build Coastguard Worker
570*481dde66SAndroid Build Coastguard WorkerUseful for specifying sequences of expectations; see the
571*481dde66SAndroid Build Coastguard Worker[`After`](#EXPECT_CALL.After) clause of `EXPECT_CALL`.
572*481dde66SAndroid Build Coastguard Worker
573*481dde66SAndroid Build Coastguard Worker### ExpectationSet {#ExpectationSet}
574*481dde66SAndroid Build Coastguard Worker
575*481dde66SAndroid Build Coastguard Worker`::testing::ExpectationSet`
576*481dde66SAndroid Build Coastguard Worker
577*481dde66SAndroid Build Coastguard WorkerRepresents a set of mock function call expectations.
578*481dde66SAndroid Build Coastguard Worker
579*481dde66SAndroid Build Coastguard WorkerUse the `+=` operator to add [`Expectation`](#Expectation) objects to the set:
580*481dde66SAndroid Build Coastguard Worker
581*481dde66SAndroid Build Coastguard Worker```cpp
582*481dde66SAndroid Build Coastguard Workerusing ::testing::ExpectationSet;
583*481dde66SAndroid Build Coastguard WorkerExpectationSet my_expectations;
584*481dde66SAndroid Build Coastguard Workermy_expectations += EXPECT_CALL(...);
585*481dde66SAndroid Build Coastguard Worker```
586*481dde66SAndroid Build Coastguard Worker
587*481dde66SAndroid Build Coastguard WorkerUseful for specifying sequences of expectations; see the
588*481dde66SAndroid Build Coastguard Worker[`After`](#EXPECT_CALL.After) clause of `EXPECT_CALL`.
589