# Mocking Reference This page lists the facilities provided by GoogleTest for creating and working with mock objects. To use them, include the header `gmock/gmock.h`. ## Macros {#macros} GoogleTest defines the following macros for working with mocks. ### MOCK_METHOD {#MOCK_METHOD} `MOCK_METHOD(`*`return_type`*`,`*`method_name`*`, (`*`args...`*`));` \ `MOCK_METHOD(`*`return_type`*`,`*`method_name`*`, (`*`args...`*`), (`*`specs...`*`));` Defines a mock method *`method_name`* with arguments `(`*`args...`*`)` and return type *`return_type`* within a mock class. The parameters of `MOCK_METHOD` mirror the method declaration. The optional fourth parameter *`specs...`* is a comma-separated list of qualifiers. The following qualifiers are accepted: | Qualifier | Meaning | | -------------------------- | -------------------------------------------- | | `const` | Makes the mocked method a `const` method. Required if overriding a `const` method. | | `override` | Marks the method with `override`. Recommended if overriding a `virtual` method. | | `noexcept` | Marks the method with `noexcept`. Required if overriding a `noexcept` method. | | `Calltype(`*`calltype`*`)` | Sets the call type for the method, for example `Calltype(STDMETHODCALLTYPE)`. Useful on Windows. | | `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. | Note that commas in arguments prevent `MOCK_METHOD` from parsing the arguments correctly if they are not appropriately surrounded by parentheses. See the following example: ```cpp class MyMock { public: // The following 2 lines will not compile due to commas in the arguments: MOCK_METHOD(std::pair, GetPair, ()); // Error! MOCK_METHOD(bool, CheckMap, (std::map, bool)); // Error! // One solution - wrap arguments that contain commas in parentheses: MOCK_METHOD((std::pair), GetPair, ()); MOCK_METHOD(bool, CheckMap, ((std::map), bool)); // Another solution - use type aliases: using BoolAndInt = std::pair; MOCK_METHOD(BoolAndInt, GetPair, ()); using MapIntDouble = std::map; MOCK_METHOD(bool, CheckMap, (MapIntDouble, bool)); }; ``` `MOCK_METHOD` must be used in the `public:` section of a mock class definition, regardless of whether the method being mocked is `public`, `protected`, or `private` in the base class. ### EXPECT_CALL {#EXPECT_CALL} `EXPECT_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))` Creates an [expectation](../gmock_for_dummies.md#setting-expectations) that the method *`method_name`* of the object *`mock_object`* is called with arguments that match the given matchers *`matchers...`*. `EXPECT_CALL` must precede any code that exercises the mock object. The parameter *`matchers...`* is a comma-separated list of [matchers](../gmock_for_dummies.md#matchers-what-arguments-do-we-expect) that correspond to each argument of the method *`method_name`*. The expectation will apply only to calls of *`method_name`* whose arguments match all of the matchers. If `(`*`matchers...`*`)` is omitted, the expectation behaves as if each argument's matcher were a [wildcard matcher (`_`)](matchers.md#wildcard). See the [Matchers Reference](matchers.md) for a list of all built-in matchers. The following chainable clauses can be used to modify the expectation, and they must be used in the following order: ```cpp EXPECT_CALL(mock_object, method_name(matchers...)) .With(multi_argument_matcher) // Can be used at most once .Times(cardinality) // Can be used at most once .InSequence(sequences...) // Can be used any number of times .After(expectations...) // Can be used any number of times .WillOnce(action) // Can be used any number of times .WillRepeatedly(action) // Can be used at most once .RetiresOnSaturation(); // Can be used at most once ``` See details for each modifier clause below. #### With {#EXPECT_CALL.With} `.With(`*`multi_argument_matcher`*`)` Restricts the expectation to apply only to mock function calls whose arguments as a whole match the multi-argument matcher *`multi_argument_matcher`*. GoogleTest passes all of the arguments as one tuple into the matcher. The parameter *`multi_argument_matcher`* must thus be a matcher of type `Matcher>`, where `A1, ..., An` are the types of the function arguments. For example, the following code sets the expectation that `my_mock.SetPosition()` is called with any two arguments, the first argument being less than the second: ```cpp using ::testing::_; using ::testing::Lt; ... EXPECT_CALL(my_mock, SetPosition(_, _)) .With(Lt()); ``` GoogleTest provides some built-in matchers for 2-tuples, including the `Lt()` matcher above. See [Multi-argument Matchers](matchers.md#MultiArgMatchers). The `With` clause can be used at most once on an expectation and must be the first clause. #### Times {#EXPECT_CALL.Times} `.Times(`*`cardinality`*`)` Specifies how many times the mock function call is expected. The parameter *`cardinality`* represents the number of expected calls and can be one of the following, all defined in the `::testing` namespace: | Cardinality | Meaning | | ------------------- | --------------------------------------------------- | | `AnyNumber()` | The function can be called any number of times. | | `AtLeast(n)` | The function call is expected at least *n* times. | | `AtMost(n)` | The function call is expected at most *n* times. | | `Between(m, n)` | The function call is expected between *m* and *n* times, inclusive. | | `Exactly(n)` or `n` | The function call is expected exactly *n* times. If *n* is 0, the call should never happen. | If the `Times` clause is omitted, GoogleTest infers the cardinality as follows: * If neither [`WillOnce`](#EXPECT_CALL.WillOnce) nor [`WillRepeatedly`](#EXPECT_CALL.WillRepeatedly) are specified, the inferred cardinality is `Times(1)`. * If there are *n* `WillOnce` clauses and no `WillRepeatedly` clause, where *n* >= 1, the inferred cardinality is `Times(n)`. * If there are *n* `WillOnce` clauses and one `WillRepeatedly` clause, where *n* >= 0, the inferred cardinality is `Times(AtLeast(n))`. The `Times` clause can be used at most once on an expectation. #### InSequence {#EXPECT_CALL.InSequence} `.InSequence(`*`sequences...`*`)` Specifies that the mock function call is expected in a certain sequence. The parameter *`sequences...`* is any number of [`Sequence`](#Sequence) objects. Expected calls assigned to the same sequence are expected to occur in the order the expectations are declared. For example, the following code sets the expectation that the `Reset()` method of `my_mock` is called before both `GetSize()` and `Describe()`, and `GetSize()` and `Describe()` can occur in any order relative to each other: ```cpp using ::testing::Sequence; Sequence s1, s2; ... EXPECT_CALL(my_mock, Reset()) .InSequence(s1, s2); EXPECT_CALL(my_mock, GetSize()) .InSequence(s1); EXPECT_CALL(my_mock, Describe()) .InSequence(s2); ``` The `InSequence` clause can be used any number of times on an expectation. See also the [`InSequence` class](#InSequence). #### After {#EXPECT_CALL.After} `.After(`*`expectations...`*`)` Specifies that the mock function call is expected to occur after one or more other calls. The parameter *`expectations...`* can be up to five [`Expectation`](#Expectation) or [`ExpectationSet`](#ExpectationSet) objects. The mock function call is expected to occur after all of the given expectations. For example, the following code sets the expectation that the `Describe()` method of `my_mock` is called only after both `InitX()` and `InitY()` have been called. ```cpp using ::testing::Expectation; ... Expectation init_x = EXPECT_CALL(my_mock, InitX()); Expectation init_y = EXPECT_CALL(my_mock, InitY()); EXPECT_CALL(my_mock, Describe()) .After(init_x, init_y); ``` The `ExpectationSet` object is helpful when the number of prerequisites for an expectation is large or variable, for example: ```cpp using ::testing::ExpectationSet; ... ExpectationSet all_inits; // Collect all expectations of InitElement() calls for (int i = 0; i < element_count; i++) { all_inits += EXPECT_CALL(my_mock, InitElement(i)); } EXPECT_CALL(my_mock, Describe()) .After(all_inits); // Expect Describe() call after all InitElement() calls ``` The `After` clause can be used any number of times on an expectation. #### WillOnce {#EXPECT_CALL.WillOnce} `.WillOnce(`*`action`*`)` Specifies the mock function's actual behavior when invoked, for a single matching function call. The parameter *`action`* represents the [action](../gmock_for_dummies.md#actions-what-should-it-do) that the function call will perform. See the [Actions Reference](actions.md) for a list of built-in actions. The use of `WillOnce` implicitly sets a cardinality on the expectation when `Times` is not specified. See [`Times`](#EXPECT_CALL.Times). Each matching function call will perform the next action in the order declared. For example, the following code specifies that `my_mock.GetNumber()` is expected to be called exactly 3 times and will return `1`, `2`, and `3` respectively on the first, second, and third calls: ```cpp using ::testing::Return; ... EXPECT_CALL(my_mock, GetNumber()) .WillOnce(Return(1)) .WillOnce(Return(2)) .WillOnce(Return(3)); ``` The `WillOnce` clause can be used any number of times on an expectation. Unlike `WillRepeatedly`, the action fed to each `WillOnce` call will be called at most once, so may be a move-only type and/or have an `&&`-qualified call operator. #### WillRepeatedly {#EXPECT_CALL.WillRepeatedly} `.WillRepeatedly(`*`action`*`)` Specifies the mock function's actual behavior when invoked, for all subsequent matching function calls. Takes effect after the actions specified in the [`WillOnce`](#EXPECT_CALL.WillOnce) clauses, if any, have been performed. The parameter *`action`* represents the [action](../gmock_for_dummies.md#actions-what-should-it-do) that the function call will perform. See the [Actions Reference](actions.md) for a list of built-in actions. The use of `WillRepeatedly` implicitly sets a cardinality on the expectation when `Times` is not specified. See [`Times`](#EXPECT_CALL.Times). If any `WillOnce` clauses have been specified, matching function calls will perform those actions before the action specified by `WillRepeatedly`. See the following example: ```cpp using ::testing::Return; ... EXPECT_CALL(my_mock, GetName()) .WillRepeatedly(Return("John Doe")); // Return "John Doe" on all calls EXPECT_CALL(my_mock, GetNumber()) .WillOnce(Return(42)) // Return 42 on the first call .WillRepeatedly(Return(7)); // Return 7 on all subsequent calls ``` The `WillRepeatedly` clause can be used at most once on an expectation. #### RetiresOnSaturation {#EXPECT_CALL.RetiresOnSaturation} `.RetiresOnSaturation()` Indicates that the expectation will no longer be active after the expected number of matching function calls has been reached. The `RetiresOnSaturation` clause is only meaningful for expectations with an upper-bounded cardinality. The expectation will *retire* (no longer match any function calls) after it has been *saturated* (the upper bound has been reached). See the following example: ```cpp using ::testing::_; using ::testing::AnyNumber; ... EXPECT_CALL(my_mock, SetNumber(_)) // Expectation 1 .Times(AnyNumber()); EXPECT_CALL(my_mock, SetNumber(7)) // Expectation 2 .Times(2) .RetiresOnSaturation(); ``` In the above example, the first two calls to `my_mock.SetNumber(7)` match expectation 2, which then becomes inactive and no longer matches any calls. A third call to `my_mock.SetNumber(7)` would then match expectation 1. Without `RetiresOnSaturation()` on expectation 2, a third call to `my_mock.SetNumber(7)` would match expectation 2 again, producing a failure since the limit of 2 calls was exceeded. The `RetiresOnSaturation` clause can be used at most once on an expectation and must be the last clause. ### ON_CALL {#ON_CALL} `ON_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))` Defines what happens when the method *`method_name`* of the object *`mock_object`* is called with arguments that match the given matchers *`matchers...`*. Requires a modifier clause to specify the method's behavior. *Does not* set any expectations that the method will be called. The parameter *`matchers...`* is a comma-separated list of [matchers](../gmock_for_dummies.md#matchers-what-arguments-do-we-expect) that correspond to each argument of the method *`method_name`*. The `ON_CALL` specification will apply only to calls of *`method_name`* whose arguments match all of the matchers. If `(`*`matchers...`*`)` is omitted, the behavior is as if each argument's matcher were a [wildcard matcher (`_`)](matchers.md#wildcard). See the [Matchers Reference](matchers.md) for a list of all built-in matchers. The following chainable clauses can be used to set the method's behavior, and they must be used in the following order: ```cpp ON_CALL(mock_object, method_name(matchers...)) .With(multi_argument_matcher) // Can be used at most once .WillByDefault(action); // Required ``` See details for each modifier clause below. #### With {#ON_CALL.With} `.With(`*`multi_argument_matcher`*`)` Restricts the specification to only mock function calls whose arguments as a whole match the multi-argument matcher *`multi_argument_matcher`*. GoogleTest passes all of the arguments as one tuple into the matcher. The parameter *`multi_argument_matcher`* must thus be a matcher of type `Matcher>`, where `A1, ..., An` are the types of the function arguments. For example, the following code sets the default behavior when `my_mock.SetPosition()` is called with any two arguments, the first argument being less than the second: ```cpp using ::testing::_; using ::testing::Lt; using ::testing::Return; ... ON_CALL(my_mock, SetPosition(_, _)) .With(Lt()) .WillByDefault(Return(true)); ``` GoogleTest provides some built-in matchers for 2-tuples, including the `Lt()` matcher above. See [Multi-argument Matchers](matchers.md#MultiArgMatchers). The `With` clause can be used at most once with each `ON_CALL` statement. #### WillByDefault {#ON_CALL.WillByDefault} `.WillByDefault(`*`action`*`)` Specifies the default behavior of a matching mock function call. The parameter *`action`* represents the [action](../gmock_for_dummies.md#actions-what-should-it-do) that the function call will perform. See the [Actions Reference](actions.md) for a list of built-in actions. For example, the following code specifies that by default, a call to `my_mock.Greet()` will return `"hello"`: ```cpp using ::testing::Return; ... ON_CALL(my_mock, Greet()) .WillByDefault(Return("hello")); ``` The action specified by `WillByDefault` is superseded by the actions specified on a matching `EXPECT_CALL` statement, if any. See the [`WillOnce`](#EXPECT_CALL.WillOnce) and [`WillRepeatedly`](#EXPECT_CALL.WillRepeatedly) clauses of `EXPECT_CALL`. The `WillByDefault` clause must be used exactly once with each `ON_CALL` statement. ## Classes {#classes} GoogleTest defines the following classes for working with mocks. ### DefaultValue {#DefaultValue} `::testing::DefaultValue` Allows a user to specify the default value for a type `T` that is both copyable and publicly destructible (i.e. anything that can be used as a function return type). For mock functions with a return type of `T`, this default value is returned from function calls that do not specify an action. Provides the static methods `Set()`, `SetFactory()`, and `Clear()` to manage the default value: ```cpp // Sets the default value to be returned. T must be copy constructible. DefaultValue::Set(value); // Sets a factory. Will be invoked on demand. T must be move constructible. T MakeT(); DefaultValue::SetFactory(&MakeT); // Unsets the default value. DefaultValue::Clear(); ``` ### NiceMock {#NiceMock} `::testing::NiceMock` Represents a mock object that suppresses warnings on [uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The template parameter `T` is any mock class, except for another `NiceMock`, `NaggyMock`, or `StrictMock`. Usage of `NiceMock` is analogous to usage of `T`. `NiceMock` is a subclass of `T`, so it can be used wherever an object of type `T` is accepted. In addition, `NiceMock` can be constructed with any arguments that a constructor of `T` accepts. For example, the following code suppresses warnings on the mock `my_mock` of type `MockClass` if a method other than `DoSomething()` is called: ```cpp using ::testing::NiceMock; ... NiceMock my_mock("some", "args"); EXPECT_CALL(my_mock, DoSomething()); ... code that uses my_mock ... ``` `NiceMock` only works for mock methods defined using the `MOCK_METHOD` macro directly in the definition of class `T`. If a mock method is defined in a base class of `T`, a warning might still be generated. `NiceMock` might not work correctly if the destructor of `T` is not virtual. ### NaggyMock {#NaggyMock} `::testing::NaggyMock` Represents a mock object that generates warnings on [uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The template parameter `T` is any mock class, except for another `NiceMock`, `NaggyMock`, or `StrictMock`. Usage of `NaggyMock` is analogous to usage of `T`. `NaggyMock` is a subclass of `T`, so it can be used wherever an object of type `T` is accepted. In addition, `NaggyMock` can be constructed with any arguments that a constructor of `T` accepts. For example, the following code generates warnings on the mock `my_mock` of type `MockClass` if a method other than `DoSomething()` is called: ```cpp using ::testing::NaggyMock; ... NaggyMock my_mock("some", "args"); EXPECT_CALL(my_mock, DoSomething()); ... code that uses my_mock ... ``` Mock objects of type `T` by default behave the same way as `NaggyMock`. ### StrictMock {#StrictMock} `::testing::StrictMock` Represents a mock object that generates test failures on [uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The template parameter `T` is any mock class, except for another `NiceMock`, `NaggyMock`, or `StrictMock`. Usage of `StrictMock` is analogous to usage of `T`. `StrictMock` is a subclass of `T`, so it can be used wherever an object of type `T` is accepted. In addition, `StrictMock` can be constructed with any arguments that a constructor of `T` accepts. For example, the following code generates a test failure on the mock `my_mock` of type `MockClass` if a method other than `DoSomething()` is called: ```cpp using ::testing::StrictMock; ... StrictMock my_mock("some", "args"); EXPECT_CALL(my_mock, DoSomething()); ... code that uses my_mock ... ``` `StrictMock` only works for mock methods defined using the `MOCK_METHOD` macro directly in the definition of class `T`. If a mock method is defined in a base class of `T`, a failure might not be generated. `StrictMock` might not work correctly if the destructor of `T` is not virtual. ### Sequence {#Sequence} `::testing::Sequence` Represents a chronological sequence of expectations. See the [`InSequence`](#EXPECT_CALL.InSequence) clause of `EXPECT_CALL` for usage. ### InSequence {#InSequence} `::testing::InSequence` An object of this type causes all expectations encountered in its scope to be put in an anonymous sequence. This allows more convenient expression of multiple expectations in a single sequence: ```cpp using ::testing::InSequence; { InSequence seq; // The following are expected to occur in the order declared. EXPECT_CALL(...); EXPECT_CALL(...); ... EXPECT_CALL(...); } ``` The name of the `InSequence` object does not matter. ### Expectation {#Expectation} `::testing::Expectation` Represents a mock function call expectation as created by [`EXPECT_CALL`](#EXPECT_CALL): ```cpp using ::testing::Expectation; Expectation my_expectation = EXPECT_CALL(...); ``` Useful for specifying sequences of expectations; see the [`After`](#EXPECT_CALL.After) clause of `EXPECT_CALL`. ### ExpectationSet {#ExpectationSet} `::testing::ExpectationSet` Represents a set of mock function call expectations. Use the `+=` operator to add [`Expectation`](#Expectation) objects to the set: ```cpp using ::testing::ExpectationSet; ExpectationSet my_expectations; my_expectations += EXPECT_CALL(...); ``` Useful for specifying sequences of expectations; see the [`After`](#EXPECT_CALL.After) clause of `EXPECT_CALL`.