3 This page lists the facilities provided by GoogleTest for creating and working
4 with mock objects. To use them, include the header
9 GoogleTest defines the following macros for working with mocks.
11 ### MOCK_METHOD {#MOCK_METHOD}
13 `MOCK_METHOD(`*`return_type`*`,`*`method_name`*`, (`*`args...`*`));` \
14 `MOCK_METHOD(`*`return_type`*`,`*`method_name`*`, (`*`args...`*`),
17 Defines a mock method *`method_name`* with arguments `(`*`args...`*`)` and
18 return type *`return_type`* within a mock class.
20 The parameters of `MOCK_METHOD` mirror the method declaration. The optional
21 fourth parameter *`specs...`* is a comma-separated list of qualifiers. The
22 following qualifiers are accepted:
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. |
32 Note that commas in arguments prevent `MOCK_METHOD` from parsing the arguments
33 correctly if they are not appropriately surrounded by parentheses. See the
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!
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));
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));
55 `MOCK_METHOD` must be used in the `public:` section of a mock class definition,
56 regardless of whether the method being mocked is `public`, `protected`, or
57 `private` in the base class.
59 ### EXPECT_CALL {#EXPECT_CALL}
61 `EXPECT_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))`
63 Creates an [expectation](../gmock_for_dummies.md#setting-expectations) that the
64 method *`method_name`* of the object *`mock_object`* is called with arguments
65 that match the given matchers *`matchers...`*. `EXPECT_CALL` must precede any
66 code that exercises the mock object.
68 The parameter *`matchers...`* is a comma-separated list of
69 [matchers](../gmock_for_dummies.md#matchers-what-arguments-do-we-expect) that
70 correspond to each argument of the method *`method_name`*. The expectation will
71 apply only to calls of *`method_name`* whose arguments match all of the
72 matchers. If `(`*`matchers...`*`)` is omitted, the expectation behaves as if
73 each argument's matcher were a [wildcard matcher (`_`)](matchers.md#wildcard).
74 See the [Matchers Reference](matchers.md) for a list of all built-in matchers.
76 The following chainable clauses can be used to modify the expectation, and they
77 must be used in the following order:
80 EXPECT_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
90 See details for each modifier clause below.
92 #### With {#EXPECT_CALL.With}
94 `.With(`*`multi_argument_matcher`*`)`
96 Restricts the expectation to apply only to mock function calls whose arguments
97 as a whole match the multi-argument matcher *`multi_argument_matcher`*.
99 GoogleTest passes all of the arguments as one tuple into the matcher. The
100 parameter *`multi_argument_matcher`* must thus be a matcher of type
101 `Matcher<std::tuple<A1, ..., An>>`, where `A1, ..., An` are the types of the
104 For example, the following code sets the expectation that
105 `my_mock.SetPosition()` is called with any two arguments, the first argument
106 being less than the second:
112 EXPECT_CALL(my_mock, SetPosition(_, _))
116 GoogleTest provides some built-in matchers for 2-tuples, including the `Lt()`
117 matcher above. See [Multi-argument Matchers](matchers.md#MultiArgMatchers).
119 The `With` clause can be used at most once on an expectation and must be the
122 #### Times {#EXPECT_CALL.Times}
124 `.Times(`*`cardinality`*`)`
126 Specifies how many times the mock function call is expected.
128 The parameter *`cardinality`* represents the number of expected calls and can be
129 one of the following, all defined in the `::testing` namespace:
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. |
139 If the `Times` clause is omitted, GoogleTest infers the cardinality as follows:
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))`.
149 The `Times` clause can be used at most once on an expectation.
151 #### InSequence {#EXPECT_CALL.InSequence}
153 `.InSequence(`*`sequences...`*`)`
155 Specifies that the mock function call is expected in a certain sequence.
157 The parameter *`sequences...`* is any number of [`Sequence`](#Sequence) objects.
158 Expected calls assigned to the same sequence are expected to occur in the order
159 the expectations are declared.
161 For example, the following code sets the expectation that the `Reset()` method
162 of `my_mock` is called before both `GetSize()` and `Describe()`, and `GetSize()`
163 and `Describe()` can occur in any order relative to each other:
166 using ::testing::Sequence;
169 EXPECT_CALL(my_mock, Reset())
171 EXPECT_CALL(my_mock, GetSize())
173 EXPECT_CALL(my_mock, Describe())
177 The `InSequence` clause can be used any number of times on an expectation.
179 See also the [`InSequence` class](#InSequence).
181 #### After {#EXPECT_CALL.After}
183 `.After(`*`expectations...`*`)`
185 Specifies that the mock function call is expected to occur after one or more
188 The parameter *`expectations...`* can be up to five
189 [`Expectation`](#Expectation) or [`ExpectationSet`](#ExpectationSet) objects.
190 The mock function call is expected to occur after all of the given expectations.
192 For example, the following code sets the expectation that the `Describe()`
193 method of `my_mock` is called only after both `InitX()` and `InitY()` have been
197 using ::testing::Expectation;
199 Expectation init_x = EXPECT_CALL(my_mock, InitX());
200 Expectation init_y = EXPECT_CALL(my_mock, InitY());
201 EXPECT_CALL(my_mock, Describe())
202 .After(init_x, init_y);
205 The `ExpectationSet` object is helpful when the number of prerequisites for an
206 expectation is large or variable, for example:
209 using ::testing::ExpectationSet;
211 ExpectationSet all_inits;
212 // Collect all expectations of InitElement() calls
213 for (int i = 0; i < element_count; i++) {
214 all_inits += EXPECT_CALL(my_mock, InitElement(i));
216 EXPECT_CALL(my_mock, Describe())
217 .After(all_inits); // Expect Describe() call after all InitElement() calls
220 The `After` clause can be used any number of times on an expectation.
222 #### WillOnce {#EXPECT_CALL.WillOnce}
224 `.WillOnce(`*`action`*`)`
226 Specifies the mock function's actual behavior when invoked, for a single
227 matching function call.
229 The parameter *`action`* represents the
230 [action](../gmock_for_dummies.md#actions-what-should-it-do) that the function
231 call will perform. See the [Actions Reference](actions.md) for a list of
234 The use of `WillOnce` implicitly sets a cardinality on the expectation when
235 `Times` is not specified. See [`Times`](#EXPECT_CALL.Times).
237 Each matching function call will perform the next action in the order declared.
238 For example, the following code specifies that `my_mock.GetNumber()` is expected
239 to be called exactly 3 times and will return `1`, `2`, and `3` respectively on
240 the first, second, and third calls:
243 using ::testing::Return;
245 EXPECT_CALL(my_mock, GetNumber())
248 .WillOnce(Return(3));
251 The `WillOnce` clause can be used any number of times on an expectation. Unlike
252 `WillRepeatedly`, the action fed to each `WillOnce` call will be called at most
253 once, so may be a move-only type and/or have an `&&`-qualified call operator.
255 #### WillRepeatedly {#EXPECT_CALL.WillRepeatedly}
257 `.WillRepeatedly(`*`action`*`)`
259 Specifies the mock function's actual behavior when invoked, for all subsequent
260 matching function calls. Takes effect after the actions specified in the
261 [`WillOnce`](#EXPECT_CALL.WillOnce) clauses, if any, have been performed.
263 The parameter *`action`* represents the
264 [action](../gmock_for_dummies.md#actions-what-should-it-do) that the function
265 call will perform. See the [Actions Reference](actions.md) for a list of
268 The use of `WillRepeatedly` implicitly sets a cardinality on the expectation
269 when `Times` is not specified. See [`Times`](#EXPECT_CALL.Times).
271 If any `WillOnce` clauses have been specified, matching function calls will
272 perform those actions before the action specified by `WillRepeatedly`. See the
276 using ::testing::Return;
278 EXPECT_CALL(my_mock, GetName())
279 .WillRepeatedly(Return("John Doe")); // Return "John Doe" on all calls
281 EXPECT_CALL(my_mock, GetNumber())
282 .WillOnce(Return(42)) // Return 42 on the first call
283 .WillRepeatedly(Return(7)); // Return 7 on all subsequent calls
286 The `WillRepeatedly` clause can be used at most once on an expectation.
288 #### RetiresOnSaturation {#EXPECT_CALL.RetiresOnSaturation}
290 `.RetiresOnSaturation()`
292 Indicates that the expectation will no longer be active after the expected
293 number of matching function calls has been reached.
295 The `RetiresOnSaturation` clause is only meaningful for expectations with an
296 upper-bounded cardinality. The expectation will *retire* (no longer match any
297 function calls) after it has been *saturated* (the upper bound has been
298 reached). See the following example:
302 using ::testing::AnyNumber;
304 EXPECT_CALL(my_mock, SetNumber(_)) // Expectation 1
306 EXPECT_CALL(my_mock, SetNumber(7)) // Expectation 2
308 .RetiresOnSaturation();
311 In the above example, the first two calls to `my_mock.SetNumber(7)` match
312 expectation 2, which then becomes inactive and no longer matches any calls. A
313 third call to `my_mock.SetNumber(7)` would then match expectation 1. Without
314 `RetiresOnSaturation()` on expectation 2, a third call to `my_mock.SetNumber(7)`
315 would match expectation 2 again, producing a failure since the limit of 2 calls
318 The `RetiresOnSaturation` clause can be used at most once on an expectation and
319 must be the last clause.
321 ### ON_CALL {#ON_CALL}
323 `ON_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))`
325 Defines what happens when the method *`method_name`* of the object
326 *`mock_object`* is called with arguments that match the given matchers
327 *`matchers...`*. Requires a modifier clause to specify the method's behavior.
328 *Does not* set any expectations that the method will be called.
330 The parameter *`matchers...`* is a comma-separated list of
331 [matchers](../gmock_for_dummies.md#matchers-what-arguments-do-we-expect) that
332 correspond to each argument of the method *`method_name`*. The `ON_CALL`
333 specification will apply only to calls of *`method_name`* whose arguments match
334 all of the matchers. If `(`*`matchers...`*`)` is omitted, the behavior is as if
335 each argument's matcher were a [wildcard matcher (`_`)](matchers.md#wildcard).
336 See the [Matchers Reference](matchers.md) for a list of all built-in matchers.
338 The following chainable clauses can be used to set the method's behavior, and
339 they must be used in the following order:
342 ON_CALL(mock_object, method_name(matchers...))
343 .With(multi_argument_matcher) // Can be used at most once
344 .WillByDefault(action); // Required
347 See details for each modifier clause below.
349 #### With {#ON_CALL.With}
351 `.With(`*`multi_argument_matcher`*`)`
353 Restricts the specification to only mock function calls whose arguments as a
354 whole match the multi-argument matcher *`multi_argument_matcher`*.
356 GoogleTest passes all of the arguments as one tuple into the matcher. The
357 parameter *`multi_argument_matcher`* must thus be a matcher of type
358 `Matcher<std::tuple<A1, ..., An>>`, where `A1, ..., An` are the types of the
361 For example, the following code sets the default behavior when
362 `my_mock.SetPosition()` is called with any two arguments, the first argument
363 being less than the second:
368 using ::testing::Return;
370 ON_CALL(my_mock, SetPosition(_, _))
372 .WillByDefault(Return(true));
375 GoogleTest provides some built-in matchers for 2-tuples, including the `Lt()`
376 matcher above. See [Multi-argument Matchers](matchers.md#MultiArgMatchers).
378 The `With` clause can be used at most once with each `ON_CALL` statement.
380 #### WillByDefault {#ON_CALL.WillByDefault}
382 `.WillByDefault(`*`action`*`)`
384 Specifies the default behavior of a matching mock function call.
386 The parameter *`action`* represents the
387 [action](../gmock_for_dummies.md#actions-what-should-it-do) that the function
388 call will perform. See the [Actions Reference](actions.md) for a list of
391 For example, the following code specifies that by default, a call to
392 `my_mock.Greet()` will return `"hello"`:
395 using ::testing::Return;
397 ON_CALL(my_mock, Greet())
398 .WillByDefault(Return("hello"));
401 The action specified by `WillByDefault` is superseded by the actions specified
402 on a matching `EXPECT_CALL` statement, if any. See the
403 [`WillOnce`](#EXPECT_CALL.WillOnce) and
404 [`WillRepeatedly`](#EXPECT_CALL.WillRepeatedly) clauses of `EXPECT_CALL`.
406 The `WillByDefault` clause must be used exactly once with each `ON_CALL`
409 ## Classes {#classes}
411 GoogleTest defines the following classes for working with mocks.
413 ### DefaultValue {#DefaultValue}
415 `::testing::DefaultValue<T>`
417 Allows a user to specify the default value for a type `T` that is both copyable
418 and publicly destructible (i.e. anything that can be used as a function return
419 type). For mock functions with a return type of `T`, this default value is
420 returned from function calls that do not specify an action.
422 Provides the static methods `Set()`, `SetFactory()`, and `Clear()` to manage the
426 // Sets the default value to be returned. T must be copy constructible.
427 DefaultValue<T>::Set(value);
429 // Sets a factory. Will be invoked on demand. T must be move constructible.
431 DefaultValue<T>::SetFactory(&MakeT);
433 // Unsets the default value.
434 DefaultValue<T>::Clear();
437 ### NiceMock {#NiceMock}
439 `::testing::NiceMock<T>`
441 Represents a mock object that suppresses warnings on
442 [uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The
443 template parameter `T` is any mock class, except for another `NiceMock`,
444 `NaggyMock`, or `StrictMock`.
446 Usage of `NiceMock<T>` is analogous to usage of `T`. `NiceMock<T>` is a subclass
447 of `T`, so it can be used wherever an object of type `T` is accepted. In
448 addition, `NiceMock<T>` can be constructed with any arguments that a constructor
451 For example, the following code suppresses warnings on the mock `my_mock` of
452 type `MockClass` if a method other than `DoSomething()` is called:
455 using ::testing::NiceMock;
457 NiceMock<MockClass> my_mock("some", "args");
458 EXPECT_CALL(my_mock, DoSomething());
459 ... code that uses my_mock ...
462 `NiceMock<T>` only works for mock methods defined using the `MOCK_METHOD` macro
463 directly in the definition of class `T`. If a mock method is defined in a base
464 class of `T`, a warning might still be generated.
466 `NiceMock<T>` might not work correctly if the destructor of `T` is not virtual.
468 ### NaggyMock {#NaggyMock}
470 `::testing::NaggyMock<T>`
472 Represents a mock object that generates warnings on
473 [uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The
474 template parameter `T` is any mock class, except for another `NiceMock`,
475 `NaggyMock`, or `StrictMock`.
477 Usage of `NaggyMock<T>` is analogous to usage of `T`. `NaggyMock<T>` is a
478 subclass of `T`, so it can be used wherever an object of type `T` is accepted.
479 In addition, `NaggyMock<T>` can be constructed with any arguments that a
480 constructor of `T` accepts.
482 For example, the following code generates warnings on the mock `my_mock` of type
483 `MockClass` if a method other than `DoSomething()` is called:
486 using ::testing::NaggyMock;
488 NaggyMock<MockClass> my_mock("some", "args");
489 EXPECT_CALL(my_mock, DoSomething());
490 ... code that uses my_mock ...
493 Mock objects of type `T` by default behave the same way as `NaggyMock<T>`.
495 ### StrictMock {#StrictMock}
497 `::testing::StrictMock<T>`
499 Represents a mock object that generates test failures on
500 [uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The
501 template parameter `T` is any mock class, except for another `NiceMock`,
502 `NaggyMock`, or `StrictMock`.
504 Usage of `StrictMock<T>` is analogous to usage of `T`. `StrictMock<T>` is a
505 subclass of `T`, so it can be used wherever an object of type `T` is accepted.
506 In addition, `StrictMock<T>` can be constructed with any arguments that a
507 constructor of `T` accepts.
509 For example, the following code generates a test failure on the mock `my_mock`
510 of type `MockClass` if a method other than `DoSomething()` is called:
513 using ::testing::StrictMock;
515 StrictMock<MockClass> my_mock("some", "args");
516 EXPECT_CALL(my_mock, DoSomething());
517 ... code that uses my_mock ...
520 `StrictMock<T>` only works for mock methods defined using the `MOCK_METHOD`
521 macro directly in the definition of class `T`. If a mock method is defined in a
522 base class of `T`, a failure might not be generated.
524 `StrictMock<T>` might not work correctly if the destructor of `T` is not
527 ### Sequence {#Sequence}
529 `::testing::Sequence`
531 Represents a chronological sequence of expectations. See the
532 [`InSequence`](#EXPECT_CALL.InSequence) clause of `EXPECT_CALL` for usage.
534 ### InSequence {#InSequence}
536 `::testing::InSequence`
538 An object of this type causes all expectations encountered in its scope to be
539 put in an anonymous sequence.
541 This allows more convenient expression of multiple expectations in a single
545 using ::testing::InSequence;
549 // The following are expected to occur in the order declared.
557 The name of the `InSequence` object does not matter.
559 ### Expectation {#Expectation}
561 `::testing::Expectation`
563 Represents a mock function call expectation as created by
564 [`EXPECT_CALL`](#EXPECT_CALL):
567 using ::testing::Expectation;
568 Expectation my_expectation = EXPECT_CALL(...);
571 Useful for specifying sequences of expectations; see the
572 [`After`](#EXPECT_CALL.After) clause of `EXPECT_CALL`.
574 ### ExpectationSet {#ExpectationSet}
576 `::testing::ExpectationSet`
578 Represents a set of mock function call expectations.
580 Use the `+=` operator to add [`Expectation`](#Expectation) objects to the set:
583 using ::testing::ExpectationSet;
584 ExpectationSet my_expectations;
585 my_expectations += EXPECT_CALL(...);
588 Useful for specifying sequences of expectations; see the
589 [`After`](#EXPECT_CALL.After) clause of `EXPECT_CALL`.