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