yaml-cpp

FORK: A YAML parser and emitter in C++
git clone https://git.neptards.moe/neptards/yaml-cpp.git
Log | Files | Refs | README | LICENSE

cook_book.md (146528B)


      1 # gMock Cookbook
      2 
      3 <!-- GOOGLETEST_CM0012 DO NOT DELETE -->
      4 
      5 You can find recipes for using gMock here. If you haven't yet, please read
      6 [this](for_dummies.md) first to make sure you understand the basics.
      7 
      8 **Note:** gMock lives in the `testing` name space. For readability, it is
      9 recommended to write `using ::testing::Foo;` once in your file before using the
     10 name `Foo` defined by gMock. We omit such `using` statements in this section for
     11 brevity, but you should do it in your own code.
     12 
     13 ## Creating Mock Classes
     14 
     15 Mock classes are defined as normal classes, using the `MOCK_METHOD` macro to
     16 generate mocked methods. The macro gets 3 or 4 parameters:
     17 
     18 ```cpp
     19 class MyMock {
     20  public:
     21   MOCK_METHOD(ReturnType, MethodName, (Args...));
     22   MOCK_METHOD(ReturnType, MethodName, (Args...), (Specs...));
     23 };
     24 ```
     25 
     26 The first 3 parameters are simply the method declaration, split into 3 parts.
     27 The 4th parameter accepts a closed list of qualifiers, which affect the
     28 generated method:
     29 
     30 *   **`const`** - Makes the mocked method a `const` method. Required if
     31     overriding a `const` method.
     32 *   **`override`** - Marks the method with `override`. Recommended if overriding
     33     a `virtual` method.
     34 *   **`noexcept`** - Marks the method with `noexcept`. Required if overriding a
     35     `noexcept` method.
     36 *   **`Calltype(...)`** - Sets the call type for the method (e.g. to
     37     `STDMETHODCALLTYPE`), useful in Windows.
     38 
     39 ### Dealing with unprotected commas
     40 
     41 Unprotected commas, i.e. commas which are not surrounded by parentheses, prevent
     42 `MOCK_METHOD` from parsing its arguments correctly:
     43 
     44 ```cpp {.bad}
     45 class MockFoo {
     46  public:
     47   MOCK_METHOD(std::pair<bool, int>, GetPair, ());  // Won't compile!
     48   MOCK_METHOD(bool, CheckMap, (std::map<int, double>, bool));  // Won't compile!
     49 };
     50 ```
     51 
     52 Solution 1 - wrap with parentheses:
     53 
     54 ```cpp {.good}
     55 class MockFoo {
     56  public:
     57   MOCK_METHOD((std::pair<bool, int>), GetPair, ());
     58   MOCK_METHOD(bool, CheckMap, ((std::map<int, double>), bool));
     59 };
     60 ```
     61 
     62 Note that wrapping a return or argument type with parentheses is, in general,
     63 invalid C++. `MOCK_METHOD` removes the parentheses.
     64 
     65 Solution 2 - define an alias:
     66 
     67 ```cpp {.good}
     68 class MockFoo {
     69  public:
     70   using BoolAndInt = std::pair<bool, int>;
     71   MOCK_METHOD(BoolAndInt, GetPair, ());
     72   using MapIntDouble = std::map<int, double>;
     73   MOCK_METHOD(bool, CheckMap, (MapIntDouble, bool));
     74 };
     75 ```
     76 
     77 ### Mocking Private or Protected Methods
     78 
     79 You must always put a mock method definition (`MOCK_METHOD`) in a `public:`
     80 section of the mock class, regardless of the method being mocked being `public`,
     81 `protected`, or `private` in the base class. This allows `ON_CALL` and
     82 `EXPECT_CALL` to reference the mock function from outside of the mock class.
     83 (Yes, C++ allows a subclass to change the access level of a virtual function in
     84 the base class.) Example:
     85 
     86 ```cpp
     87 class Foo {
     88  public:
     89   ...
     90   virtual bool Transform(Gadget* g) = 0;
     91 
     92  protected:
     93   virtual void Resume();
     94 
     95  private:
     96   virtual int GetTimeOut();
     97 };
     98 
     99 class MockFoo : public Foo {
    100  public:
    101   ...
    102   MOCK_METHOD(bool, Transform, (Gadget* g), (override));
    103 
    104   // The following must be in the public section, even though the
    105   // methods are protected or private in the base class.
    106   MOCK_METHOD(void, Resume, (), (override));
    107   MOCK_METHOD(int, GetTimeOut, (), (override));
    108 };
    109 ```
    110 
    111 ### Mocking Overloaded Methods
    112 
    113 You can mock overloaded functions as usual. No special attention is required:
    114 
    115 ```cpp
    116 class Foo {
    117   ...
    118 
    119   // Must be virtual as we'll inherit from Foo.
    120   virtual ~Foo();
    121 
    122   // Overloaded on the types and/or numbers of arguments.
    123   virtual int Add(Element x);
    124   virtual int Add(int times, Element x);
    125 
    126   // Overloaded on the const-ness of this object.
    127   virtual Bar& GetBar();
    128   virtual const Bar& GetBar() const;
    129 };
    130 
    131 class MockFoo : public Foo {
    132   ...
    133   MOCK_METHOD(int, Add, (Element x), (override));
    134   MOCK_METHOD(int, Add, (int times, Element x), (override));
    135 
    136   MOCK_METHOD(Bar&, GetBar, (), (override));
    137   MOCK_METHOD(const Bar&, GetBar, (), (const, override));
    138 };
    139 ```
    140 
    141 **Note:** if you don't mock all versions of the overloaded method, the compiler
    142 will give you a warning about some methods in the base class being hidden. To
    143 fix that, use `using` to bring them in scope:
    144 
    145 ```cpp
    146 class MockFoo : public Foo {
    147   ...
    148   using Foo::Add;
    149   MOCK_METHOD(int, Add, (Element x), (override));
    150   // We don't want to mock int Add(int times, Element x);
    151   ...
    152 };
    153 ```
    154 
    155 ### Mocking Class Templates
    156 
    157 You can mock class templates just like any class.
    158 
    159 ```cpp
    160 template <typename Elem>
    161 class StackInterface {
    162   ...
    163   // Must be virtual as we'll inherit from StackInterface.
    164   virtual ~StackInterface();
    165 
    166   virtual int GetSize() const = 0;
    167   virtual void Push(const Elem& x) = 0;
    168 };
    169 
    170 template <typename Elem>
    171 class MockStack : public StackInterface<Elem> {
    172   ...
    173   MOCK_METHOD(int, GetSize, (), (override));
    174   MOCK_METHOD(void, Push, (const Elem& x), (override));
    175 };
    176 ```
    177 
    178 ### Mocking Non-virtual Methods {#MockingNonVirtualMethods}
    179 
    180 gMock can mock non-virtual functions to be used in Hi-perf dependency
    181 injection.<!-- GOOGLETEST_CM0017 DO NOT DELETE -->
    182 
    183 In this case, instead of sharing a common base class with the real class, your
    184 mock class will be *unrelated* to the real class, but contain methods with the
    185 same signatures. The syntax for mocking non-virtual methods is the *same* as
    186 mocking virtual methods (just don't add `override`):
    187 
    188 ```cpp
    189 // A simple packet stream class.  None of its members is virtual.
    190 class ConcretePacketStream {
    191  public:
    192   void AppendPacket(Packet* new_packet);
    193   const Packet* GetPacket(size_t packet_number) const;
    194   size_t NumberOfPackets() const;
    195   ...
    196 };
    197 
    198 // A mock packet stream class.  It inherits from no other, but defines
    199 // GetPacket() and NumberOfPackets().
    200 class MockPacketStream {
    201  public:
    202   MOCK_METHOD(const Packet*, GetPacket, (size_t packet_number), (const));
    203   MOCK_METHOD(size_t, NumberOfPackets, (), (const));
    204   ...
    205 };
    206 ```
    207 
    208 Note that the mock class doesn't define `AppendPacket()`, unlike the real class.
    209 That's fine as long as the test doesn't need to call it.
    210 
    211 Next, you need a way to say that you want to use `ConcretePacketStream` in
    212 production code, and use `MockPacketStream` in tests. Since the functions are
    213 not virtual and the two classes are unrelated, you must specify your choice at
    214 *compile time* (as opposed to run time).
    215 
    216 One way to do it is to templatize your code that needs to use a packet stream.
    217 More specifically, you will give your code a template type argument for the type
    218 of the packet stream. In production, you will instantiate your template with
    219 `ConcretePacketStream` as the type argument. In tests, you will instantiate the
    220 same template with `MockPacketStream`. For example, you may write:
    221 
    222 ```cpp
    223 template <class PacketStream>
    224 void CreateConnection(PacketStream* stream) { ... }
    225 
    226 template <class PacketStream>
    227 class PacketReader {
    228  public:
    229   void ReadPackets(PacketStream* stream, size_t packet_num);
    230 };
    231 ```
    232 
    233 Then you can use `CreateConnection<ConcretePacketStream>()` and
    234 `PacketReader<ConcretePacketStream>` in production code, and use
    235 `CreateConnection<MockPacketStream>()` and `PacketReader<MockPacketStream>` in
    236 tests.
    237 
    238 ```cpp
    239   MockPacketStream mock_stream;
    240   EXPECT_CALL(mock_stream, ...)...;
    241   .. set more expectations on mock_stream ...
    242   PacketReader<MockPacketStream> reader(&mock_stream);
    243   ... exercise reader ...
    244 ```
    245 
    246 ### Mocking Free Functions
    247 
    248 It's possible to use gMock to mock a free function (i.e. a C-style function or a
    249 static method). You just need to rewrite your code to use an interface (abstract
    250 class).
    251 
    252 Instead of calling a free function (say, `OpenFile`) directly, introduce an
    253 interface for it and have a concrete subclass that calls the free function:
    254 
    255 ```cpp
    256 class FileInterface {
    257  public:
    258   ...
    259   virtual bool Open(const char* path, const char* mode) = 0;
    260 };
    261 
    262 class File : public FileInterface {
    263  public:
    264   ...
    265   virtual bool Open(const char* path, const char* mode) {
    266      return OpenFile(path, mode);
    267   }
    268 };
    269 ```
    270 
    271 Your code should talk to `FileInterface` to open a file. Now it's easy to mock
    272 out the function.
    273 
    274 This may seem like a lot of hassle, but in practice you often have multiple
    275 related functions that you can put in the same interface, so the per-function
    276 syntactic overhead will be much lower.
    277 
    278 If you are concerned about the performance overhead incurred by virtual
    279 functions, and profiling confirms your concern, you can combine this with the
    280 recipe for [mocking non-virtual methods](#MockingNonVirtualMethods).
    281 
    282 ### Old-Style `MOCK_METHODn` Macros
    283 
    284 Before the generic `MOCK_METHOD` macro was introduced, mocks where created using
    285 a family of macros collectively called `MOCK_METHODn`. These macros are still
    286 supported, though migration to the new `MOCK_METHOD` is recommended.
    287 
    288 The macros in the `MOCK_METHODn` family differ from `MOCK_METHOD`:
    289 
    290 *   The general structure is `MOCK_METHODn(MethodName, ReturnType(Args))`,
    291     instead of `MOCK_METHOD(ReturnType, MethodName, (Args))`.
    292 *   The number `n` must equal the number of arguments.
    293 *   When mocking a const method, one must use `MOCK_CONST_METHODn`.
    294 *   When mocking a class template, the macro name must be suffixed with `_T`.
    295 *   In order to specify the call type, the macro name must be suffixed with
    296     `_WITH_CALLTYPE`, and the call type is the first macro argument.
    297 
    298 Old macros and their new equivalents:
    299 
    300 <a name="table99"></a>
    301 <table border="1" cellspacing="0" cellpadding="1">
    302 <tr> <th colspan=2> Simple </th></tr>
    303 <tr> <td> Old </td> <td> `MOCK_METHOD1(Foo, bool(int))` </td> </tr>
    304 <tr> <td> New </td> <td> `MOCK_METHOD(bool, Foo, (int))` </td> </tr>
    305 
    306 <tr> <th colspan=2> Const Method </th></tr> <tr> <td> Old </td> <td>
    307 `MOCK_CONST_METHOD1(Foo, bool(int))` </td> </tr> <tr> <td> New </td> <td>
    308 `MOCK_METHOD(bool, Foo, (int), (const))` </td> </tr>
    309 
    310 <tr> <th colspan=2> Method in a Class Template </th></tr> <tr> <td> Old </td>
    311 <td> `MOCK_METHOD1_T(Foo, bool(int))` </td> </tr> <tr> <td> New </td> <td>
    312 `MOCK_METHOD(bool, Foo, (int))` </td> </tr>
    313 
    314 <tr> <th colspan=2> Const Method in a Class Template </th></tr> <tr> <td> Old
    315 </td> <td> `MOCK_CONST_METHOD1_T(Foo, bool(int))` </td> </tr> <tr> <td> New
    316 </td> <td> `MOCK_METHOD(bool, Foo, (int), (const))` </td> </tr>
    317 
    318 <tr> <th colspan=2> Method with Call Type </th></tr> <tr> <td> Old </td> <td>
    319 `MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))` </td> </tr> <tr>
    320 <td> New </td> <td> `MOCK_METHOD(bool, Foo, (int),
    321 (Calltype(STDMETHODCALLTYPE)))` </td> </tr>
    322 
    323 <tr> <th colspan=2> Const Method with Call Type </th></tr> <tr> <td> Old</td>
    324 <td> `MOCK_CONST_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))` </td>
    325 </tr> <tr> <td> New </td> <td> `MOCK_METHOD(bool, Foo, (int), (const,
    326 Calltype(STDMETHODCALLTYPE)))` </td> </tr>
    327 
    328 <tr> <th colspan=2> Method with Call Type in a Class Template </th></tr> <tr>
    329 <td> Old </td> <td> `MOCK_METHOD1_T_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo,
    330 bool(int))` </td> </tr> <tr> <td> New </td> <td> `MOCK_METHOD(bool, Foo, (int),
    331 (Calltype(STDMETHODCALLTYPE)))` </td> </tr>
    332 
    333 <tr> <th colspan=2> Const Method with Call Type in a Class Template </th></tr>
    334 <tr> <td> Old </td> <td> `MOCK_CONST_METHOD1_T_WITH_CALLTYPE(STDMETHODCALLTYPE,
    335 Foo, bool(int))` </td> </tr> <tr> <td> New </td> <td> `MOCK_METHOD(bool, Foo,
    336 (int), (const, Calltype(STDMETHODCALLTYPE)))` </td> </tr>
    337 
    338 </table>
    339 
    340 ### The Nice, the Strict, and the Naggy {#NiceStrictNaggy}
    341 
    342 If a mock method has no `EXPECT_CALL` spec but is called, we say that it's an
    343 "uninteresting call", and the default action (which can be specified using
    344 `ON_CALL()`) of the method will be taken. Currently, an uninteresting call will
    345 also by default cause gMock to print a warning. (In the future, we might remove
    346 this warning by default.)
    347 
    348 However, sometimes you may want to ignore these uninteresting calls, and
    349 sometimes you may want to treat them as errors. gMock lets you make the decision
    350 on a per-mock-object basis.
    351 
    352 Suppose your test uses a mock class `MockFoo`:
    353 
    354 ```cpp
    355 TEST(...) {
    356   MockFoo mock_foo;
    357   EXPECT_CALL(mock_foo, DoThis());
    358   ... code that uses mock_foo ...
    359 }
    360 ```
    361 
    362 If a method of `mock_foo` other than `DoThis()` is called, you will get a
    363 warning. However, if you rewrite your test to use `NiceMock<MockFoo>` instead,
    364 you can suppress the warning:
    365 
    366 ```cpp
    367 using ::testing::NiceMock;
    368 
    369 TEST(...) {
    370   NiceMock<MockFoo> mock_foo;
    371   EXPECT_CALL(mock_foo, DoThis());
    372   ... code that uses mock_foo ...
    373 }
    374 ```
    375 
    376 `NiceMock<MockFoo>` is a subclass of `MockFoo`, so it can be used wherever
    377 `MockFoo` is accepted.
    378 
    379 It also works if `MockFoo`'s constructor takes some arguments, as
    380 `NiceMock<MockFoo>` "inherits" `MockFoo`'s constructors:
    381 
    382 ```cpp
    383 using ::testing::NiceMock;
    384 
    385 TEST(...) {
    386   NiceMock<MockFoo> mock_foo(5, "hi");  // Calls MockFoo(5, "hi").
    387   EXPECT_CALL(mock_foo, DoThis());
    388   ... code that uses mock_foo ...
    389 }
    390 ```
    391 
    392 The usage of `StrictMock` is similar, except that it makes all uninteresting
    393 calls failures:
    394 
    395 ```cpp
    396 using ::testing::StrictMock;
    397 
    398 TEST(...) {
    399   StrictMock<MockFoo> mock_foo;
    400   EXPECT_CALL(mock_foo, DoThis());
    401   ... code that uses mock_foo ...
    402 
    403   // The test will fail if a method of mock_foo other than DoThis()
    404   // is called.
    405 }
    406 ```
    407 
    408 NOTE: `NiceMock` and `StrictMock` only affects *uninteresting* calls (calls of
    409 *methods* with no expectations); they do not affect *unexpected* calls (calls of
    410 methods with expectations, but they don't match). See
    411 [Understanding Uninteresting vs Unexpected Calls](#uninteresting-vs-unexpected).
    412 
    413 There are some caveats though (I dislike them just as much as the next guy, but
    414 sadly they are side effects of C++'s limitations):
    415 
    416 1.  `NiceMock<MockFoo>` and `StrictMock<MockFoo>` only work for mock methods
    417     defined using the `MOCK_METHOD` macro **directly** in the `MockFoo` class.
    418     If a mock method is defined in a **base class** of `MockFoo`, the "nice" or
    419     "strict" modifier may not affect it, depending on the compiler. In
    420     particular, nesting `NiceMock` and `StrictMock` (e.g.
    421     `NiceMock<StrictMock<MockFoo> >`) is **not** supported.
    422 2.  `NiceMock<MockFoo>` and `StrictMock<MockFoo>` may not work correctly if the
    423     destructor of `MockFoo` is not virtual. We would like to fix this, but it
    424     requires cleaning up existing tests. http://b/28934720 tracks the issue.
    425 3.  During the constructor or destructor of `MockFoo`, the mock object is *not*
    426     nice or strict. This may cause surprises if the constructor or destructor
    427     calls a mock method on `this` object. (This behavior, however, is consistent
    428     with C++'s general rule: if a constructor or destructor calls a virtual
    429     method of `this` object, that method is treated as non-virtual. In other
    430     words, to the base class's constructor or destructor, `this` object behaves
    431     like an instance of the base class, not the derived class. This rule is
    432     required for safety. Otherwise a base constructor may use members of a
    433     derived class before they are initialized, or a base destructor may use
    434     members of a derived class after they have been destroyed.)
    435 
    436 Finally, you should be **very cautious** about when to use naggy or strict
    437 mocks, as they tend to make tests more brittle and harder to maintain. When you
    438 refactor your code without changing its externally visible behavior, ideally you
    439 shouldn't need to update any tests. If your code interacts with a naggy mock,
    440 however, you may start to get spammed with warnings as the result of your
    441 change. Worse, if your code interacts with a strict mock, your tests may start
    442 to fail and you'll be forced to fix them. Our general recommendation is to use
    443 nice mocks (not yet the default) most of the time, use naggy mocks (the current
    444 default) when developing or debugging tests, and use strict mocks only as the
    445 last resort.
    446 
    447 ### Simplifying the Interface without Breaking Existing Code {#SimplerInterfaces}
    448 
    449 Sometimes a method has a long list of arguments that is mostly uninteresting.
    450 For example:
    451 
    452 ```cpp
    453 class LogSink {
    454  public:
    455   ...
    456   virtual void send(LogSeverity severity, const char* full_filename,
    457                     const char* base_filename, int line,
    458                     const struct tm* tm_time,
    459                     const char* message, size_t message_len) = 0;
    460 };
    461 ```
    462 
    463 This method's argument list is lengthy and hard to work with (the `message`
    464 argument is not even 0-terminated). If we mock it as is, using the mock will be
    465 awkward. If, however, we try to simplify this interface, we'll need to fix all
    466 clients depending on it, which is often infeasible.
    467 
    468 The trick is to redispatch the method in the mock class:
    469 
    470 ```cpp
    471 class ScopedMockLog : public LogSink {
    472  public:
    473   ...
    474   virtual void send(LogSeverity severity, const char* full_filename,
    475                     const char* base_filename, int line, const tm* tm_time,
    476                     const char* message, size_t message_len) {
    477     // We are only interested in the log severity, full file name, and
    478     // log message.
    479     Log(severity, full_filename, std::string(message, message_len));
    480   }
    481 
    482   // Implements the mock method:
    483   //
    484   //   void Log(LogSeverity severity,
    485   //            const string& file_path,
    486   //            const string& message);
    487   MOCK_METHOD(void, Log,
    488               (LogSeverity severity, const string& file_path,
    489                const string& message));
    490 };
    491 ```
    492 
    493 By defining a new mock method with a trimmed argument list, we make the mock
    494 class more user-friendly.
    495 
    496 This technique may also be applied to make overloaded methods more amenable to
    497 mocking. For example, when overloads have been used to implement default
    498 arguments:
    499 
    500 ```cpp
    501 class MockTurtleFactory : public TurtleFactory {
    502  public:
    503   Turtle* MakeTurtle(int length, int weight) override { ... }
    504   Turtle* MakeTurtle(int length, int weight, int speed) override { ... }
    505 
    506   // the above methods delegate to this one:
    507   MOCK_METHOD(Turtle*, DoMakeTurtle, ());
    508 };
    509 ```
    510 
    511 This allows tests that don't care which overload was invoked to avoid specifying
    512 argument matchers:
    513 
    514 ```cpp
    515 ON_CALL(factory, DoMakeTurtle)
    516     .WillByDefault(MakeMockTurtle());
    517 ```
    518 
    519 ### Alternative to Mocking Concrete Classes
    520 
    521 Often you may find yourself using classes that don't implement interfaces. In
    522 order to test your code that uses such a class (let's call it `Concrete`), you
    523 may be tempted to make the methods of `Concrete` virtual and then mock it.
    524 
    525 Try not to do that.
    526 
    527 Making a non-virtual function virtual is a big decision. It creates an extension
    528 point where subclasses can tweak your class' behavior. This weakens your control
    529 on the class because now it's harder to maintain the class invariants. You
    530 should make a function virtual only when there is a valid reason for a subclass
    531 to override it.
    532 
    533 Mocking concrete classes directly is problematic as it creates a tight coupling
    534 between the class and the tests - any small change in the class may invalidate
    535 your tests and make test maintenance a pain.
    536 
    537 To avoid such problems, many programmers have been practicing "coding to
    538 interfaces": instead of talking to the `Concrete` class, your code would define
    539 an interface and talk to it. Then you implement that interface as an adaptor on
    540 top of `Concrete`. In tests, you can easily mock that interface to observe how
    541 your code is doing.
    542 
    543 This technique incurs some overhead:
    544 
    545 *   You pay the cost of virtual function calls (usually not a problem).
    546 *   There is more abstraction for the programmers to learn.
    547 
    548 However, it can also bring significant benefits in addition to better
    549 testability:
    550 
    551 *   `Concrete`'s API may not fit your problem domain very well, as you may not
    552     be the only client it tries to serve. By designing your own interface, you
    553     have a chance to tailor it to your need - you may add higher-level
    554     functionalities, rename stuff, etc instead of just trimming the class. This
    555     allows you to write your code (user of the interface) in a more natural way,
    556     which means it will be more readable, more maintainable, and you'll be more
    557     productive.
    558 *   If `Concrete`'s implementation ever has to change, you don't have to rewrite
    559     everywhere it is used. Instead, you can absorb the change in your
    560     implementation of the interface, and your other code and tests will be
    561     insulated from this change.
    562 
    563 Some people worry that if everyone is practicing this technique, they will end
    564 up writing lots of redundant code. This concern is totally understandable.
    565 However, there are two reasons why it may not be the case:
    566 
    567 *   Different projects may need to use `Concrete` in different ways, so the best
    568     interfaces for them will be different. Therefore, each of them will have its
    569     own domain-specific interface on top of `Concrete`, and they will not be the
    570     same code.
    571 *   If enough projects want to use the same interface, they can always share it,
    572     just like they have been sharing `Concrete`. You can check in the interface
    573     and the adaptor somewhere near `Concrete` (perhaps in a `contrib`
    574     sub-directory) and let many projects use it.
    575 
    576 You need to weigh the pros and cons carefully for your particular problem, but
    577 I'd like to assure you that the Java community has been practicing this for a
    578 long time and it's a proven effective technique applicable in a wide variety of
    579 situations. :-)
    580 
    581 ### Delegating Calls to a Fake {#DelegatingToFake}
    582 
    583 Some times you have a non-trivial fake implementation of an interface. For
    584 example:
    585 
    586 ```cpp
    587 class Foo {
    588  public:
    589   virtual ~Foo() {}
    590   virtual char DoThis(int n) = 0;
    591   virtual void DoThat(const char* s, int* p) = 0;
    592 };
    593 
    594 class FakeFoo : public Foo {
    595  public:
    596   char DoThis(int n) override {
    597     return (n > 0) ? '+' :
    598            (n < 0) ? '-' : '0';
    599   }
    600 
    601   void DoThat(const char* s, int* p) override {
    602     *p = strlen(s);
    603   }
    604 };
    605 ```
    606 
    607 Now you want to mock this interface such that you can set expectations on it.
    608 However, you also want to use `FakeFoo` for the default behavior, as duplicating
    609 it in the mock object is, well, a lot of work.
    610 
    611 When you define the mock class using gMock, you can have it delegate its default
    612 action to a fake class you already have, using this pattern:
    613 
    614 ```cpp
    615 class MockFoo : public Foo {
    616  public:
    617   // Normal mock method definitions using gMock.
    618   MOCK_METHOD(char, DoThis, (int n), (override));
    619   MOCK_METHOD(void, DoThat, (const char* s, int* p), (override));
    620 
    621   // Delegates the default actions of the methods to a FakeFoo object.
    622   // This must be called *before* the custom ON_CALL() statements.
    623   void DelegateToFake() {
    624     ON_CALL(*this, DoThis).WillByDefault([this](int n) {
    625       return fake_.DoThis(n);
    626     });
    627     ON_CALL(*this, DoThat).WillByDefault([this](const char* s, int* p) {
    628       fake_.DoThat(s, p);
    629     });
    630   }
    631 
    632  private:
    633   FakeFoo fake_;  // Keeps an instance of the fake in the mock.
    634 };
    635 ```
    636 
    637 With that, you can use `MockFoo` in your tests as usual. Just remember that if
    638 you don't explicitly set an action in an `ON_CALL()` or `EXPECT_CALL()`, the
    639 fake will be called upon to do it.:
    640 
    641 ```cpp
    642 using ::testing::_;
    643 
    644 TEST(AbcTest, Xyz) {
    645   MockFoo foo;
    646 
    647   foo.DelegateToFake();  // Enables the fake for delegation.
    648 
    649   // Put your ON_CALL(foo, ...)s here, if any.
    650 
    651   // No action specified, meaning to use the default action.
    652   EXPECT_CALL(foo, DoThis(5));
    653   EXPECT_CALL(foo, DoThat(_, _));
    654 
    655   int n = 0;
    656   EXPECT_EQ('+', foo.DoThis(5));  // FakeFoo::DoThis() is invoked.
    657   foo.DoThat("Hi", &n);  // FakeFoo::DoThat() is invoked.
    658   EXPECT_EQ(2, n);
    659 }
    660 ```
    661 
    662 **Some tips:**
    663 
    664 *   If you want, you can still override the default action by providing your own
    665     `ON_CALL()` or using `.WillOnce()` / `.WillRepeatedly()` in `EXPECT_CALL()`.
    666 *   In `DelegateToFake()`, you only need to delegate the methods whose fake
    667     implementation you intend to use.
    668 
    669 *   The general technique discussed here works for overloaded methods, but
    670     you'll need to tell the compiler which version you mean. To disambiguate a
    671     mock function (the one you specify inside the parentheses of `ON_CALL()`),
    672     use [this technique](#SelectOverload); to disambiguate a fake function (the
    673     one you place inside `Invoke()`), use a `static_cast` to specify the
    674     function's type. For instance, if class `Foo` has methods `char DoThis(int
    675     n)` and `bool DoThis(double x) const`, and you want to invoke the latter,
    676     you need to write `Invoke(&fake_, static_cast<bool (FakeFoo::*)(double)
    677     const>(&FakeFoo::DoThis))` instead of `Invoke(&fake_, &FakeFoo::DoThis)`
    678     (The strange-looking thing inside the angled brackets of `static_cast` is
    679     the type of a function pointer to the second `DoThis()` method.).
    680 
    681 *   Having to mix a mock and a fake is often a sign of something gone wrong.
    682     Perhaps you haven't got used to the interaction-based way of testing yet. Or
    683     perhaps your interface is taking on too many roles and should be split up.
    684     Therefore, **don't abuse this**. We would only recommend to do it as an
    685     intermediate step when you are refactoring your code.
    686 
    687 Regarding the tip on mixing a mock and a fake, here's an example on why it may
    688 be a bad sign: Suppose you have a class `System` for low-level system
    689 operations. In particular, it does file and I/O operations. And suppose you want
    690 to test how your code uses `System` to do I/O, and you just want the file
    691 operations to work normally. If you mock out the entire `System` class, you'll
    692 have to provide a fake implementation for the file operation part, which
    693 suggests that `System` is taking on too many roles.
    694 
    695 Instead, you can define a `FileOps` interface and an `IOOps` interface and split
    696 `System`'s functionalities into the two. Then you can mock `IOOps` without
    697 mocking `FileOps`.
    698 
    699 ### Delegating Calls to a Real Object
    700 
    701 When using testing doubles (mocks, fakes, stubs, and etc), sometimes their
    702 behaviors will differ from those of the real objects. This difference could be
    703 either intentional (as in simulating an error such that you can test the error
    704 handling code) or unintentional. If your mocks have different behaviors than the
    705 real objects by mistake, you could end up with code that passes the tests but
    706 fails in production.
    707 
    708 You can use the *delegating-to-real* technique to ensure that your mock has the
    709 same behavior as the real object while retaining the ability to validate calls.
    710 This technique is very similar to the [delegating-to-fake](#DelegatingToFake)
    711 technique, the difference being that we use a real object instead of a fake.
    712 Here's an example:
    713 
    714 ```cpp
    715 using ::testing::AtLeast;
    716 
    717 class MockFoo : public Foo {
    718  public:
    719   MockFoo() {
    720     // By default, all calls are delegated to the real object.
    721     ON_CALL(*this, DoThis).WillByDefault([this](int n) {
    722       return real_.DoThis(n);
    723     });
    724     ON_CALL(*this, DoThat).WillByDefault([this](const char* s, int* p) {
    725       real_.DoThat(s, p);
    726     });
    727     ...
    728   }
    729   MOCK_METHOD(char, DoThis, ...);
    730   MOCK_METHOD(void, DoThat, ...);
    731   ...
    732  private:
    733   Foo real_;
    734 };
    735 
    736 ...
    737   MockFoo mock;
    738   EXPECT_CALL(mock, DoThis())
    739       .Times(3);
    740   EXPECT_CALL(mock, DoThat("Hi"))
    741       .Times(AtLeast(1));
    742   ... use mock in test ...
    743 ```
    744 
    745 With this, gMock will verify that your code made the right calls (with the right
    746 arguments, in the right order, called the right number of times, etc), and a
    747 real object will answer the calls (so the behavior will be the same as in
    748 production). This gives you the best of both worlds.
    749 
    750 ### Delegating Calls to a Parent Class
    751 
    752 Ideally, you should code to interfaces, whose methods are all pure virtual. In
    753 reality, sometimes you do need to mock a virtual method that is not pure (i.e,
    754 it already has an implementation). For example:
    755 
    756 ```cpp
    757 class Foo {
    758  public:
    759   virtual ~Foo();
    760 
    761   virtual void Pure(int n) = 0;
    762   virtual int Concrete(const char* str) { ... }
    763 };
    764 
    765 class MockFoo : public Foo {
    766  public:
    767   // Mocking a pure method.
    768   MOCK_METHOD(void, Pure, (int n), (override));
    769   // Mocking a concrete method.  Foo::Concrete() is shadowed.
    770   MOCK_METHOD(int, Concrete, (const char* str), (override));
    771 };
    772 ```
    773 
    774 Sometimes you may want to call `Foo::Concrete()` instead of
    775 `MockFoo::Concrete()`. Perhaps you want to do it as part of a stub action, or
    776 perhaps your test doesn't need to mock `Concrete()` at all (but it would be
    777 oh-so painful to have to define a new mock class whenever you don't need to mock
    778 one of its methods).
    779 
    780 The trick is to leave a back door in your mock class for accessing the real
    781 methods in the base class:
    782 
    783 ```cpp
    784 class MockFoo : public Foo {
    785  public:
    786   // Mocking a pure method.
    787   MOCK_METHOD(void, Pure, (int n), (override));
    788   // Mocking a concrete method.  Foo::Concrete() is shadowed.
    789   MOCK_METHOD(int, Concrete, (const char* str), (override));
    790 
    791   // Use this to call Concrete() defined in Foo.
    792   int FooConcrete(const char* str) { return Foo::Concrete(str); }
    793 };
    794 ```
    795 
    796 Now, you can call `Foo::Concrete()` inside an action by:
    797 
    798 ```cpp
    799 ...
    800   EXPECT_CALL(foo, Concrete).WillOnce([&foo](const char* str) {
    801     return foo.FooConcrete(str);
    802   });
    803 ```
    804 
    805 or tell the mock object that you don't want to mock `Concrete()`:
    806 
    807 ```cpp
    808 ...
    809   ON_CALL(foo, Concrete).WillByDefault([&foo](const char* str) {
    810     return foo.FooConcrete(str);
    811   });
    812 ```
    813 
    814 (Why don't we just write `{ return foo.Concrete(str); }`? If you do that,
    815 `MockFoo::Concrete()` will be called (and cause an infinite recursion) since
    816 `Foo::Concrete()` is virtual. That's just how C++ works.)
    817 
    818 ## Using Matchers
    819 
    820 ### Matching Argument Values Exactly
    821 
    822 You can specify exactly which arguments a mock method is expecting:
    823 
    824 ```cpp
    825 using ::testing::Return;
    826 ...
    827   EXPECT_CALL(foo, DoThis(5))
    828       .WillOnce(Return('a'));
    829   EXPECT_CALL(foo, DoThat("Hello", bar));
    830 ```
    831 
    832 ### Using Simple Matchers
    833 
    834 You can use matchers to match arguments that have a certain property:
    835 
    836 ```cpp
    837 using ::testing::NotNull;
    838 using ::testing::Return;
    839 ...
    840   EXPECT_CALL(foo, DoThis(Ge(5)))  // The argument must be >= 5.
    841       .WillOnce(Return('a'));
    842   EXPECT_CALL(foo, DoThat("Hello", NotNull()));
    843       // The second argument must not be NULL.
    844 ```
    845 
    846 A frequently used matcher is `_`, which matches anything:
    847 
    848 ```cpp
    849   EXPECT_CALL(foo, DoThat(_, NotNull()));
    850 ```
    851 <!-- GOOGLETEST_CM0022 DO NOT DELETE -->
    852 
    853 ### Combining Matchers {#CombiningMatchers}
    854 
    855 You can build complex matchers from existing ones using `AllOf()`,
    856 `AllOfArray()`, `AnyOf()`, `AnyOfArray()` and `Not()`:
    857 
    858 ```cpp
    859 using ::testing::AllOf;
    860 using ::testing::Gt;
    861 using ::testing::HasSubstr;
    862 using ::testing::Ne;
    863 using ::testing::Not;
    864 ...
    865   // The argument must be > 5 and != 10.
    866   EXPECT_CALL(foo, DoThis(AllOf(Gt(5),
    867                                 Ne(10))));
    868 
    869   // The first argument must not contain sub-string "blah".
    870   EXPECT_CALL(foo, DoThat(Not(HasSubstr("blah")),
    871                           NULL));
    872 ```
    873 
    874 ### Casting Matchers {#SafeMatcherCast}
    875 
    876 gMock matchers are statically typed, meaning that the compiler can catch your
    877 mistake if you use a matcher of the wrong type (for example, if you use `Eq(5)`
    878 to match a `string` argument). Good for you!
    879 
    880 Sometimes, however, you know what you're doing and want the compiler to give you
    881 some slack. One example is that you have a matcher for `long` and the argument
    882 you want to match is `int`. While the two types aren't exactly the same, there
    883 is nothing really wrong with using a `Matcher<long>` to match an `int` - after
    884 all, we can first convert the `int` argument to a `long` losslessly before
    885 giving it to the matcher.
    886 
    887 To support this need, gMock gives you the `SafeMatcherCast<T>(m)` function. It
    888 casts a matcher `m` to type `Matcher<T>`. To ensure safety, gMock checks that
    889 (let `U` be the type `m` accepts :
    890 
    891 1.  Type `T` can be *implicitly* cast to type `U`;
    892 2.  When both `T` and `U` are built-in arithmetic types (`bool`, integers, and
    893     floating-point numbers), the conversion from `T` to `U` is not lossy (in
    894     other words, any value representable by `T` can also be represented by `U`);
    895     and
    896 3.  When `U` is a reference, `T` must also be a reference (as the underlying
    897     matcher may be interested in the address of the `U` value).
    898 
    899 The code won't compile if any of these conditions isn't met.
    900 
    901 Here's one example:
    902 
    903 ```cpp
    904 using ::testing::SafeMatcherCast;
    905 
    906 // A base class and a child class.
    907 class Base { ... };
    908 class Derived : public Base { ... };
    909 
    910 class MockFoo : public Foo {
    911  public:
    912   MOCK_METHOD(void, DoThis, (Derived* derived), (override));
    913 };
    914 
    915 ...
    916   MockFoo foo;
    917   // m is a Matcher<Base*> we got from somewhere.
    918   EXPECT_CALL(foo, DoThis(SafeMatcherCast<Derived*>(m)));
    919 ```
    920 
    921 If you find `SafeMatcherCast<T>(m)` too limiting, you can use a similar function
    922 `MatcherCast<T>(m)`. The difference is that `MatcherCast` works as long as you
    923 can `static_cast` type `T` to type `U`.
    924 
    925 `MatcherCast` essentially lets you bypass C++'s type system (`static_cast` isn't
    926 always safe as it could throw away information, for example), so be careful not
    927 to misuse/abuse it.
    928 
    929 ### Selecting Between Overloaded Functions {#SelectOverload}
    930 
    931 If you expect an overloaded function to be called, the compiler may need some
    932 help on which overloaded version it is.
    933 
    934 To disambiguate functions overloaded on the const-ness of this object, use the
    935 `Const()` argument wrapper.
    936 
    937 ```cpp
    938 using ::testing::ReturnRef;
    939 
    940 class MockFoo : public Foo {
    941   ...
    942   MOCK_METHOD(Bar&, GetBar, (), (override));
    943   MOCK_METHOD(const Bar&, GetBar, (), (const, override));
    944 };
    945 
    946 ...
    947   MockFoo foo;
    948   Bar bar1, bar2;
    949   EXPECT_CALL(foo, GetBar())         // The non-const GetBar().
    950       .WillOnce(ReturnRef(bar1));
    951   EXPECT_CALL(Const(foo), GetBar())  // The const GetBar().
    952       .WillOnce(ReturnRef(bar2));
    953 ```
    954 
    955 (`Const()` is defined by gMock and returns a `const` reference to its argument.)
    956 
    957 To disambiguate overloaded functions with the same number of arguments but
    958 different argument types, you may need to specify the exact type of a matcher,
    959 either by wrapping your matcher in `Matcher<type>()`, or using a matcher whose
    960 type is fixed (`TypedEq<type>`, `An<type>()`, etc):
    961 
    962 ```cpp
    963 using ::testing::An;
    964 using ::testing::Matcher;
    965 using ::testing::TypedEq;
    966 
    967 class MockPrinter : public Printer {
    968  public:
    969   MOCK_METHOD(void, Print, (int n), (override));
    970   MOCK_METHOD(void, Print, (char c), (override));
    971 };
    972 
    973 TEST(PrinterTest, Print) {
    974   MockPrinter printer;
    975 
    976   EXPECT_CALL(printer, Print(An<int>()));            // void Print(int);
    977   EXPECT_CALL(printer, Print(Matcher<int>(Lt(5))));  // void Print(int);
    978   EXPECT_CALL(printer, Print(TypedEq<char>('a')));   // void Print(char);
    979 
    980   printer.Print(3);
    981   printer.Print(6);
    982   printer.Print('a');
    983 }
    984 ```
    985 
    986 ### Performing Different Actions Based on the Arguments
    987 
    988 When a mock method is called, the *last* matching expectation that's still
    989 active will be selected (think "newer overrides older"). So, you can make a
    990 method do different things depending on its argument values like this:
    991 
    992 ```cpp
    993 using ::testing::_;
    994 using ::testing::Lt;
    995 using ::testing::Return;
    996 ...
    997   // The default case.
    998   EXPECT_CALL(foo, DoThis(_))
    999       .WillRepeatedly(Return('b'));
   1000   // The more specific case.
   1001   EXPECT_CALL(foo, DoThis(Lt(5)))
   1002       .WillRepeatedly(Return('a'));
   1003 ```
   1004 
   1005 Now, if `foo.DoThis()` is called with a value less than 5, `'a'` will be
   1006 returned; otherwise `'b'` will be returned.
   1007 
   1008 ### Matching Multiple Arguments as a Whole
   1009 
   1010 Sometimes it's not enough to match the arguments individually. For example, we
   1011 may want to say that the first argument must be less than the second argument.
   1012 The `With()` clause allows us to match all arguments of a mock function as a
   1013 whole. For example,
   1014 
   1015 ```cpp
   1016 using ::testing::_;
   1017 using ::testing::Ne;
   1018 using ::testing::Lt;
   1019 ...
   1020   EXPECT_CALL(foo, InRange(Ne(0), _))
   1021       .With(Lt());
   1022 ```
   1023 
   1024 says that the first argument of `InRange()` must not be 0, and must be less than
   1025 the second argument.
   1026 
   1027 The expression inside `With()` must be a matcher of type
   1028 `Matcher< ::std::tuple<A1, ..., An> >`, where `A1`, ..., `An` are the types of
   1029 the function arguments.
   1030 
   1031 You can also write `AllArgs(m)` instead of `m` inside `.With()`. The two forms
   1032 are equivalent, but `.With(AllArgs(Lt()))` is more readable than `.With(Lt())`.
   1033 
   1034 You can use `Args<k1, ..., kn>(m)` to match the `n` selected arguments (as a
   1035 tuple) against `m`. For example,
   1036 
   1037 ```cpp
   1038 using ::testing::_;
   1039 using ::testing::AllOf;
   1040 using ::testing::Args;
   1041 using ::testing::Lt;
   1042 ...
   1043   EXPECT_CALL(foo, Blah)
   1044       .With(AllOf(Args<0, 1>(Lt()), Args<1, 2>(Lt())));
   1045 ```
   1046 
   1047 says that `Blah` will be called with arguments `x`, `y`, and `z` where `x < y <
   1048 z`. Note that in this example, it wasn't necessary specify the positional
   1049 matchers.
   1050 
   1051 As a convenience and example, gMock provides some matchers for 2-tuples,
   1052 including the `Lt()` matcher above. See [here](#MultiArgMatchers) for the
   1053 complete list.
   1054 
   1055 Note that if you want to pass the arguments to a predicate of your own (e.g.
   1056 `.With(Args<0, 1>(Truly(&MyPredicate)))`), that predicate MUST be written to
   1057 take a `::std::tuple` as its argument; gMock will pass the `n` selected
   1058 arguments as *one* single tuple to the predicate.
   1059 
   1060 ### Using Matchers as Predicates
   1061 
   1062 Have you noticed that a matcher is just a fancy predicate that also knows how to
   1063 describe itself? Many existing algorithms take predicates as arguments (e.g.
   1064 those defined in STL's `<algorithm>` header), and it would be a shame if gMock
   1065 matchers were not allowed to participate.
   1066 
   1067 Luckily, you can use a matcher where a unary predicate functor is expected by
   1068 wrapping it inside the `Matches()` function. For example,
   1069 
   1070 ```cpp
   1071 #include <algorithm>
   1072 #include <vector>
   1073 
   1074 using ::testing::Matches;
   1075 using ::testing::Ge;
   1076 
   1077 vector<int> v;
   1078 ...
   1079 // How many elements in v are >= 10?
   1080 const int count = count_if(v.begin(), v.end(), Matches(Ge(10)));
   1081 ```
   1082 
   1083 Since you can build complex matchers from simpler ones easily using gMock, this
   1084 gives you a way to conveniently construct composite predicates (doing the same
   1085 using STL's `<functional>` header is just painful). For example, here's a
   1086 predicate that's satisfied by any number that is >= 0, <= 100, and != 50:
   1087 
   1088 ```cpp
   1089 using testing::AllOf;
   1090 using testing::Ge;
   1091 using testing::Le;
   1092 using testing::Matches;
   1093 using testing::Ne;
   1094 ...
   1095 Matches(AllOf(Ge(0), Le(100), Ne(50)))
   1096 ```
   1097 
   1098 ### Using Matchers in googletest Assertions
   1099 
   1100 Since matchers are basically predicates that also know how to describe
   1101 themselves, there is a way to take advantage of them in googletest assertions.
   1102 It's called `ASSERT_THAT` and `EXPECT_THAT`:
   1103 
   1104 ```cpp
   1105   ASSERT_THAT(value, matcher);  // Asserts that value matches matcher.
   1106   EXPECT_THAT(value, matcher);  // The non-fatal version.
   1107 ```
   1108 
   1109 For example, in a googletest test you can write:
   1110 
   1111 ```cpp
   1112 #include "gmock/gmock.h"
   1113 
   1114 using ::testing::AllOf;
   1115 using ::testing::Ge;
   1116 using ::testing::Le;
   1117 using ::testing::MatchesRegex;
   1118 using ::testing::StartsWith;
   1119 
   1120 ...
   1121   EXPECT_THAT(Foo(), StartsWith("Hello"));
   1122   EXPECT_THAT(Bar(), MatchesRegex("Line \\d+"));
   1123   ASSERT_THAT(Baz(), AllOf(Ge(5), Le(10)));
   1124 ```
   1125 
   1126 which (as you can probably guess) executes `Foo()`, `Bar()`, and `Baz()`, and
   1127 verifies that:
   1128 
   1129 *   `Foo()` returns a string that starts with `"Hello"`.
   1130 *   `Bar()` returns a string that matches regular expression `"Line \\d+"`.
   1131 *   `Baz()` returns a number in the range [5, 10].
   1132 
   1133 The nice thing about these macros is that *they read like English*. They
   1134 generate informative messages too. For example, if the first `EXPECT_THAT()`
   1135 above fails, the message will be something like:
   1136 
   1137 ```cpp
   1138 Value of: Foo()
   1139   Actual: "Hi, world!"
   1140 Expected: starts with "Hello"
   1141 ```
   1142 
   1143 **Credit:** The idea of `(ASSERT|EXPECT)_THAT` was borrowed from Joe Walnes'
   1144 Hamcrest project, which adds `assertThat()` to JUnit.
   1145 
   1146 ### Using Predicates as Matchers
   1147 
   1148 gMock provides a [built-in set](#MatcherList) of matchers. In case you find them
   1149 lacking, you can use an arbitrary unary predicate function or functor as a
   1150 matcher - as long as the predicate accepts a value of the type you want. You do
   1151 this by wrapping the predicate inside the `Truly()` function, for example:
   1152 
   1153 ```cpp
   1154 using ::testing::Truly;
   1155 
   1156 int IsEven(int n) { return (n % 2) == 0 ? 1 : 0; }
   1157 ...
   1158   // Bar() must be called with an even number.
   1159   EXPECT_CALL(foo, Bar(Truly(IsEven)));
   1160 ```
   1161 
   1162 Note that the predicate function / functor doesn't have to return `bool`. It
   1163 works as long as the return value can be used as the condition in in statement
   1164 `if (condition) ...`.
   1165 
   1166 <!-- GOOGLETEST_CM0023 DO NOT DELETE -->
   1167 
   1168 ### Matching Arguments that Are Not Copyable
   1169 
   1170 When you do an `EXPECT_CALL(mock_obj, Foo(bar))`, gMock saves away a copy of
   1171 `bar`. When `Foo()` is called later, gMock compares the argument to `Foo()` with
   1172 the saved copy of `bar`. This way, you don't need to worry about `bar` being
   1173 modified or destroyed after the `EXPECT_CALL()` is executed. The same is true
   1174 when you use matchers like `Eq(bar)`, `Le(bar)`, and so on.
   1175 
   1176 But what if `bar` cannot be copied (i.e. has no copy constructor)? You could
   1177 define your own matcher function or callback and use it with `Truly()`, as the
   1178 previous couple of recipes have shown. Or, you may be able to get away from it
   1179 if you can guarantee that `bar` won't be changed after the `EXPECT_CALL()` is
   1180 executed. Just tell gMock that it should save a reference to `bar`, instead of a
   1181 copy of it. Here's how:
   1182 
   1183 ```cpp
   1184 using ::testing::ByRef;
   1185 using ::testing::Eq;
   1186 using ::testing::Lt;
   1187 ...
   1188   // Expects that Foo()'s argument == bar.
   1189   EXPECT_CALL(mock_obj, Foo(Eq(ByRef(bar))));
   1190 
   1191   // Expects that Foo()'s argument < bar.
   1192   EXPECT_CALL(mock_obj, Foo(Lt(ByRef(bar))));
   1193 ```
   1194 
   1195 Remember: if you do this, don't change `bar` after the `EXPECT_CALL()`, or the
   1196 result is undefined.
   1197 
   1198 ### Validating a Member of an Object
   1199 
   1200 Often a mock function takes a reference to object as an argument. When matching
   1201 the argument, you may not want to compare the entire object against a fixed
   1202 object, as that may be over-specification. Instead, you may need to validate a
   1203 certain member variable or the result of a certain getter method of the object.
   1204 You can do this with `Field()` and `Property()`. More specifically,
   1205 
   1206 ```cpp
   1207 Field(&Foo::bar, m)
   1208 ```
   1209 
   1210 is a matcher that matches a `Foo` object whose `bar` member variable satisfies
   1211 matcher `m`.
   1212 
   1213 ```cpp
   1214 Property(&Foo::baz, m)
   1215 ```
   1216 
   1217 is a matcher that matches a `Foo` object whose `baz()` method returns a value
   1218 that satisfies matcher `m`.
   1219 
   1220 For example:
   1221 
   1222 <!-- mdformat off(github rendering does not support multiline tables) -->
   1223 | Expression                   | Description                              |
   1224 | :--------------------------- | :--------------------------------------- |
   1225 | `Field(&Foo::number, Ge(3))` | Matches `x` where `x.number >= 3`.       |
   1226 | `Property(&Foo::name,  StartsWith("John "))` | Matches `x` where `x.name()` starts with  `"John "`. |
   1227 <!-- mdformat on -->
   1228 
   1229 Note that in `Property(&Foo::baz, ...)`, method `baz()` must take no argument
   1230 and be declared as `const`.
   1231 
   1232 BTW, `Field()` and `Property()` can also match plain pointers to objects. For
   1233 instance,
   1234 
   1235 ```cpp
   1236 using ::testing::Field;
   1237 using ::testing::Ge;
   1238 ...
   1239 Field(&Foo::number, Ge(3))
   1240 ```
   1241 
   1242 matches a plain pointer `p` where `p->number >= 3`. If `p` is `NULL`, the match
   1243 will always fail regardless of the inner matcher.
   1244 
   1245 What if you want to validate more than one members at the same time? Remember
   1246 that there are [`AllOf()` and `AllOfArray()`](#CombiningMatchers).
   1247 
   1248 Finally `Field()` and `Property()` provide overloads that take the field or
   1249 property names as the first argument to include it in the error message. This
   1250 can be useful when creating combined matchers.
   1251 
   1252 ```cpp
   1253 using ::testing::AllOf;
   1254 using ::testing::Field;
   1255 using ::testing::Matcher;
   1256 using ::testing::SafeMatcherCast;
   1257 
   1258 Matcher<Foo> IsFoo(const Foo& foo) {
   1259   return AllOf(Field("some_field", &Foo::some_field, foo.some_field),
   1260                Field("other_field", &Foo::other_field, foo.other_field),
   1261                Field("last_field", &Foo::last_field, foo.last_field));
   1262 }
   1263 ```
   1264 
   1265 ### Validating the Value Pointed to by a Pointer Argument
   1266 
   1267 C++ functions often take pointers as arguments. You can use matchers like
   1268 `IsNull()`, `NotNull()`, and other comparison matchers to match a pointer, but
   1269 what if you want to make sure the value *pointed to* by the pointer, instead of
   1270 the pointer itself, has a certain property? Well, you can use the `Pointee(m)`
   1271 matcher.
   1272 
   1273 `Pointee(m)` matches a pointer if and only if `m` matches the value the pointer
   1274 points to. For example:
   1275 
   1276 ```cpp
   1277 using ::testing::Ge;
   1278 using ::testing::Pointee;
   1279 ...
   1280   EXPECT_CALL(foo, Bar(Pointee(Ge(3))));
   1281 ```
   1282 
   1283 expects `foo.Bar()` to be called with a pointer that points to a value greater
   1284 than or equal to 3.
   1285 
   1286 One nice thing about `Pointee()` is that it treats a `NULL` pointer as a match
   1287 failure, so you can write `Pointee(m)` instead of
   1288 
   1289 ```cpp
   1290 using ::testing::AllOf;
   1291 using ::testing::NotNull;
   1292 using ::testing::Pointee;
   1293 ...
   1294   AllOf(NotNull(), Pointee(m))
   1295 ```
   1296 
   1297 without worrying that a `NULL` pointer will crash your test.
   1298 
   1299 Also, did we tell you that `Pointee()` works with both raw pointers **and**
   1300 smart pointers (`std::unique_ptr`, `std::shared_ptr`, etc)?
   1301 
   1302 What if you have a pointer to pointer? You guessed it - you can use nested
   1303 `Pointee()` to probe deeper inside the value. For example,
   1304 `Pointee(Pointee(Lt(3)))` matches a pointer that points to a pointer that points
   1305 to a number less than 3 (what a mouthful...).
   1306 
   1307 ### Testing a Certain Property of an Object
   1308 
   1309 Sometimes you want to specify that an object argument has a certain property,
   1310 but there is no existing matcher that does this. If you want good error
   1311 messages, you should [define a matcher](#NewMatchers). If you want to do it
   1312 quick and dirty, you could get away with writing an ordinary function.
   1313 
   1314 Let's say you have a mock function that takes an object of type `Foo`, which has
   1315 an `int bar()` method and an `int baz()` method, and you want to constrain that
   1316 the argument's `bar()` value plus its `baz()` value is a given number. Here's
   1317 how you can define a matcher to do it:
   1318 
   1319 ```cpp
   1320 using ::testing::Matcher;
   1321 using ::testing::MatcherInterface;
   1322 using ::testing::MatchResultListener;
   1323 
   1324 class BarPlusBazEqMatcher : public MatcherInterface<const Foo&> {
   1325  public:
   1326   explicit BarPlusBazEqMatcher(int expected_sum)
   1327       : expected_sum_(expected_sum) {}
   1328 
   1329   bool MatchAndExplain(const Foo& foo,
   1330                        MatchResultListener* /* listener */) const override {
   1331     return (foo.bar() + foo.baz()) == expected_sum_;
   1332   }
   1333 
   1334   void DescribeTo(::std::ostream* os) const override {
   1335     *os << "bar() + baz() equals " << expected_sum_;
   1336   }
   1337 
   1338   void DescribeNegationTo(::std::ostream* os) const override {
   1339     *os << "bar() + baz() does not equal " << expected_sum_;
   1340   }
   1341  private:
   1342   const int expected_sum_;
   1343 };
   1344 
   1345 Matcher<const Foo&> BarPlusBazEq(int expected_sum) {
   1346   return MakeMatcher(new BarPlusBazEqMatcher(expected_sum));
   1347 }
   1348 
   1349 ...
   1350   EXPECT_CALL(..., DoThis(BarPlusBazEq(5)))...;
   1351 ```
   1352 
   1353 ### Matching Containers
   1354 
   1355 Sometimes an STL container (e.g. list, vector, map, ...) is passed to a mock
   1356 function and you may want to validate it. Since most STL containers support the
   1357 `==` operator, you can write `Eq(expected_container)` or simply
   1358 `expected_container` to match a container exactly.
   1359 
   1360 Sometimes, though, you may want to be more flexible (for example, the first
   1361 element must be an exact match, but the second element can be any positive
   1362 number, and so on). Also, containers used in tests often have a small number of
   1363 elements, and having to define the expected container out-of-line is a bit of a
   1364 hassle.
   1365 
   1366 You can use the `ElementsAre()` or `UnorderedElementsAre()` matcher in such
   1367 cases:
   1368 
   1369 ```cpp
   1370 using ::testing::_;
   1371 using ::testing::ElementsAre;
   1372 using ::testing::Gt;
   1373 ...
   1374   MOCK_METHOD(void, Foo, (const vector<int>& numbers), (override));
   1375 ...
   1376   EXPECT_CALL(mock, Foo(ElementsAre(1, Gt(0), _, 5)));
   1377 ```
   1378 
   1379 The above matcher says that the container must have 4 elements, which must be 1,
   1380 greater than 0, anything, and 5 respectively.
   1381 
   1382 If you instead write:
   1383 
   1384 ```cpp
   1385 using ::testing::_;
   1386 using ::testing::Gt;
   1387 using ::testing::UnorderedElementsAre;
   1388 ...
   1389   MOCK_METHOD(void, Foo, (const vector<int>& numbers), (override));
   1390 ...
   1391   EXPECT_CALL(mock, Foo(UnorderedElementsAre(1, Gt(0), _, 5)));
   1392 ```
   1393 
   1394 It means that the container must have 4 elements, which (under some permutation)
   1395 must be 1, greater than 0, anything, and 5 respectively.
   1396 
   1397 As an alternative you can place the arguments in a C-style array and use
   1398 `ElementsAreArray()` or `UnorderedElementsAreArray()` instead:
   1399 
   1400 ```cpp
   1401 using ::testing::ElementsAreArray;
   1402 ...
   1403   // ElementsAreArray accepts an array of element values.
   1404   const int expected_vector1[] = {1, 5, 2, 4, ...};
   1405   EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector1)));
   1406 
   1407   // Or, an array of element matchers.
   1408   Matcher<int> expected_vector2[] = {1, Gt(2), _, 3, ...};
   1409   EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector2)));
   1410 ```
   1411 
   1412 In case the array needs to be dynamically created (and therefore the array size
   1413 cannot be inferred by the compiler), you can give `ElementsAreArray()` an
   1414 additional argument to specify the array size:
   1415 
   1416 ```cpp
   1417 using ::testing::ElementsAreArray;
   1418 ...
   1419   int* const expected_vector3 = new int[count];
   1420   ... fill expected_vector3 with values ...
   1421   EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector3, count)));
   1422 ```
   1423 
   1424 Use `Pair` when comparing maps or other associative containers.
   1425 
   1426 ```cpp
   1427 using testing::ElementsAre;
   1428 using testing::Pair;
   1429 ...
   1430   std::map<string, int> m = {{"a", 1}, {"b", 2}, {"c", 3}};
   1431   EXPECT_THAT(m, ElementsAre(Pair("a", 1), Pair("b", 2), Pair("c", 3)));
   1432 ```
   1433 
   1434 **Tips:**
   1435 
   1436 *   `ElementsAre*()` can be used to match *any* container that implements the
   1437     STL iterator pattern (i.e. it has a `const_iterator` type and supports
   1438     `begin()/end()`), not just the ones defined in STL. It will even work with
   1439     container types yet to be written - as long as they follows the above
   1440     pattern.
   1441 *   You can use nested `ElementsAre*()` to match nested (multi-dimensional)
   1442     containers.
   1443 *   If the container is passed by pointer instead of by reference, just write
   1444     `Pointee(ElementsAre*(...))`.
   1445 *   The order of elements *matters* for `ElementsAre*()`. If you are using it
   1446     with containers whose element order are undefined (e.g. `hash_map`) you
   1447     should use `WhenSorted` around `ElementsAre`.
   1448 
   1449 ### Sharing Matchers
   1450 
   1451 Under the hood, a gMock matcher object consists of a pointer to a ref-counted
   1452 implementation object. Copying matchers is allowed and very efficient, as only
   1453 the pointer is copied. When the last matcher that references the implementation
   1454 object dies, the implementation object will be deleted.
   1455 
   1456 Therefore, if you have some complex matcher that you want to use again and
   1457 again, there is no need to build it everytime. Just assign it to a matcher
   1458 variable and use that variable repeatedly! For example,
   1459 
   1460 ```cpp
   1461 using ::testing::AllOf;
   1462 using ::testing::Gt;
   1463 using ::testing::Le;
   1464 using ::testing::Matcher;
   1465 ...
   1466   Matcher<int> in_range = AllOf(Gt(5), Le(10));
   1467   ... use in_range as a matcher in multiple EXPECT_CALLs ...
   1468 ```
   1469 
   1470 ### Matchers must have no side-effects {#PureMatchers}
   1471 
   1472 WARNING: gMock does not guarantee when or how many times a matcher will be
   1473 invoked. Therefore, all matchers must be *purely functional*: they cannot have
   1474 any side effects, and the match result must not depend on anything other than
   1475 the matcher's parameters and the value being matched.
   1476 
   1477 This requirement must be satisfied no matter how a matcher is defined (e.g., if
   1478 it is one of the standard matchers, or a custom matcher). In particular, a
   1479 matcher can never call a mock function, as that will affect the state of the
   1480 mock object and gMock.
   1481 
   1482 ## Setting Expectations
   1483 
   1484 ### Knowing When to Expect {#UseOnCall}
   1485 
   1486 <!-- GOOGLETEST_CM0018 DO NOT DELETE -->
   1487 
   1488 **`ON_CALL`** is likely the *single most under-utilized construct* in gMock.
   1489 
   1490 There are basically two constructs for defining the behavior of a mock object:
   1491 `ON_CALL` and `EXPECT_CALL`. The difference? `ON_CALL` defines what happens when
   1492 a mock method is called, but <em>doesn't imply any expectation on the method
   1493 being called</em>. `EXPECT_CALL` not only defines the behavior, but also sets an
   1494 expectation that <em>the method will be called with the given arguments, for the
   1495 given number of times</em> (and *in the given order* when you specify the order
   1496 too).
   1497 
   1498 Since `EXPECT_CALL` does more, isn't it better than `ON_CALL`? Not really. Every
   1499 `EXPECT_CALL` adds a constraint on the behavior of the code under test. Having
   1500 more constraints than necessary is *baaad* - even worse than not having enough
   1501 constraints.
   1502 
   1503 This may be counter-intuitive. How could tests that verify more be worse than
   1504 tests that verify less? Isn't verification the whole point of tests?
   1505 
   1506 The answer lies in *what* a test should verify. **A good test verifies the
   1507 contract of the code.** If a test over-specifies, it doesn't leave enough
   1508 freedom to the implementation. As a result, changing the implementation without
   1509 breaking the contract (e.g. refactoring and optimization), which should be
   1510 perfectly fine to do, can break such tests. Then you have to spend time fixing
   1511 them, only to see them broken again the next time the implementation is changed.
   1512 
   1513 Keep in mind that one doesn't have to verify more than one property in one test.
   1514 In fact, **it's a good style to verify only one thing in one test.** If you do
   1515 that, a bug will likely break only one or two tests instead of dozens (which
   1516 case would you rather debug?). If you are also in the habit of giving tests
   1517 descriptive names that tell what they verify, you can often easily guess what's
   1518 wrong just from the test log itself.
   1519 
   1520 So use `ON_CALL` by default, and only use `EXPECT_CALL` when you actually intend
   1521 to verify that the call is made. For example, you may have a bunch of `ON_CALL`s
   1522 in your test fixture to set the common mock behavior shared by all tests in the
   1523 same group, and write (scarcely) different `EXPECT_CALL`s in different `TEST_F`s
   1524 to verify different aspects of the code's behavior. Compared with the style
   1525 where each `TEST` has many `EXPECT_CALL`s, this leads to tests that are more
   1526 resilient to implementational changes (and thus less likely to require
   1527 maintenance) and makes the intent of the tests more obvious (so they are easier
   1528 to maintain when you do need to maintain them).
   1529 
   1530 If you are bothered by the "Uninteresting mock function call" message printed
   1531 when a mock method without an `EXPECT_CALL` is called, you may use a `NiceMock`
   1532 instead to suppress all such messages for the mock object, or suppress the
   1533 message for specific methods by adding `EXPECT_CALL(...).Times(AnyNumber())`. DO
   1534 NOT suppress it by blindly adding an `EXPECT_CALL(...)`, or you'll have a test
   1535 that's a pain to maintain.
   1536 
   1537 ### Ignoring Uninteresting Calls
   1538 
   1539 If you are not interested in how a mock method is called, just don't say
   1540 anything about it. In this case, if the method is ever called, gMock will
   1541 perform its default action to allow the test program to continue. If you are not
   1542 happy with the default action taken by gMock, you can override it using
   1543 `DefaultValue<T>::Set()` (described [here](#DefaultValue)) or `ON_CALL()`.
   1544 
   1545 Please note that once you expressed interest in a particular mock method (via
   1546 `EXPECT_CALL()`), all invocations to it must match some expectation. If this
   1547 function is called but the arguments don't match any `EXPECT_CALL()` statement,
   1548 it will be an error.
   1549 
   1550 ### Disallowing Unexpected Calls
   1551 
   1552 If a mock method shouldn't be called at all, explicitly say so:
   1553 
   1554 ```cpp
   1555 using ::testing::_;
   1556 ...
   1557   EXPECT_CALL(foo, Bar(_))
   1558       .Times(0);
   1559 ```
   1560 
   1561 If some calls to the method are allowed, but the rest are not, just list all the
   1562 expected calls:
   1563 
   1564 ```cpp
   1565 using ::testing::AnyNumber;
   1566 using ::testing::Gt;
   1567 ...
   1568   EXPECT_CALL(foo, Bar(5));
   1569   EXPECT_CALL(foo, Bar(Gt(10)))
   1570       .Times(AnyNumber());
   1571 ```
   1572 
   1573 A call to `foo.Bar()` that doesn't match any of the `EXPECT_CALL()` statements
   1574 will be an error.
   1575 
   1576 ### Understanding Uninteresting vs Unexpected Calls {#uninteresting-vs-unexpected}
   1577 
   1578 *Uninteresting* calls and *unexpected* calls are different concepts in gMock.
   1579 *Very* different.
   1580 
   1581 A call `x.Y(...)` is **uninteresting** if there's *not even a single*
   1582 `EXPECT_CALL(x, Y(...))` set. In other words, the test isn't interested in the
   1583 `x.Y()` method at all, as evident in that the test doesn't care to say anything
   1584 about it.
   1585 
   1586 A call `x.Y(...)` is **unexpected** if there are *some* `EXPECT_CALL(x,
   1587 Y(...))`s set, but none of them matches the call. Put another way, the test is
   1588 interested in the `x.Y()` method (therefore it explicitly sets some
   1589 `EXPECT_CALL` to verify how it's called); however, the verification fails as the
   1590 test doesn't expect this particular call to happen.
   1591 
   1592 **An unexpected call is always an error,** as the code under test doesn't behave
   1593 the way the test expects it to behave.
   1594 
   1595 **By default, an uninteresting call is not an error,** as it violates no
   1596 constraint specified by the test. (gMock's philosophy is that saying nothing
   1597 means there is no constraint.) However, it leads to a warning, as it *might*
   1598 indicate a problem (e.g. the test author might have forgotten to specify a
   1599 constraint).
   1600 
   1601 In gMock, `NiceMock` and `StrictMock` can be used to make a mock class "nice" or
   1602 "strict". How does this affect uninteresting calls and unexpected calls?
   1603 
   1604 A **nice mock** suppresses uninteresting call *warnings*. It is less chatty than
   1605 the default mock, but otherwise is the same. If a test fails with a default
   1606 mock, it will also fail using a nice mock instead. And vice versa. Don't expect
   1607 making a mock nice to change the test's result.
   1608 
   1609 A **strict mock** turns uninteresting call warnings into errors. So making a
   1610 mock strict may change the test's result.
   1611 
   1612 Let's look at an example:
   1613 
   1614 ```cpp
   1615 TEST(...) {
   1616   NiceMock<MockDomainRegistry> mock_registry;
   1617   EXPECT_CALL(mock_registry, GetDomainOwner("google.com"))
   1618           .WillRepeatedly(Return("Larry Page"));
   1619 
   1620   // Use mock_registry in code under test.
   1621   ... &mock_registry ...
   1622 }
   1623 ```
   1624 
   1625 The sole `EXPECT_CALL` here says that all calls to `GetDomainOwner()` must have
   1626 `"google.com"` as the argument. If `GetDomainOwner("yahoo.com")` is called, it
   1627 will be an unexpected call, and thus an error. *Having a nice mock doesn't
   1628 change the severity of an unexpected call.*
   1629 
   1630 So how do we tell gMock that `GetDomainOwner()` can be called with some other
   1631 arguments as well? The standard technique is to add a "catch all" `EXPECT_CALL`:
   1632 
   1633 ```cpp
   1634   EXPECT_CALL(mock_registry, GetDomainOwner(_))
   1635         .Times(AnyNumber());  // catches all other calls to this method.
   1636   EXPECT_CALL(mock_registry, GetDomainOwner("google.com"))
   1637         .WillRepeatedly(Return("Larry Page"));
   1638 ```
   1639 
   1640 Remember that `_` is the wildcard matcher that matches anything. With this, if
   1641 `GetDomainOwner("google.com")` is called, it will do what the second
   1642 `EXPECT_CALL` says; if it is called with a different argument, it will do what
   1643 the first `EXPECT_CALL` says.
   1644 
   1645 Note that the order of the two `EXPECT_CALL`s is important, as a newer
   1646 `EXPECT_CALL` takes precedence over an older one.
   1647 
   1648 For more on uninteresting calls, nice mocks, and strict mocks, read
   1649 ["The Nice, the Strict, and the Naggy"](#NiceStrictNaggy).
   1650 
   1651 ### Ignoring Uninteresting Arguments {#ParameterlessExpectations}
   1652 
   1653 If your test doesn't care about the parameters (it only cares about the number
   1654 or order of calls), you can often simply omit the parameter list:
   1655 
   1656 ```cpp
   1657   // Expect foo.Bar( ... ) twice with any arguments.
   1658   EXPECT_CALL(foo, Bar).Times(2);
   1659 
   1660   // Delegate to the given method whenever the factory is invoked.
   1661   ON_CALL(foo_factory, MakeFoo)
   1662       .WillByDefault(&BuildFooForTest);
   1663 ```
   1664 
   1665 This functionality is only available when a method is not overloaded; to prevent
   1666 unexpected behavior it is a compilation error to try to set an expectation on a
   1667 method where the specific overload is ambiguous. You can work around this by
   1668 supplying a [simpler mock interface](#SimplerInterfaces) than the mocked class
   1669 provides.
   1670 
   1671 This pattern is also useful when the arguments are interesting, but match logic
   1672 is substantially complex. You can leave the argument list unspecified and use
   1673 SaveArg actions to [save the values for later verification](#SaveArgVerify). If
   1674 you do that, you can easily differentiate calling the method the wrong number of
   1675 times from calling it with the wrong arguments.
   1676 
   1677 ### Expecting Ordered Calls {#OrderedCalls}
   1678 
   1679 Although an `EXPECT_CALL()` statement defined earlier takes precedence when
   1680 gMock tries to match a function call with an expectation, by default calls don't
   1681 have to happen in the order `EXPECT_CALL()` statements are written. For example,
   1682 if the arguments match the matchers in the third `EXPECT_CALL()`, but not those
   1683 in the first two, then the third expectation will be used.
   1684 
   1685 If you would rather have all calls occur in the order of the expectations, put
   1686 the `EXPECT_CALL()` statements in a block where you define a variable of type
   1687 `InSequence`:
   1688 
   1689 ```cpp
   1690 using ::testing::_;
   1691 using ::testing::InSequence;
   1692 
   1693   {
   1694     InSequence s;
   1695 
   1696     EXPECT_CALL(foo, DoThis(5));
   1697     EXPECT_CALL(bar, DoThat(_))
   1698         .Times(2);
   1699     EXPECT_CALL(foo, DoThis(6));
   1700   }
   1701 ```
   1702 
   1703 In this example, we expect a call to `foo.DoThis(5)`, followed by two calls to
   1704 `bar.DoThat()` where the argument can be anything, which are in turn followed by
   1705 a call to `foo.DoThis(6)`. If a call occurred out-of-order, gMock will report an
   1706 error.
   1707 
   1708 ### Expecting Partially Ordered Calls {#PartialOrder}
   1709 
   1710 Sometimes requiring everything to occur in a predetermined order can lead to
   1711 brittle tests. For example, we may care about `A` occurring before both `B` and
   1712 `C`, but aren't interested in the relative order of `B` and `C`. In this case,
   1713 the test should reflect our real intent, instead of being overly constraining.
   1714 
   1715 gMock allows you to impose an arbitrary DAG (directed acyclic graph) on the
   1716 calls. One way to express the DAG is to use the [After](#AfterClause) clause of
   1717 `EXPECT_CALL`.
   1718 
   1719 Another way is via the `InSequence()` clause (not the same as the `InSequence`
   1720 class), which we borrowed from jMock 2. It's less flexible than `After()`, but
   1721 more convenient when you have long chains of sequential calls, as it doesn't
   1722 require you to come up with different names for the expectations in the chains.
   1723 Here's how it works:
   1724 
   1725 If we view `EXPECT_CALL()` statements as nodes in a graph, and add an edge from
   1726 node A to node B wherever A must occur before B, we can get a DAG. We use the
   1727 term "sequence" to mean a directed path in this DAG. Now, if we decompose the
   1728 DAG into sequences, we just need to know which sequences each `EXPECT_CALL()`
   1729 belongs to in order to be able to reconstruct the original DAG.
   1730 
   1731 So, to specify the partial order on the expectations we need to do two things:
   1732 first to define some `Sequence` objects, and then for each `EXPECT_CALL()` say
   1733 which `Sequence` objects it is part of.
   1734 
   1735 Expectations in the same sequence must occur in the order they are written. For
   1736 example,
   1737 
   1738 ```cpp
   1739 using ::testing::Sequence;
   1740 ...
   1741   Sequence s1, s2;
   1742 
   1743   EXPECT_CALL(foo, A())
   1744       .InSequence(s1, s2);
   1745   EXPECT_CALL(bar, B())
   1746       .InSequence(s1);
   1747   EXPECT_CALL(bar, C())
   1748       .InSequence(s2);
   1749   EXPECT_CALL(foo, D())
   1750       .InSequence(s2);
   1751 ```
   1752 
   1753 specifies the following DAG (where `s1` is `A -> B`, and `s2` is `A -> C -> D`):
   1754 
   1755 ```text
   1756        +---> B
   1757        |
   1758   A ---|
   1759        |
   1760         +---> C ---> D
   1761 ```
   1762 
   1763 This means that A must occur before B and C, and C must occur before D. There's
   1764 no restriction about the order other than these.
   1765 
   1766 ### Controlling When an Expectation Retires
   1767 
   1768 When a mock method is called, gMock only considers expectations that are still
   1769 active. An expectation is active when created, and becomes inactive (aka
   1770 *retires*) when a call that has to occur later has occurred. For example, in
   1771 
   1772 ```cpp
   1773 using ::testing::_;
   1774 using ::testing::Sequence;
   1775 ...
   1776   Sequence s1, s2;
   1777 
   1778   EXPECT_CALL(log, Log(WARNING, _, "File too large."))      // #1
   1779       .Times(AnyNumber())
   1780       .InSequence(s1, s2);
   1781   EXPECT_CALL(log, Log(WARNING, _, "Data set is empty."))   // #2
   1782       .InSequence(s1);
   1783   EXPECT_CALL(log, Log(WARNING, _, "User not found."))      // #3
   1784       .InSequence(s2);
   1785 ```
   1786 
   1787 as soon as either #2 or #3 is matched, #1 will retire. If a warning `"File too
   1788 large."` is logged after this, it will be an error.
   1789 
   1790 Note that an expectation doesn't retire automatically when it's saturated. For
   1791 example,
   1792 
   1793 ```cpp
   1794 using ::testing::_;
   1795 ...
   1796   EXPECT_CALL(log, Log(WARNING, _, _));                     // #1
   1797   EXPECT_CALL(log, Log(WARNING, _, "File too large."));     // #2
   1798 ```
   1799 
   1800 says that there will be exactly one warning with the message `"File too
   1801 large."`. If the second warning contains this message too, #2 will match again
   1802 and result in an upper-bound-violated error.
   1803 
   1804 If this is not what you want, you can ask an expectation to retire as soon as it
   1805 becomes saturated:
   1806 
   1807 ```cpp
   1808 using ::testing::_;
   1809 ...
   1810   EXPECT_CALL(log, Log(WARNING, _, _));                     // #1
   1811   EXPECT_CALL(log, Log(WARNING, _, "File too large."))      // #2
   1812       .RetiresOnSaturation();
   1813 ```
   1814 
   1815 Here #2 can be used only once, so if you have two warnings with the message
   1816 `"File too large."`, the first will match #2 and the second will match #1 -
   1817 there will be no error.
   1818 
   1819 ## Using Actions
   1820 
   1821 ### Returning References from Mock Methods
   1822 
   1823 If a mock function's return type is a reference, you need to use `ReturnRef()`
   1824 instead of `Return()` to return a result:
   1825 
   1826 ```cpp
   1827 using ::testing::ReturnRef;
   1828 
   1829 class MockFoo : public Foo {
   1830  public:
   1831   MOCK_METHOD(Bar&, GetBar, (), (override));
   1832 };
   1833 ...
   1834   MockFoo foo;
   1835   Bar bar;
   1836   EXPECT_CALL(foo, GetBar())
   1837       .WillOnce(ReturnRef(bar));
   1838 ...
   1839 ```
   1840 
   1841 ### Returning Live Values from Mock Methods
   1842 
   1843 The `Return(x)` action saves a copy of `x` when the action is created, and
   1844 always returns the same value whenever it's executed. Sometimes you may want to
   1845 instead return the *live* value of `x` (i.e. its value at the time when the
   1846 action is *executed*.). Use either `ReturnRef()` or `ReturnPointee()` for this
   1847 purpose.
   1848 
   1849 If the mock function's return type is a reference, you can do it using
   1850 `ReturnRef(x)`, as shown in the previous recipe ("Returning References from Mock
   1851 Methods"). However, gMock doesn't let you use `ReturnRef()` in a mock function
   1852 whose return type is not a reference, as doing that usually indicates a user
   1853 error. So, what shall you do?
   1854 
   1855 Though you may be tempted, DO NOT use `ByRef()`:
   1856 
   1857 ```cpp
   1858 using testing::ByRef;
   1859 using testing::Return;
   1860 
   1861 class MockFoo : public Foo {
   1862  public:
   1863   MOCK_METHOD(int, GetValue, (), (override));
   1864 };
   1865 ...
   1866   int x = 0;
   1867   MockFoo foo;
   1868   EXPECT_CALL(foo, GetValue())
   1869       .WillRepeatedly(Return(ByRef(x)));  // Wrong!
   1870   x = 42;
   1871   EXPECT_EQ(42, foo.GetValue());
   1872 ```
   1873 
   1874 Unfortunately, it doesn't work here. The above code will fail with error:
   1875 
   1876 ```text
   1877 Value of: foo.GetValue()
   1878   Actual: 0
   1879 Expected: 42
   1880 ```
   1881 
   1882 The reason is that `Return(*value*)` converts `value` to the actual return type
   1883 of the mock function at the time when the action is *created*, not when it is
   1884 *executed*. (This behavior was chosen for the action to be safe when `value` is
   1885 a proxy object that references some temporary objects.) As a result, `ByRef(x)`
   1886 is converted to an `int` value (instead of a `const int&`) when the expectation
   1887 is set, and `Return(ByRef(x))` will always return 0.
   1888 
   1889 `ReturnPointee(pointer)` was provided to solve this problem specifically. It
   1890 returns the value pointed to by `pointer` at the time the action is *executed*:
   1891 
   1892 ```cpp
   1893 using testing::ReturnPointee;
   1894 ...
   1895   int x = 0;
   1896   MockFoo foo;
   1897   EXPECT_CALL(foo, GetValue())
   1898       .WillRepeatedly(ReturnPointee(&x));  // Note the & here.
   1899   x = 42;
   1900   EXPECT_EQ(42, foo.GetValue());  // This will succeed now.
   1901 ```
   1902 
   1903 ### Combining Actions
   1904 
   1905 Want to do more than one thing when a function is called? That's fine. `DoAll()`
   1906 allow you to do sequence of actions every time. Only the return value of the
   1907 last action in the sequence will be used.
   1908 
   1909 ```cpp
   1910 using ::testing::_;
   1911 using ::testing::DoAll;
   1912 
   1913 class MockFoo : public Foo {
   1914  public:
   1915   MOCK_METHOD(bool, Bar, (int n), (override));
   1916 };
   1917 ...
   1918   EXPECT_CALL(foo, Bar(_))
   1919       .WillOnce(DoAll(action_1,
   1920                       action_2,
   1921                       ...
   1922                       action_n));
   1923 ```
   1924 
   1925 ### Verifying Complex Arguments {#SaveArgVerify}
   1926 
   1927 If you want to verify that a method is called with a particular argument but the
   1928 match criteria is complex, it can be difficult to distinguish between
   1929 cardinality failures (calling the method the wrong number of times) and argument
   1930 match failures. Similarly, if you are matching multiple parameters, it may not
   1931 be easy to distinguishing which argument failed to match. For example:
   1932 
   1933 ```cpp
   1934   // Not ideal: this could fail because of a problem with arg1 or arg2, or maybe
   1935   // just the method wasn't called.
   1936   EXPECT_CALL(foo, SendValues(_, ElementsAre(1, 4, 4, 7), EqualsProto( ... )));
   1937 ```
   1938 
   1939 You can instead save the arguments and test them individually:
   1940 
   1941 ```cpp
   1942   EXPECT_CALL(foo, SendValues)
   1943       .WillOnce(DoAll(SaveArg<1>(&actual_array), SaveArg<2>(&actual_proto)));
   1944   ... run the test
   1945   EXPECT_THAT(actual_array, ElementsAre(1, 4, 4, 7));
   1946   EXPECT_THAT(actual_proto, EqualsProto( ... ));
   1947 ```
   1948 
   1949 ### Mocking Side Effects {#MockingSideEffects}
   1950 
   1951 Sometimes a method exhibits its effect not via returning a value but via side
   1952 effects. For example, it may change some global state or modify an output
   1953 argument. To mock side effects, in general you can define your own action by
   1954 implementing `::testing::ActionInterface`.
   1955 
   1956 If all you need to do is to change an output argument, the built-in
   1957 `SetArgPointee()` action is convenient:
   1958 
   1959 ```cpp
   1960 using ::testing::_;
   1961 using ::testing::SetArgPointee;
   1962 
   1963 class MockMutator : public Mutator {
   1964  public:
   1965   MOCK_METHOD(void, Mutate, (bool mutate, int* value), (override));
   1966   ...
   1967 }
   1968 ...
   1969   MockMutator mutator;
   1970   EXPECT_CALL(mutator, Mutate(true, _))
   1971       .WillOnce(SetArgPointee<1>(5));
   1972 ```
   1973 
   1974 In this example, when `mutator.Mutate()` is called, we will assign 5 to the
   1975 `int` variable pointed to by argument #1 (0-based).
   1976 
   1977 `SetArgPointee()` conveniently makes an internal copy of the value you pass to
   1978 it, removing the need to keep the value in scope and alive. The implication
   1979 however is that the value must have a copy constructor and assignment operator.
   1980 
   1981 If the mock method also needs to return a value as well, you can chain
   1982 `SetArgPointee()` with `Return()` using `DoAll()`, remembering to put the
   1983 `Return()` statement last:
   1984 
   1985 ```cpp
   1986 using ::testing::_;
   1987 using ::testing::Return;
   1988 using ::testing::SetArgPointee;
   1989 
   1990 class MockMutator : public Mutator {
   1991  public:
   1992   ...
   1993   MOCK_METHOD(bool, MutateInt, (int* value), (override));
   1994 }
   1995 ...
   1996   MockMutator mutator;
   1997   EXPECT_CALL(mutator, MutateInt(_))
   1998       .WillOnce(DoAll(SetArgPointee<0>(5),
   1999                       Return(true)));
   2000 ```
   2001 
   2002 Note, however, that if you use the `ReturnOKWith()` method, it will override the
   2003 values provided by `SetArgPointee()` in the response parameters of your function
   2004 call.
   2005 
   2006 If the output argument is an array, use the `SetArrayArgument<N>(first, last)`
   2007 action instead. It copies the elements in source range `[first, last)` to the
   2008 array pointed to by the `N`-th (0-based) argument:
   2009 
   2010 ```cpp
   2011 using ::testing::NotNull;
   2012 using ::testing::SetArrayArgument;
   2013 
   2014 class MockArrayMutator : public ArrayMutator {
   2015  public:
   2016   MOCK_METHOD(void, Mutate, (int* values, int num_values), (override));
   2017   ...
   2018 }
   2019 ...
   2020   MockArrayMutator mutator;
   2021   int values[5] = {1, 2, 3, 4, 5};
   2022   EXPECT_CALL(mutator, Mutate(NotNull(), 5))
   2023       .WillOnce(SetArrayArgument<0>(values, values + 5));
   2024 ```
   2025 
   2026 This also works when the argument is an output iterator:
   2027 
   2028 ```cpp
   2029 using ::testing::_;
   2030 using ::testing::SetArrayArgument;
   2031 
   2032 class MockRolodex : public Rolodex {
   2033  public:
   2034   MOCK_METHOD(void, GetNames, (std::back_insert_iterator<vector<string>>),
   2035               (override));
   2036   ...
   2037 }
   2038 ...
   2039   MockRolodex rolodex;
   2040   vector<string> names;
   2041   names.push_back("George");
   2042   names.push_back("John");
   2043   names.push_back("Thomas");
   2044   EXPECT_CALL(rolodex, GetNames(_))
   2045       .WillOnce(SetArrayArgument<0>(names.begin(), names.end()));
   2046 ```
   2047 
   2048 ### Changing a Mock Object's Behavior Based on the State
   2049 
   2050 If you expect a call to change the behavior of a mock object, you can use
   2051 `::testing::InSequence` to specify different behaviors before and after the
   2052 call:
   2053 
   2054 ```cpp
   2055 using ::testing::InSequence;
   2056 using ::testing::Return;
   2057 
   2058 ...
   2059   {
   2060      InSequence seq;
   2061      EXPECT_CALL(my_mock, IsDirty())
   2062          .WillRepeatedly(Return(true));
   2063      EXPECT_CALL(my_mock, Flush());
   2064      EXPECT_CALL(my_mock, IsDirty())
   2065          .WillRepeatedly(Return(false));
   2066   }
   2067   my_mock.FlushIfDirty();
   2068 ```
   2069 
   2070 This makes `my_mock.IsDirty()` return `true` before `my_mock.Flush()` is called
   2071 and return `false` afterwards.
   2072 
   2073 If the behavior change is more complex, you can store the effects in a variable
   2074 and make a mock method get its return value from that variable:
   2075 
   2076 ```cpp
   2077 using ::testing::_;
   2078 using ::testing::SaveArg;
   2079 using ::testing::Return;
   2080 
   2081 ACTION_P(ReturnPointee, p) { return *p; }
   2082 ...
   2083   int previous_value = 0;
   2084   EXPECT_CALL(my_mock, GetPrevValue)
   2085       .WillRepeatedly(ReturnPointee(&previous_value));
   2086   EXPECT_CALL(my_mock, UpdateValue)
   2087       .WillRepeatedly(SaveArg<0>(&previous_value));
   2088   my_mock.DoSomethingToUpdateValue();
   2089 ```
   2090 
   2091 Here `my_mock.GetPrevValue()` will always return the argument of the last
   2092 `UpdateValue()` call.
   2093 
   2094 ### Setting the Default Value for a Return Type {#DefaultValue}
   2095 
   2096 If a mock method's return type is a built-in C++ type or pointer, by default it
   2097 will return 0 when invoked. Also, in C++ 11 and above, a mock method whose
   2098 return type has a default constructor will return a default-constructed value by
   2099 default. You only need to specify an action if this default value doesn't work
   2100 for you.
   2101 
   2102 Sometimes, you may want to change this default value, or you may want to specify
   2103 a default value for types gMock doesn't know about. You can do this using the
   2104 `::testing::DefaultValue` class template:
   2105 
   2106 ```cpp
   2107 using ::testing::DefaultValue;
   2108 
   2109 class MockFoo : public Foo {
   2110  public:
   2111   MOCK_METHOD(Bar, CalculateBar, (), (override));
   2112 };
   2113 
   2114 
   2115 ...
   2116   Bar default_bar;
   2117   // Sets the default return value for type Bar.
   2118   DefaultValue<Bar>::Set(default_bar);
   2119 
   2120   MockFoo foo;
   2121 
   2122   // We don't need to specify an action here, as the default
   2123   // return value works for us.
   2124   EXPECT_CALL(foo, CalculateBar());
   2125 
   2126   foo.CalculateBar();  // This should return default_bar.
   2127 
   2128   // Unsets the default return value.
   2129   DefaultValue<Bar>::Clear();
   2130 ```
   2131 
   2132 Please note that changing the default value for a type can make you tests hard
   2133 to understand. We recommend you to use this feature judiciously. For example,
   2134 you may want to make sure the `Set()` and `Clear()` calls are right next to the
   2135 code that uses your mock.
   2136 
   2137 ### Setting the Default Actions for a Mock Method
   2138 
   2139 You've learned how to change the default value of a given type. However, this
   2140 may be too coarse for your purpose: perhaps you have two mock methods with the
   2141 same return type and you want them to have different behaviors. The `ON_CALL()`
   2142 macro allows you to customize your mock's behavior at the method level:
   2143 
   2144 ```cpp
   2145 using ::testing::_;
   2146 using ::testing::AnyNumber;
   2147 using ::testing::Gt;
   2148 using ::testing::Return;
   2149 ...
   2150   ON_CALL(foo, Sign(_))
   2151       .WillByDefault(Return(-1));
   2152   ON_CALL(foo, Sign(0))
   2153       .WillByDefault(Return(0));
   2154   ON_CALL(foo, Sign(Gt(0)))
   2155       .WillByDefault(Return(1));
   2156 
   2157   EXPECT_CALL(foo, Sign(_))
   2158       .Times(AnyNumber());
   2159 
   2160   foo.Sign(5);   // This should return 1.
   2161   foo.Sign(-9);  // This should return -1.
   2162   foo.Sign(0);   // This should return 0.
   2163 ```
   2164 
   2165 As you may have guessed, when there are more than one `ON_CALL()` statements,
   2166 the newer ones in the order take precedence over the older ones. In other words,
   2167 the **last** one that matches the function arguments will be used. This matching
   2168 order allows you to set up the common behavior in a mock object's constructor or
   2169 the test fixture's set-up phase and specialize the mock's behavior later.
   2170 
   2171 Note that both `ON_CALL` and `EXPECT_CALL` have the same "later statements take
   2172 precedence" rule, but they don't interact. That is, `EXPECT_CALL`s have their
   2173 own precedence order distinct from the `ON_CALL` precedence order.
   2174 
   2175 ### Using Functions/Methods/Functors/Lambdas as Actions {#FunctionsAsActions}
   2176 
   2177 If the built-in actions don't suit you, you can use an existing callable
   2178 (function, `std::function`, method, functor, lambda as an action.
   2179 
   2180 <!-- GOOGLETEST_CM0024 DO NOT DELETE -->
   2181 
   2182 ```cpp
   2183 using ::testing::_; using ::testing::Invoke;
   2184 
   2185 class MockFoo : public Foo {
   2186  public:
   2187   MOCK_METHOD(int, Sum, (int x, int y), (override));
   2188   MOCK_METHOD(bool, ComplexJob, (int x), (override));
   2189 };
   2190 
   2191 int CalculateSum(int x, int y) { return x + y; }
   2192 int Sum3(int x, int y, int z) { return x + y + z; }
   2193 
   2194 class Helper {
   2195  public:
   2196   bool ComplexJob(int x);
   2197 };
   2198 
   2199 ...
   2200   MockFoo foo;
   2201   Helper helper;
   2202   EXPECT_CALL(foo, Sum(_, _))
   2203       .WillOnce(&CalculateSum)
   2204       .WillRepeatedly(Invoke(NewPermanentCallback(Sum3, 1)));
   2205   EXPECT_CALL(foo, ComplexJob(_))
   2206       .WillOnce(Invoke(&helper, &Helper::ComplexJob));
   2207       .WillRepeatedly([](int x) { return x > 0; });
   2208 
   2209   foo.Sum(5, 6);         // Invokes CalculateSum(5, 6).
   2210   foo.Sum(2, 3);         // Invokes Sum3(1, 2, 3).
   2211   foo.ComplexJob(10);    // Invokes helper.ComplexJob(10).
   2212   foo.ComplexJob(-1);    // Invokes the inline lambda.
   2213 ```
   2214 
   2215 The only requirement is that the type of the function, etc must be *compatible*
   2216 with the signature of the mock function, meaning that the latter's arguments can
   2217 be implicitly converted to the corresponding arguments of the former, and the
   2218 former's return type can be implicitly converted to that of the latter. So, you
   2219 can invoke something whose type is *not* exactly the same as the mock function,
   2220 as long as it's safe to do so - nice, huh?
   2221 
   2222 **`Note:`{.escaped}**
   2223 
   2224 *   The action takes ownership of the callback and will delete it when the
   2225     action itself is destructed.
   2226 *   If the type of a callback is derived from a base callback type `C`, you need
   2227     to implicitly cast it to `C` to resolve the overloading, e.g.
   2228 
   2229     ```cpp
   2230     using ::testing::Invoke;
   2231     ...
   2232       ResultCallback<bool>* is_ok = ...;
   2233       ... Invoke(is_ok) ...;  // This works.
   2234 
   2235       BlockingClosure* done = new BlockingClosure;
   2236       ... Invoke(implicit_cast<Closure*>(done)) ...;  // The cast is necessary.
   2237     ```
   2238 
   2239 ### Using Functions with Extra Info as Actions
   2240 
   2241 The function or functor you call using `Invoke()` must have the same number of
   2242 arguments as the mock function you use it for. Sometimes you may have a function
   2243 that takes more arguments, and you are willing to pass in the extra arguments
   2244 yourself to fill the gap. You can do this in gMock using callbacks with
   2245 pre-bound arguments. Here's an example:
   2246 
   2247 ```cpp
   2248 using ::testing::Invoke;
   2249 
   2250 class MockFoo : public Foo {
   2251  public:
   2252   MOCK_METHOD(char, DoThis, (int n), (override));
   2253 };
   2254 
   2255 char SignOfSum(int x, int y) {
   2256   const int sum = x + y;
   2257   return (sum > 0) ? '+' : (sum < 0) ? '-' : '0';
   2258 }
   2259 
   2260 TEST_F(FooTest, Test) {
   2261   MockFoo foo;
   2262 
   2263   EXPECT_CALL(foo, DoThis(2))
   2264       .WillOnce(Invoke(NewPermanentCallback(SignOfSum, 5)));
   2265   EXPECT_EQ('+', foo.DoThis(2));  // Invokes SignOfSum(5, 2).
   2266 }
   2267 ```
   2268 
   2269 ### Invoking a Function/Method/Functor/Lambda/Callback Without Arguments
   2270 
   2271 `Invoke()` is very useful for doing actions that are more complex. It passes the
   2272 mock function's arguments to the function, etc being invoked such that the
   2273 callee has the full context of the call to work with. If the invoked function is
   2274 not interested in some or all of the arguments, it can simply ignore them.
   2275 
   2276 Yet, a common pattern is that a test author wants to invoke a function without
   2277 the arguments of the mock function. `Invoke()` allows her to do that using a
   2278 wrapper function that throws away the arguments before invoking an underlining
   2279 nullary function. Needless to say, this can be tedious and obscures the intent
   2280 of the test.
   2281 
   2282 `InvokeWithoutArgs()` solves this problem. It's like `Invoke()` except that it
   2283 doesn't pass the mock function's arguments to the callee. Here's an example:
   2284 
   2285 ```cpp
   2286 using ::testing::_;
   2287 using ::testing::InvokeWithoutArgs;
   2288 
   2289 class MockFoo : public Foo {
   2290  public:
   2291   MOCK_METHOD(bool, ComplexJob, (int n), (override));
   2292 };
   2293 
   2294 bool Job1() { ... }
   2295 bool Job2(int n, char c) { ... }
   2296 
   2297 ...
   2298   MockFoo foo;
   2299   EXPECT_CALL(foo, ComplexJob(_))
   2300       .WillOnce(InvokeWithoutArgs(Job1))
   2301       .WillOnce(InvokeWithoutArgs(NewPermanentCallback(Job2, 5, 'a')));
   2302 
   2303   foo.ComplexJob(10);  // Invokes Job1().
   2304   foo.ComplexJob(20);  // Invokes Job2(5, 'a').
   2305 ```
   2306 
   2307 **`Note:`{.escaped}**
   2308 
   2309 *   The action takes ownership of the callback and will delete it when the
   2310     action itself is destructed.
   2311 *   If the type of a callback is derived from a base callback type `C`, you need
   2312     to implicitly cast it to `C` to resolve the overloading, e.g.
   2313 
   2314     ```cpp
   2315     using ::testing::InvokeWithoutArgs;
   2316     ...
   2317       ResultCallback<bool>* is_ok = ...;
   2318       ... InvokeWithoutArgs(is_ok) ...;  // This works.
   2319 
   2320       BlockingClosure* done = ...;
   2321       ... InvokeWithoutArgs(implicit_cast<Closure*>(done)) ...;
   2322       // The cast is necessary.
   2323     ```
   2324 
   2325 ### Invoking an Argument of the Mock Function
   2326 
   2327 Sometimes a mock function will receive a function pointer, a functor (in other
   2328 words, a "callable") as an argument, e.g.
   2329 
   2330 ```cpp
   2331 class MockFoo : public Foo {
   2332  public:
   2333   MOCK_METHOD(bool, DoThis, (int n, (ResultCallback1<bool, int>* callback)),
   2334               (override));
   2335 };
   2336 ```
   2337 
   2338 and you may want to invoke this callable argument:
   2339 
   2340 ```cpp
   2341 using ::testing::_;
   2342 ...
   2343   MockFoo foo;
   2344   EXPECT_CALL(foo, DoThis(_, _))
   2345       .WillOnce(...);
   2346       // Will execute callback->Run(5), where callback is the
   2347       // second argument DoThis() receives.
   2348 ```
   2349 
   2350 NOTE: The section below is legacy documentation from before C++ had lambdas:
   2351 
   2352 Arghh, you need to refer to a mock function argument but C++ has no lambda
   2353 (yet), so you have to define your own action. :-( Or do you really?
   2354 
   2355 Well, gMock has an action to solve *exactly* this problem:
   2356 
   2357 ```cpp
   2358 InvokeArgument<N>(arg_1, arg_2, ..., arg_m)
   2359 ```
   2360 
   2361 will invoke the `N`-th (0-based) argument the mock function receives, with
   2362 `arg_1`, `arg_2`, ..., and `arg_m`. No matter if the argument is a function
   2363 pointer, a functor, or a callback. gMock handles them all.
   2364 
   2365 With that, you could write:
   2366 
   2367 ```cpp
   2368 using ::testing::_;
   2369 using ::testing::InvokeArgument;
   2370 ...
   2371   EXPECT_CALL(foo, DoThis(_, _))
   2372       .WillOnce(InvokeArgument<1>(5));
   2373       // Will execute callback->Run(5), where callback is the
   2374       // second argument DoThis() receives.
   2375 ```
   2376 
   2377 What if the callable takes an argument by reference? No problem - just wrap it
   2378 inside `ByRef()`:
   2379 
   2380 ```cpp
   2381   ...
   2382   MOCK_METHOD(bool, Bar,
   2383               ((ResultCallback2<bool, int, const Helper&>* callback)),
   2384               (override));
   2385   ...
   2386   using ::testing::_;
   2387   using ::testing::ByRef;
   2388   using ::testing::InvokeArgument;
   2389   ...
   2390   MockFoo foo;
   2391   Helper helper;
   2392   ...
   2393   EXPECT_CALL(foo, Bar(_))
   2394       .WillOnce(InvokeArgument<0>(5, ByRef(helper)));
   2395       // ByRef(helper) guarantees that a reference to helper, not a copy of it,
   2396       // will be passed to the callback.
   2397 ```
   2398 
   2399 What if the callable takes an argument by reference and we do **not** wrap the
   2400 argument in `ByRef()`? Then `InvokeArgument()` will *make a copy* of the
   2401 argument, and pass a *reference to the copy*, instead of a reference to the
   2402 original value, to the callable. This is especially handy when the argument is a
   2403 temporary value:
   2404 
   2405 ```cpp
   2406   ...
   2407   MOCK_METHOD(bool, DoThat, (bool (*f)(const double& x, const string& s)),
   2408               (override));
   2409   ...
   2410   using ::testing::_;
   2411   using ::testing::InvokeArgument;
   2412   ...
   2413   MockFoo foo;
   2414   ...
   2415   EXPECT_CALL(foo, DoThat(_))
   2416       .WillOnce(InvokeArgument<0>(5.0, string("Hi")));
   2417       // Will execute (*f)(5.0, string("Hi")), where f is the function pointer
   2418       // DoThat() receives.  Note that the values 5.0 and string("Hi") are
   2419       // temporary and dead once the EXPECT_CALL() statement finishes.  Yet
   2420       // it's fine to perform this action later, since a copy of the values
   2421       // are kept inside the InvokeArgument action.
   2422 ```
   2423 
   2424 ### Ignoring an Action's Result
   2425 
   2426 Sometimes you have an action that returns *something*, but you need an action
   2427 that returns `void` (perhaps you want to use it in a mock function that returns
   2428 `void`, or perhaps it needs to be used in `DoAll()` and it's not the last in the
   2429 list). `IgnoreResult()` lets you do that. For example:
   2430 
   2431 ```cpp
   2432 using ::testing::_;
   2433 using ::testing::DoAll;
   2434 using ::testing::IgnoreResult;
   2435 using ::testing::Return;
   2436 
   2437 int Process(const MyData& data);
   2438 string DoSomething();
   2439 
   2440 class MockFoo : public Foo {
   2441  public:
   2442   MOCK_METHOD(void, Abc, (const MyData& data), (override));
   2443   MOCK_METHOD(bool, Xyz, (), (override));
   2444 };
   2445 
   2446   ...
   2447   MockFoo foo;
   2448   EXPECT_CALL(foo, Abc(_))
   2449       // .WillOnce(Invoke(Process));
   2450       // The above line won't compile as Process() returns int but Abc() needs
   2451       // to return void.
   2452       .WillOnce(IgnoreResult(Process));
   2453   EXPECT_CALL(foo, Xyz())
   2454       .WillOnce(DoAll(IgnoreResult(DoSomething),
   2455                       // Ignores the string DoSomething() returns.
   2456                       Return(true)));
   2457 ```
   2458 
   2459 Note that you **cannot** use `IgnoreResult()` on an action that already returns
   2460 `void`. Doing so will lead to ugly compiler errors.
   2461 
   2462 ### Selecting an Action's Arguments {#SelectingArgs}
   2463 
   2464 Say you have a mock function `Foo()` that takes seven arguments, and you have a
   2465 custom action that you want to invoke when `Foo()` is called. Trouble is, the
   2466 custom action only wants three arguments:
   2467 
   2468 ```cpp
   2469 using ::testing::_;
   2470 using ::testing::Invoke;
   2471 ...
   2472   MOCK_METHOD(bool, Foo,
   2473               (bool visible, const string& name, int x, int y,
   2474                (const map<pair<int, int>>), double& weight, double min_weight,
   2475                double max_wight));
   2476 ...
   2477 bool IsVisibleInQuadrant1(bool visible, int x, int y) {
   2478   return visible && x >= 0 && y >= 0;
   2479 }
   2480 ...
   2481   EXPECT_CALL(mock, Foo)
   2482       .WillOnce(Invoke(IsVisibleInQuadrant1));  // Uh, won't compile. :-(
   2483 ```
   2484 
   2485 To please the compiler God, you need to define an "adaptor" that has the same
   2486 signature as `Foo()` and calls the custom action with the right arguments:
   2487 
   2488 ```cpp
   2489 using ::testing::_;
   2490 using ::testing::Invoke;
   2491 ...
   2492 bool MyIsVisibleInQuadrant1(bool visible, const string& name, int x, int y,
   2493                             const map<pair<int, int>, double>& weight,
   2494                             double min_weight, double max_wight) {
   2495   return IsVisibleInQuadrant1(visible, x, y);
   2496 }
   2497 ...
   2498   EXPECT_CALL(mock, Foo)
   2499       .WillOnce(Invoke(MyIsVisibleInQuadrant1));  // Now it works.
   2500 ```
   2501 
   2502 But isn't this awkward?
   2503 
   2504 gMock provides a generic *action adaptor*, so you can spend your time minding
   2505 more important business than writing your own adaptors. Here's the syntax:
   2506 
   2507 ```cpp
   2508 WithArgs<N1, N2, ..., Nk>(action)
   2509 ```
   2510 
   2511 creates an action that passes the arguments of the mock function at the given
   2512 indices (0-based) to the inner `action` and performs it. Using `WithArgs`, our
   2513 original example can be written as:
   2514 
   2515 ```cpp
   2516 using ::testing::_;
   2517 using ::testing::Invoke;
   2518 using ::testing::WithArgs;
   2519 ...
   2520   EXPECT_CALL(mock, Foo)
   2521       .WillOnce(WithArgs<0, 2, 3>(Invoke(IsVisibleInQuadrant1)));  // No need to define your own adaptor.
   2522 ```
   2523 
   2524 For better readability, gMock also gives you:
   2525 
   2526 *   `WithoutArgs(action)` when the inner `action` takes *no* argument, and
   2527 *   `WithArg<N>(action)` (no `s` after `Arg`) when the inner `action` takes
   2528     *one* argument.
   2529 
   2530 As you may have realized, `InvokeWithoutArgs(...)` is just syntactic sugar for
   2531 `WithoutArgs(Invoke(...))`.
   2532 
   2533 Here are more tips:
   2534 
   2535 *   The inner action used in `WithArgs` and friends does not have to be
   2536     `Invoke()` -- it can be anything.
   2537 *   You can repeat an argument in the argument list if necessary, e.g.
   2538     `WithArgs<2, 3, 3, 5>(...)`.
   2539 *   You can change the order of the arguments, e.g. `WithArgs<3, 2, 1>(...)`.
   2540 *   The types of the selected arguments do *not* have to match the signature of
   2541     the inner action exactly. It works as long as they can be implicitly
   2542     converted to the corresponding arguments of the inner action. For example,
   2543     if the 4-th argument of the mock function is an `int` and `my_action` takes
   2544     a `double`, `WithArg<4>(my_action)` will work.
   2545 
   2546 ### Ignoring Arguments in Action Functions
   2547 
   2548 The [selecting-an-action's-arguments](#SelectingArgs) recipe showed us one way
   2549 to make a mock function and an action with incompatible argument lists fit
   2550 together. The downside is that wrapping the action in `WithArgs<...>()` can get
   2551 tedious for people writing the tests.
   2552 
   2553 If you are defining a function (or method, functor, lambda, callback) to be used
   2554 with `Invoke*()`, and you are not interested in some of its arguments, an
   2555 alternative to `WithArgs` is to declare the uninteresting arguments as `Unused`.
   2556 This makes the definition less cluttered and less fragile in case the types of
   2557 the uninteresting arguments change. It could also increase the chance the action
   2558 function can be reused. For example, given
   2559 
   2560 ```cpp
   2561  public:
   2562   MOCK_METHOD(double, Foo, double(const string& label, double x, double y),
   2563               (override));
   2564   MOCK_METHOD(double, Bar, (int index, double x, double y), (override));
   2565 ```
   2566 
   2567 instead of
   2568 
   2569 ```cpp
   2570 using ::testing::_;
   2571 using ::testing::Invoke;
   2572 
   2573 double DistanceToOriginWithLabel(const string& label, double x, double y) {
   2574   return sqrt(x*x + y*y);
   2575 }
   2576 double DistanceToOriginWithIndex(int index, double x, double y) {
   2577   return sqrt(x*x + y*y);
   2578 }
   2579 ...
   2580   EXPECT_CALL(mock, Foo("abc", _, _))
   2581       .WillOnce(Invoke(DistanceToOriginWithLabel));
   2582   EXPECT_CALL(mock, Bar(5, _, _))
   2583       .WillOnce(Invoke(DistanceToOriginWithIndex));
   2584 ```
   2585 
   2586 you could write
   2587 
   2588 ```cpp
   2589 using ::testing::_;
   2590 using ::testing::Invoke;
   2591 using ::testing::Unused;
   2592 
   2593 double DistanceToOrigin(Unused, double x, double y) {
   2594   return sqrt(x*x + y*y);
   2595 }
   2596 ...
   2597   EXPECT_CALL(mock, Foo("abc", _, _))
   2598       .WillOnce(Invoke(DistanceToOrigin));
   2599   EXPECT_CALL(mock, Bar(5, _, _))
   2600       .WillOnce(Invoke(DistanceToOrigin));
   2601 ```
   2602 
   2603 ### Sharing Actions
   2604 
   2605 Just like matchers, a gMock action object consists of a pointer to a ref-counted
   2606 implementation object. Therefore copying actions is also allowed and very
   2607 efficient. When the last action that references the implementation object dies,
   2608 the implementation object will be deleted.
   2609 
   2610 If you have some complex action that you want to use again and again, you may
   2611 not have to build it from scratch everytime. If the action doesn't have an
   2612 internal state (i.e. if it always does the same thing no matter how many times
   2613 it has been called), you can assign it to an action variable and use that
   2614 variable repeatedly. For example:
   2615 
   2616 ```cpp
   2617 using ::testing::Action;
   2618 using ::testing::DoAll;
   2619 using ::testing::Return;
   2620 using ::testing::SetArgPointee;
   2621 ...
   2622   Action<bool(int*)> set_flag = DoAll(SetArgPointee<0>(5),
   2623                                       Return(true));
   2624   ... use set_flag in .WillOnce() and .WillRepeatedly() ...
   2625 ```
   2626 
   2627 However, if the action has its own state, you may be surprised if you share the
   2628 action object. Suppose you have an action factory `IncrementCounter(init)` which
   2629 creates an action that increments and returns a counter whose initial value is
   2630 `init`, using two actions created from the same expression and using a shared
   2631 action will exhibit different behaviors. Example:
   2632 
   2633 ```cpp
   2634   EXPECT_CALL(foo, DoThis())
   2635       .WillRepeatedly(IncrementCounter(0));
   2636   EXPECT_CALL(foo, DoThat())
   2637       .WillRepeatedly(IncrementCounter(0));
   2638   foo.DoThis();  // Returns 1.
   2639   foo.DoThis();  // Returns 2.
   2640   foo.DoThat();  // Returns 1 - Blah() uses a different
   2641                  // counter than Bar()'s.
   2642 ```
   2643 
   2644 versus
   2645 
   2646 ```cpp
   2647 using ::testing::Action;
   2648 ...
   2649   Action<int()> increment = IncrementCounter(0);
   2650   EXPECT_CALL(foo, DoThis())
   2651       .WillRepeatedly(increment);
   2652   EXPECT_CALL(foo, DoThat())
   2653       .WillRepeatedly(increment);
   2654   foo.DoThis();  // Returns 1.
   2655   foo.DoThis();  // Returns 2.
   2656   foo.DoThat();  // Returns 3 - the counter is shared.
   2657 ```
   2658 
   2659 ### Testing Asynchronous Behavior
   2660 
   2661 One oft-encountered problem with gMock is that it can be hard to test
   2662 asynchronous behavior. Suppose you had a `EventQueue` class that you wanted to
   2663 test, and you created a separate `EventDispatcher` interface so that you could
   2664 easily mock it out. However, the implementation of the class fired all the
   2665 events on a background thread, which made test timings difficult. You could just
   2666 insert `sleep()` statements and hope for the best, but that makes your test
   2667 behavior nondeterministic. A better way is to use gMock actions and
   2668 `Notification` objects to force your asynchronous test to behave synchronously.
   2669 
   2670 ```cpp
   2671 using ::testing::DoAll;
   2672 using ::testing::InvokeWithoutArgs;
   2673 using ::testing::Return;
   2674 
   2675 class MockEventDispatcher : public EventDispatcher {
   2676   MOCK_METHOD(bool, DispatchEvent, (int32), (override));
   2677 };
   2678 
   2679 ACTION_P(Notify, notification) {
   2680   notification->Notify();
   2681 }
   2682 
   2683 TEST(EventQueueTest, EnqueueEventTest) {
   2684   MockEventDispatcher mock_event_dispatcher;
   2685   EventQueue event_queue(&mock_event_dispatcher);
   2686 
   2687   const int32 kEventId = 321;
   2688   Notification done;
   2689   EXPECT_CALL(mock_event_dispatcher, DispatchEvent(kEventId))
   2690       .WillOnce(Notify(&done));
   2691 
   2692   event_queue.EnqueueEvent(kEventId);
   2693   done.WaitForNotification();
   2694 }
   2695 ```
   2696 
   2697 In the example above, we set our normal gMock expectations, but then add an
   2698 additional action to notify the `Notification` object. Now we can just call
   2699 `Notification::WaitForNotification()` in the main thread to wait for the
   2700 asynchronous call to finish. After that, our test suite is complete and we can
   2701 safely exit.
   2702 
   2703 Note: this example has a downside: namely, if the expectation is not satisfied,
   2704 our test will run forever. It will eventually time-out and fail, but it will
   2705 take longer and be slightly harder to debug. To alleviate this problem, you can
   2706 use `WaitForNotificationWithTimeout(ms)` instead of `WaitForNotification()`.
   2707 
   2708 ## Misc Recipes on Using gMock
   2709 
   2710 ### Mocking Methods That Use Move-Only Types
   2711 
   2712 C++11 introduced *move-only types*. A move-only-typed value can be moved from
   2713 one object to another, but cannot be copied. `std::unique_ptr<T>` is probably
   2714 the most commonly used move-only type.
   2715 
   2716 Mocking a method that takes and/or returns move-only types presents some
   2717 challenges, but nothing insurmountable. This recipe shows you how you can do it.
   2718 Note that the support for move-only method arguments was only introduced to
   2719 gMock in April 2017; in older code, you may find more complex
   2720 [workarounds](#LegacyMoveOnly) for lack of this feature.
   2721 
   2722 Let’s say we are working on a fictional project that lets one post and share
   2723 snippets called “buzzes”. Your code uses these types:
   2724 
   2725 ```cpp
   2726 enum class AccessLevel { kInternal, kPublic };
   2727 
   2728 class Buzz {
   2729  public:
   2730   explicit Buzz(AccessLevel access) { ... }
   2731   ...
   2732 };
   2733 
   2734 class Buzzer {
   2735  public:
   2736   virtual ~Buzzer() {}
   2737   virtual std::unique_ptr<Buzz> MakeBuzz(StringPiece text) = 0;
   2738   virtual bool ShareBuzz(std::unique_ptr<Buzz> buzz, int64_t timestamp) = 0;
   2739   ...
   2740 };
   2741 ```
   2742 
   2743 A `Buzz` object represents a snippet being posted. A class that implements the
   2744 `Buzzer` interface is capable of creating and sharing `Buzz`es. Methods in
   2745 `Buzzer` may return a `unique_ptr<Buzz>` or take a `unique_ptr<Buzz>`. Now we
   2746 need to mock `Buzzer` in our tests.
   2747 
   2748 To mock a method that accepts or returns move-only types, you just use the
   2749 familiar `MOCK_METHOD` syntax as usual:
   2750 
   2751 ```cpp
   2752 class MockBuzzer : public Buzzer {
   2753  public:
   2754   MOCK_METHOD(std::unique_ptr<Buzz>, MakeBuzz, (StringPiece text), (override));
   2755   MOCK_METHOD(bool, ShareBuzz, (std::unique_ptr<Buzz> buzz, int64_t timestamp),
   2756               (override));
   2757 };
   2758 ```
   2759 
   2760 Now that we have the mock class defined, we can use it in tests. In the
   2761 following code examples, we assume that we have defined a `MockBuzzer` object
   2762 named `mock_buzzer_`:
   2763 
   2764 ```cpp
   2765   MockBuzzer mock_buzzer_;
   2766 ```
   2767 
   2768 First let’s see how we can set expectations on the `MakeBuzz()` method, which
   2769 returns a `unique_ptr<Buzz>`.
   2770 
   2771 As usual, if you set an expectation without an action (i.e. the `.WillOnce()` or
   2772 `.WillRepeatedly()` clause), when that expectation fires, the default action for
   2773 that method will be taken. Since `unique_ptr<>` has a default constructor that
   2774 returns a null `unique_ptr`, that’s what you’ll get if you don’t specify an
   2775 action:
   2776 
   2777 ```cpp
   2778   // Use the default action.
   2779   EXPECT_CALL(mock_buzzer_, MakeBuzz("hello"));
   2780 
   2781   // Triggers the previous EXPECT_CALL.
   2782   EXPECT_EQ(nullptr, mock_buzzer_.MakeBuzz("hello"));
   2783 ```
   2784 
   2785 If you are not happy with the default action, you can tweak it as usual; see
   2786 [Setting Default Actions](#OnCall).
   2787 
   2788 If you just need to return a pre-defined move-only value, you can use the
   2789 `Return(ByMove(...))` action:
   2790 
   2791 ```cpp
   2792   // When this fires, the unique_ptr<> specified by ByMove(...) will
   2793   // be returned.
   2794   EXPECT_CALL(mock_buzzer_, MakeBuzz("world"))
   2795       .WillOnce(Return(ByMove(MakeUnique<Buzz>(AccessLevel::kInternal))));
   2796 
   2797   EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("world"));
   2798 ```
   2799 
   2800 Note that `ByMove()` is essential here - if you drop it, the code won’t compile.
   2801 
   2802 Quiz time! What do you think will happen if a `Return(ByMove(...))` action is
   2803 performed more than once (e.g. you write `...
   2804 .WillRepeatedly(Return(ByMove(...)));`)? Come think of it, after the first time
   2805 the action runs, the source value will be consumed (since it’s a move-only
   2806 value), so the next time around, there’s no value to move from -- you’ll get a
   2807 run-time error that `Return(ByMove(...))` can only be run once.
   2808 
   2809 If you need your mock method to do more than just moving a pre-defined value,
   2810 remember that you can always use a lambda or a callable object, which can do
   2811 pretty much anything you want:
   2812 
   2813 ```cpp
   2814   EXPECT_CALL(mock_buzzer_, MakeBuzz("x"))
   2815       .WillRepeatedly([](StringPiece text) {
   2816         return MakeUnique<Buzz>(AccessLevel::kInternal);
   2817       });
   2818 
   2819   EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("x"));
   2820   EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("x"));
   2821 ```
   2822 
   2823 Every time this `EXPECT_CALL` fires, a new `unique_ptr<Buzz>` will be created
   2824 and returned. You cannot do this with `Return(ByMove(...))`.
   2825 
   2826 That covers returning move-only values; but how do we work with methods
   2827 accepting move-only arguments? The answer is that they work normally, although
   2828 some actions will not compile when any of method's arguments are move-only. You
   2829 can always use `Return`, or a [lambda or functor](#FunctionsAsActions):
   2830 
   2831 ```cpp
   2832   using ::testing::Unused;
   2833 
   2834   EXPECT_CALL(mock_buzzer_, ShareBuzz(NotNull(), _)).WillOnce(Return(true));
   2835   EXPECT_TRUE(mock_buzzer_.ShareBuzz(MakeUnique<Buzz>(AccessLevel::kInternal)),
   2836               0);
   2837 
   2838   EXPECT_CALL(mock_buzzer_, ShareBuzz(_, _)).WillOnce(
   2839       [](std::unique_ptr<Buzz> buzz, Unused) { return buzz != nullptr; });
   2840   EXPECT_FALSE(mock_buzzer_.ShareBuzz(nullptr, 0));
   2841 ```
   2842 
   2843 Many built-in actions (`WithArgs`, `WithoutArgs`,`DeleteArg`, `SaveArg`, ...)
   2844 could in principle support move-only arguments, but the support for this is not
   2845 implemented yet. If this is blocking you, please file a bug.
   2846 
   2847 A few actions (e.g. `DoAll`) copy their arguments internally, so they can never
   2848 work with non-copyable objects; you'll have to use functors instead.
   2849 
   2850 #### Legacy workarounds for move-only types {#LegacyMoveOnly}
   2851 
   2852 Support for move-only function arguments was only introduced to gMock in April
   2853 2017. In older code, you may encounter the following workaround for the lack of
   2854 this feature (it is no longer necessary - we're including it just for
   2855 reference):
   2856 
   2857 ```cpp
   2858 class MockBuzzer : public Buzzer {
   2859  public:
   2860   MOCK_METHOD(bool, DoShareBuzz, (Buzz* buzz, Time timestamp));
   2861   bool ShareBuzz(std::unique_ptr<Buzz> buzz, Time timestamp) override {
   2862     return DoShareBuzz(buzz.get(), timestamp);
   2863   }
   2864 };
   2865 ```
   2866 
   2867 The trick is to delegate the `ShareBuzz()` method to a mock method (let’s call
   2868 it `DoShareBuzz()`) that does not take move-only parameters. Then, instead of
   2869 setting expectations on `ShareBuzz()`, you set them on the `DoShareBuzz()` mock
   2870 method:
   2871 
   2872 ```cpp
   2873   MockBuzzer mock_buzzer_;
   2874   EXPECT_CALL(mock_buzzer_, DoShareBuzz(NotNull(), _));
   2875 
   2876   // When one calls ShareBuzz() on the MockBuzzer like this, the call is
   2877   // forwarded to DoShareBuzz(), which is mocked.  Therefore this statement
   2878   // will trigger the above EXPECT_CALL.
   2879   mock_buzzer_.ShareBuzz(MakeUnique<Buzz>(AccessLevel::kInternal), 0);
   2880 ```
   2881 
   2882 ### Making the Compilation Faster
   2883 
   2884 Believe it or not, the *vast majority* of the time spent on compiling a mock
   2885 class is in generating its constructor and destructor, as they perform
   2886 non-trivial tasks (e.g. verification of the expectations). What's more, mock
   2887 methods with different signatures have different types and thus their
   2888 constructors/destructors need to be generated by the compiler separately. As a
   2889 result, if you mock many different types of methods, compiling your mock class
   2890 can get really slow.
   2891 
   2892 If you are experiencing slow compilation, you can move the definition of your
   2893 mock class' constructor and destructor out of the class body and into a `.cc`
   2894 file. This way, even if you `#include` your mock class in N files, the compiler
   2895 only needs to generate its constructor and destructor once, resulting in a much
   2896 faster compilation.
   2897 
   2898 Let's illustrate the idea using an example. Here's the definition of a mock
   2899 class before applying this recipe:
   2900 
   2901 ```cpp
   2902 // File mock_foo.h.
   2903 ...
   2904 class MockFoo : public Foo {
   2905  public:
   2906   // Since we don't declare the constructor or the destructor,
   2907   // the compiler will generate them in every translation unit
   2908   // where this mock class is used.
   2909 
   2910   MOCK_METHOD(int, DoThis, (), (override));
   2911   MOCK_METHOD(bool, DoThat, (const char* str), (override));
   2912   ... more mock methods ...
   2913 };
   2914 ```
   2915 
   2916 After the change, it would look like:
   2917 
   2918 ```cpp
   2919 // File mock_foo.h.
   2920 ...
   2921 class MockFoo : public Foo {
   2922  public:
   2923   // The constructor and destructor are declared, but not defined, here.
   2924   MockFoo();
   2925   virtual ~MockFoo();
   2926 
   2927   MOCK_METHOD(int, DoThis, (), (override));
   2928   MOCK_METHOD(bool, DoThat, (const char* str), (override));
   2929   ... more mock methods ...
   2930 };
   2931 ```
   2932 
   2933 and
   2934 
   2935 ```cpp
   2936 // File mock_foo.cc.
   2937 #include "path/to/mock_foo.h"
   2938 
   2939 // The definitions may appear trivial, but the functions actually do a
   2940 // lot of things through the constructors/destructors of the member
   2941 // variables used to implement the mock methods.
   2942 MockFoo::MockFoo() {}
   2943 MockFoo::~MockFoo() {}
   2944 ```
   2945 
   2946 ### Forcing a Verification
   2947 
   2948 When it's being destroyed, your friendly mock object will automatically verify
   2949 that all expectations on it have been satisfied, and will generate googletest
   2950 failures if not. This is convenient as it leaves you with one less thing to
   2951 worry about. That is, unless you are not sure if your mock object will be
   2952 destroyed.
   2953 
   2954 How could it be that your mock object won't eventually be destroyed? Well, it
   2955 might be created on the heap and owned by the code you are testing. Suppose
   2956 there's a bug in that code and it doesn't delete the mock object properly - you
   2957 could end up with a passing test when there's actually a bug.
   2958 
   2959 Using a heap checker is a good idea and can alleviate the concern, but its
   2960 implementation is not 100% reliable. So, sometimes you do want to *force* gMock
   2961 to verify a mock object before it is (hopefully) destructed. You can do this
   2962 with `Mock::VerifyAndClearExpectations(&mock_object)`:
   2963 
   2964 ```cpp
   2965 TEST(MyServerTest, ProcessesRequest) {
   2966   using ::testing::Mock;
   2967 
   2968   MockFoo* const foo = new MockFoo;
   2969   EXPECT_CALL(*foo, ...)...;
   2970   // ... other expectations ...
   2971 
   2972   // server now owns foo.
   2973   MyServer server(foo);
   2974   server.ProcessRequest(...);
   2975 
   2976   // In case that server's destructor will forget to delete foo,
   2977   // this will verify the expectations anyway.
   2978   Mock::VerifyAndClearExpectations(foo);
   2979 }  // server is destroyed when it goes out of scope here.
   2980 ```
   2981 
   2982 **Tip:** The `Mock::VerifyAndClearExpectations()` function returns a `bool` to
   2983 indicate whether the verification was successful (`true` for yes), so you can
   2984 wrap that function call inside a `ASSERT_TRUE()` if there is no point going
   2985 further when the verification has failed.
   2986 
   2987 ### Using Check Points {#UsingCheckPoints}
   2988 
   2989 Sometimes you may want to "reset" a mock object at various check points in your
   2990 test: at each check point, you verify that all existing expectations on the mock
   2991 object have been satisfied, and then you set some new expectations on it as if
   2992 it's newly created. This allows you to work with a mock object in "phases" whose
   2993 sizes are each manageable.
   2994 
   2995 One such scenario is that in your test's `SetUp()` function, you may want to put
   2996 the object you are testing into a certain state, with the help from a mock
   2997 object. Once in the desired state, you want to clear all expectations on the
   2998 mock, such that in the `TEST_F` body you can set fresh expectations on it.
   2999 
   3000 As you may have figured out, the `Mock::VerifyAndClearExpectations()` function
   3001 we saw in the previous recipe can help you here. Or, if you are using
   3002 `ON_CALL()` to set default actions on the mock object and want to clear the
   3003 default actions as well, use `Mock::VerifyAndClear(&mock_object)` instead. This
   3004 function does what `Mock::VerifyAndClearExpectations(&mock_object)` does and
   3005 returns the same `bool`, **plus** it clears the `ON_CALL()` statements on
   3006 `mock_object` too.
   3007 
   3008 Another trick you can use to achieve the same effect is to put the expectations
   3009 in sequences and insert calls to a dummy "check-point" function at specific
   3010 places. Then you can verify that the mock function calls do happen at the right
   3011 time. For example, if you are exercising code:
   3012 
   3013 ```cpp
   3014   Foo(1);
   3015   Foo(2);
   3016   Foo(3);
   3017 ```
   3018 
   3019 and want to verify that `Foo(1)` and `Foo(3)` both invoke `mock.Bar("a")`, but
   3020 `Foo(2)` doesn't invoke anything. You can write:
   3021 
   3022 ```cpp
   3023 using ::testing::MockFunction;
   3024 
   3025 TEST(FooTest, InvokesBarCorrectly) {
   3026   MyMock mock;
   3027   // Class MockFunction<F> has exactly one mock method.  It is named
   3028   // Call() and has type F.
   3029   MockFunction<void(string check_point_name)> check;
   3030   {
   3031     InSequence s;
   3032 
   3033     EXPECT_CALL(mock, Bar("a"));
   3034     EXPECT_CALL(check, Call("1"));
   3035     EXPECT_CALL(check, Call("2"));
   3036     EXPECT_CALL(mock, Bar("a"));
   3037   }
   3038   Foo(1);
   3039   check.Call("1");
   3040   Foo(2);
   3041   check.Call("2");
   3042   Foo(3);
   3043 }
   3044 ```
   3045 
   3046 The expectation spec says that the first `Bar("a")` must happen before check
   3047 point "1", the second `Bar("a")` must happen after check point "2", and nothing
   3048 should happen between the two check points. The explicit check points make it
   3049 easy to tell which `Bar("a")` is called by which call to `Foo()`.
   3050 
   3051 ### Mocking Destructors
   3052 
   3053 Sometimes you want to make sure a mock object is destructed at the right time,
   3054 e.g. after `bar->A()` is called but before `bar->B()` is called. We already know
   3055 that you can specify constraints on the [order](#OrderedCalls) of mock function
   3056 calls, so all we need to do is to mock the destructor of the mock function.
   3057 
   3058 This sounds simple, except for one problem: a destructor is a special function
   3059 with special syntax and special semantics, and the `MOCK_METHOD` macro doesn't
   3060 work for it:
   3061 
   3062 ```cpp
   3063 MOCK_METHOD(void, ~MockFoo, ());  // Won't compile!
   3064 ```
   3065 
   3066 The good news is that you can use a simple pattern to achieve the same effect.
   3067 First, add a mock function `Die()` to your mock class and call it in the
   3068 destructor, like this:
   3069 
   3070 ```cpp
   3071 class MockFoo : public Foo {
   3072   ...
   3073   // Add the following two lines to the mock class.
   3074   MOCK_METHOD(void, Die, ());
   3075   virtual ~MockFoo() { Die(); }
   3076 };
   3077 ```
   3078 
   3079 (If the name `Die()` clashes with an existing symbol, choose another name.) Now,
   3080 we have translated the problem of testing when a `MockFoo` object dies to
   3081 testing when its `Die()` method is called:
   3082 
   3083 ```cpp
   3084   MockFoo* foo = new MockFoo;
   3085   MockBar* bar = new MockBar;
   3086   ...
   3087   {
   3088     InSequence s;
   3089 
   3090     // Expects *foo to die after bar->A() and before bar->B().
   3091     EXPECT_CALL(*bar, A());
   3092     EXPECT_CALL(*foo, Die());
   3093     EXPECT_CALL(*bar, B());
   3094   }
   3095 ```
   3096 
   3097 And that's that.
   3098 
   3099 ### Using gMock and Threads {#UsingThreads}
   3100 
   3101 In a **unit** test, it's best if you could isolate and test a piece of code in a
   3102 single-threaded context. That avoids race conditions and dead locks, and makes
   3103 debugging your test much easier.
   3104 
   3105 Yet most programs are multi-threaded, and sometimes to test something we need to
   3106 pound on it from more than one thread. gMock works for this purpose too.
   3107 
   3108 Remember the steps for using a mock:
   3109 
   3110 1.  Create a mock object `foo`.
   3111 2.  Set its default actions and expectations using `ON_CALL()` and
   3112     `EXPECT_CALL()`.
   3113 3.  The code under test calls methods of `foo`.
   3114 4.  Optionally, verify and reset the mock.
   3115 5.  Destroy the mock yourself, or let the code under test destroy it. The
   3116     destructor will automatically verify it.
   3117 
   3118 If you follow the following simple rules, your mocks and threads can live
   3119 happily together:
   3120 
   3121 *   Execute your *test code* (as opposed to the code being tested) in *one*
   3122     thread. This makes your test easy to follow.
   3123 *   Obviously, you can do step #1 without locking.
   3124 *   When doing step #2 and #5, make sure no other thread is accessing `foo`.
   3125     Obvious too, huh?
   3126 *   #3 and #4 can be done either in one thread or in multiple threads - anyway
   3127     you want. gMock takes care of the locking, so you don't have to do any -
   3128     unless required by your test logic.
   3129 
   3130 If you violate the rules (for example, if you set expectations on a mock while
   3131 another thread is calling its methods), you get undefined behavior. That's not
   3132 fun, so don't do it.
   3133 
   3134 gMock guarantees that the action for a mock function is done in the same thread
   3135 that called the mock function. For example, in
   3136 
   3137 ```cpp
   3138   EXPECT_CALL(mock, Foo(1))
   3139       .WillOnce(action1);
   3140   EXPECT_CALL(mock, Foo(2))
   3141       .WillOnce(action2);
   3142 ```
   3143 
   3144 if `Foo(1)` is called in thread 1 and `Foo(2)` is called in thread 2, gMock will
   3145 execute `action1` in thread 1 and `action2` in thread 2.
   3146 
   3147 gMock does *not* impose a sequence on actions performed in different threads
   3148 (doing so may create deadlocks as the actions may need to cooperate). This means
   3149 that the execution of `action1` and `action2` in the above example *may*
   3150 interleave. If this is a problem, you should add proper synchronization logic to
   3151 `action1` and `action2` to make the test thread-safe.
   3152 
   3153 Also, remember that `DefaultValue<T>` is a global resource that potentially
   3154 affects *all* living mock objects in your program. Naturally, you won't want to
   3155 mess with it from multiple threads or when there still are mocks in action.
   3156 
   3157 ### Controlling How Much Information gMock Prints
   3158 
   3159 When gMock sees something that has the potential of being an error (e.g. a mock
   3160 function with no expectation is called, a.k.a. an uninteresting call, which is
   3161 allowed but perhaps you forgot to explicitly ban the call), it prints some
   3162 warning messages, including the arguments of the function, the return value, and
   3163 the stack trace. Hopefully this will remind you to take a look and see if there
   3164 is indeed a problem.
   3165 
   3166 Sometimes you are confident that your tests are correct and may not appreciate
   3167 such friendly messages. Some other times, you are debugging your tests or
   3168 learning about the behavior of the code you are testing, and wish you could
   3169 observe every mock call that happens (including argument values, the return
   3170 value, and the stack trace). Clearly, one size doesn't fit all.
   3171 
   3172 You can control how much gMock tells you using the `--gmock_verbose=LEVEL`
   3173 command-line flag, where `LEVEL` is a string with three possible values:
   3174 
   3175 *   `info`: gMock will print all informational messages, warnings, and errors
   3176     (most verbose). At this setting, gMock will also log any calls to the
   3177     `ON_CALL/EXPECT_CALL` macros. It will include a stack trace in
   3178     "uninteresting call" warnings.
   3179 *   `warning`: gMock will print both warnings and errors (less verbose); it will
   3180     omit the stack traces in "uninteresting call" warnings. This is the default.
   3181 *   `error`: gMock will print errors only (least verbose).
   3182 
   3183 Alternatively, you can adjust the value of that flag from within your tests like
   3184 so:
   3185 
   3186 ```cpp
   3187   ::testing::FLAGS_gmock_verbose = "error";
   3188 ```
   3189 
   3190 If you find gMock printing too many stack frames with its informational or
   3191 warning messages, remember that you can control their amount with the
   3192 `--gtest_stack_trace_depth=max_depth` flag.
   3193 
   3194 Now, judiciously use the right flag to enable gMock serve you better!
   3195 
   3196 ### Gaining Super Vision into Mock Calls
   3197 
   3198 You have a test using gMock. It fails: gMock tells you some expectations aren't
   3199 satisfied. However, you aren't sure why: Is there a typo somewhere in the
   3200 matchers? Did you mess up the order of the `EXPECT_CALL`s? Or is the code under
   3201 test doing something wrong? How can you find out the cause?
   3202 
   3203 Won't it be nice if you have X-ray vision and can actually see the trace of all
   3204 `EXPECT_CALL`s and mock method calls as they are made? For each call, would you
   3205 like to see its actual argument values and which `EXPECT_CALL` gMock thinks it
   3206 matches? If you still need some help to figure out who made these calls, how
   3207 about being able to see the complete stack trace at each mock call?
   3208 
   3209 You can unlock this power by running your test with the `--gmock_verbose=info`
   3210 flag. For example, given the test program:
   3211 
   3212 ```cpp
   3213 #include "gmock/gmock.h"
   3214 
   3215 using testing::_;
   3216 using testing::HasSubstr;
   3217 using testing::Return;
   3218 
   3219 class MockFoo {
   3220  public:
   3221   MOCK_METHOD(void, F, (const string& x, const string& y));
   3222 };
   3223 
   3224 TEST(Foo, Bar) {
   3225   MockFoo mock;
   3226   EXPECT_CALL(mock, F(_, _)).WillRepeatedly(Return());
   3227   EXPECT_CALL(mock, F("a", "b"));
   3228   EXPECT_CALL(mock, F("c", HasSubstr("d")));
   3229 
   3230   mock.F("a", "good");
   3231   mock.F("a", "b");
   3232 }
   3233 ```
   3234 
   3235 if you run it with `--gmock_verbose=info`, you will see this output:
   3236 
   3237 ```shell
   3238 [ RUN       ] Foo.Bar
   3239 
   3240 foo_test.cc:14: EXPECT_CALL(mock, F(_, _)) invoked
   3241 Stack trace: ...
   3242 
   3243 foo_test.cc:15: EXPECT_CALL(mock, F("a", "b")) invoked
   3244 Stack trace: ...
   3245 
   3246 foo_test.cc:16: EXPECT_CALL(mock, F("c", HasSubstr("d"))) invoked
   3247 Stack trace: ...
   3248 
   3249 foo_test.cc:14: Mock function call matches EXPECT_CALL(mock, F(_, _))...
   3250     Function call: F(@0x7fff7c8dad40"a",@0x7fff7c8dad10"good")
   3251 Stack trace: ...
   3252 
   3253 foo_test.cc:15: Mock function call matches EXPECT_CALL(mock, F("a", "b"))...
   3254     Function call: F(@0x7fff7c8dada0"a",@0x7fff7c8dad70"b")
   3255 Stack trace: ...
   3256 
   3257 foo_test.cc:16: Failure
   3258 Actual function call count doesn't match EXPECT_CALL(mock, F("c", HasSubstr("d")))...
   3259          Expected: to be called once
   3260            Actual: never called - unsatisfied and active
   3261 [  FAILED  ] Foo.Bar
   3262 ```
   3263 
   3264 Suppose the bug is that the `"c"` in the third `EXPECT_CALL` is a typo and
   3265 should actually be `"a"`. With the above message, you should see that the actual
   3266 `F("a", "good")` call is matched by the first `EXPECT_CALL`, not the third as
   3267 you thought. From that it should be obvious that the third `EXPECT_CALL` is
   3268 written wrong. Case solved.
   3269 
   3270 If you are interested in the mock call trace but not the stack traces, you can
   3271 combine `--gmock_verbose=info` with `--gtest_stack_trace_depth=0` on the test
   3272 command line.
   3273 
   3274 <!-- GOOGLETEST_CM0025 DO NOT DELETE -->
   3275 
   3276 ### Running Tests in Emacs
   3277 
   3278 If you build and run your tests in Emacs using the `M-x google-compile` command
   3279 (as many googletest users do), the source file locations of gMock and googletest
   3280 errors will be highlighted. Just press `<Enter>` on one of them and you'll be
   3281 taken to the offending line. Or, you can just type `C-x`` to jump to the next
   3282 error.
   3283 
   3284 To make it even easier, you can add the following lines to your `~/.emacs` file:
   3285 
   3286 ```text
   3287 (global-set-key "\M-m"  'google-compile)  ; m is for make
   3288 (global-set-key [M-down] 'next-error)
   3289 (global-set-key [M-up]  '(lambda () (interactive) (next-error -1)))
   3290 ```
   3291 
   3292 Then you can type `M-m` to start a build (if you want to run the test as well,
   3293 just make sure `foo_test.run` or `runtests` is in the build command you supply
   3294 after typing `M-m`), or `M-up`/`M-down` to move back and forth between errors.
   3295 
   3296 ## Extending gMock
   3297 
   3298 ### Writing New Matchers Quickly {#NewMatchers}
   3299 
   3300 WARNING: gMock does not guarantee when or how many times a matcher will be
   3301 invoked. Therefore, all matchers must be functionally pure. See
   3302 [this section](#PureMatchers) for more details.
   3303 
   3304 The `MATCHER*` family of macros can be used to define custom matchers easily.
   3305 The syntax:
   3306 
   3307 ```cpp
   3308 MATCHER(name, description_string_expression) { statements; }
   3309 ```
   3310 
   3311 will define a matcher with the given name that executes the statements, which
   3312 must return a `bool` to indicate if the match succeeds. Inside the statements,
   3313 you can refer to the value being matched by `arg`, and refer to its type by
   3314 `arg_type`.
   3315 
   3316 The *description string* is a `string`-typed expression that documents what the
   3317 matcher does, and is used to generate the failure message when the match fails.
   3318 It can (and should) reference the special `bool` variable `negation`, and should
   3319 evaluate to the description of the matcher when `negation` is `false`, or that
   3320 of the matcher's negation when `negation` is `true`.
   3321 
   3322 For convenience, we allow the description string to be empty (`""`), in which
   3323 case gMock will use the sequence of words in the matcher name as the
   3324 description.
   3325 
   3326 For example:
   3327 
   3328 ```cpp
   3329 MATCHER(IsDivisibleBy7, "") { return (arg % 7) == 0; }
   3330 ```
   3331 
   3332 allows you to write
   3333 
   3334 ```cpp
   3335   // Expects mock_foo.Bar(n) to be called where n is divisible by 7.
   3336   EXPECT_CALL(mock_foo, Bar(IsDivisibleBy7()));
   3337 ```
   3338 
   3339 or,
   3340 
   3341 ```cpp
   3342   using ::testing::Not;
   3343   ...
   3344   // Verifies that two values are divisible by 7.
   3345   EXPECT_THAT(some_expression, IsDivisibleBy7());
   3346   EXPECT_THAT(some_other_expression, Not(IsDivisibleBy7()));
   3347 ```
   3348 
   3349 If the above assertions fail, they will print something like:
   3350 
   3351 ```shell
   3352   Value of: some_expression
   3353   Expected: is divisible by 7
   3354     Actual: 27
   3355   ...
   3356   Value of: some_other_expression
   3357   Expected: not (is divisible by 7)
   3358     Actual: 21
   3359 ```
   3360 
   3361 where the descriptions `"is divisible by 7"` and `"not (is divisible by 7)"` are
   3362 automatically calculated from the matcher name `IsDivisibleBy7`.
   3363 
   3364 As you may have noticed, the auto-generated descriptions (especially those for
   3365 the negation) may not be so great. You can always override them with a `string`
   3366 expression of your own:
   3367 
   3368 ```cpp
   3369 MATCHER(IsDivisibleBy7,
   3370         absl::StrCat(negation ? "isn't" : "is", " divisible by 7")) {
   3371   return (arg % 7) == 0;
   3372 }
   3373 ```
   3374 
   3375 Optionally, you can stream additional information to a hidden argument named
   3376 `result_listener` to explain the match result. For example, a better definition
   3377 of `IsDivisibleBy7` is:
   3378 
   3379 ```cpp
   3380 MATCHER(IsDivisibleBy7, "") {
   3381   if ((arg % 7) == 0)
   3382     return true;
   3383 
   3384   *result_listener << "the remainder is " << (arg % 7);
   3385   return false;
   3386 }
   3387 ```
   3388 
   3389 With this definition, the above assertion will give a better message:
   3390 
   3391 ```shell
   3392   Value of: some_expression
   3393   Expected: is divisible by 7
   3394     Actual: 27 (the remainder is 6)
   3395 ```
   3396 
   3397 You should let `MatchAndExplain()` print *any additional information* that can
   3398 help a user understand the match result. Note that it should explain why the
   3399 match succeeds in case of a success (unless it's obvious) - this is useful when
   3400 the matcher is used inside `Not()`. There is no need to print the argument value
   3401 itself, as gMock already prints it for you.
   3402 
   3403 NOTE: The type of the value being matched (`arg_type`) is determined by the
   3404 context in which you use the matcher and is supplied to you by the compiler, so
   3405 you don't need to worry about declaring it (nor can you). This allows the
   3406 matcher to be polymorphic. For example, `IsDivisibleBy7()` can be used to match
   3407 any type where the value of `(arg % 7) == 0` can be implicitly converted to a
   3408 `bool`. In the `Bar(IsDivisibleBy7())` example above, if method `Bar()` takes an
   3409 `int`, `arg_type` will be `int`; if it takes an `unsigned long`, `arg_type` will
   3410 be `unsigned long`; and so on.
   3411 
   3412 ### Writing New Parameterized Matchers Quickly
   3413 
   3414 Sometimes you'll want to define a matcher that has parameters. For that you can
   3415 use the macro:
   3416 
   3417 ```cpp
   3418 MATCHER_P(name, param_name, description_string) { statements; }
   3419 ```
   3420 
   3421 where the description string can be either `""` or a `string` expression that
   3422 references `negation` and `param_name`.
   3423 
   3424 For example:
   3425 
   3426 ```cpp
   3427 MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; }
   3428 ```
   3429 
   3430 will allow you to write:
   3431 
   3432 ```cpp
   3433   EXPECT_THAT(Blah("a"), HasAbsoluteValue(n));
   3434 ```
   3435 
   3436 which may lead to this message (assuming `n` is 10):
   3437 
   3438 ```shell
   3439   Value of: Blah("a")
   3440   Expected: has absolute value 10
   3441     Actual: -9
   3442 ```
   3443 
   3444 Note that both the matcher description and its parameter are printed, making the
   3445 message human-friendly.
   3446 
   3447 In the matcher definition body, you can write `foo_type` to reference the type
   3448 of a parameter named `foo`. For example, in the body of
   3449 `MATCHER_P(HasAbsoluteValue, value)` above, you can write `value_type` to refer
   3450 to the type of `value`.
   3451 
   3452 gMock also provides `MATCHER_P2`, `MATCHER_P3`, ..., up to `MATCHER_P10` to
   3453 support multi-parameter matchers:
   3454 
   3455 ```cpp
   3456 MATCHER_Pk(name, param_1, ..., param_k, description_string) { statements; }
   3457 ```
   3458 
   3459 Please note that the custom description string is for a particular *instance* of
   3460 the matcher, where the parameters have been bound to actual values. Therefore
   3461 usually you'll want the parameter values to be part of the description. gMock
   3462 lets you do that by referencing the matcher parameters in the description string
   3463 expression.
   3464 
   3465 For example,
   3466 
   3467 ```cpp
   3468 using ::testing::PrintToString;
   3469 MATCHER_P2(InClosedRange, low, hi,
   3470            absl::StrFormat("%s in range [%s, %s]", negation ? "isn't" : "is",
   3471                            PrintToString(low), PrintToString(hi))) {
   3472   return low <= arg && arg <= hi;
   3473 }
   3474 ...
   3475 EXPECT_THAT(3, InClosedRange(4, 6));
   3476 ```
   3477 
   3478 would generate a failure that contains the message:
   3479 
   3480 ```shell
   3481   Expected: is in range [4, 6]
   3482 ```
   3483 
   3484 If you specify `""` as the description, the failure message will contain the
   3485 sequence of words in the matcher name followed by the parameter values printed
   3486 as a tuple. For example,
   3487 
   3488 ```cpp
   3489   MATCHER_P2(InClosedRange, low, hi, "") { ... }
   3490   ...
   3491   EXPECT_THAT(3, InClosedRange(4, 6));
   3492 ```
   3493 
   3494 would generate a failure that contains the text:
   3495 
   3496 ```shell
   3497   Expected: in closed range (4, 6)
   3498 ```
   3499 
   3500 For the purpose of typing, you can view
   3501 
   3502 ```cpp
   3503 MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... }
   3504 ```
   3505 
   3506 as shorthand for
   3507 
   3508 ```cpp
   3509 template <typename p1_type, ..., typename pk_type>
   3510 FooMatcherPk<p1_type, ..., pk_type>
   3511 Foo(p1_type p1, ..., pk_type pk) { ... }
   3512 ```
   3513 
   3514 When you write `Foo(v1, ..., vk)`, the compiler infers the types of the
   3515 parameters `v1`, ..., and `vk` for you. If you are not happy with the result of
   3516 the type inference, you can specify the types by explicitly instantiating the
   3517 template, as in `Foo<long, bool>(5, false)`. As said earlier, you don't get to
   3518 (or need to) specify `arg_type` as that's determined by the context in which the
   3519 matcher is used.
   3520 
   3521 You can assign the result of expression `Foo(p1, ..., pk)` to a variable of type
   3522 `FooMatcherPk<p1_type, ..., pk_type>`. This can be useful when composing
   3523 matchers. Matchers that don't have a parameter or have only one parameter have
   3524 special types: you can assign `Foo()` to a `FooMatcher`-typed variable, and
   3525 assign `Foo(p)` to a `FooMatcherP<p_type>`-typed variable.
   3526 
   3527 While you can instantiate a matcher template with reference types, passing the
   3528 parameters by pointer usually makes your code more readable. If, however, you
   3529 still want to pass a parameter by reference, be aware that in the failure
   3530 message generated by the matcher you will see the value of the referenced object
   3531 but not its address.
   3532 
   3533 You can overload matchers with different numbers of parameters:
   3534 
   3535 ```cpp
   3536 MATCHER_P(Blah, a, description_string_1) { ... }
   3537 MATCHER_P2(Blah, a, b, description_string_2) { ... }
   3538 ```
   3539 
   3540 While it's tempting to always use the `MATCHER*` macros when defining a new
   3541 matcher, you should also consider implementing `MatcherInterface` or using
   3542 `MakePolymorphicMatcher()` instead (see the recipes that follow), especially if
   3543 you need to use the matcher a lot. While these approaches require more work,
   3544 they give you more control on the types of the value being matched and the
   3545 matcher parameters, which in general leads to better compiler error messages
   3546 that pay off in the long run. They also allow overloading matchers based on
   3547 parameter types (as opposed to just based on the number of parameters).
   3548 
   3549 ### Writing New Monomorphic Matchers
   3550 
   3551 A matcher of argument type `T` implements `::testing::MatcherInterface<T>` and
   3552 does two things: it tests whether a value of type `T` matches the matcher, and
   3553 can describe what kind of values it matches. The latter ability is used for
   3554 generating readable error messages when expectations are violated.
   3555 
   3556 The interface looks like this:
   3557 
   3558 ```cpp
   3559 class MatchResultListener {
   3560  public:
   3561   ...
   3562   // Streams x to the underlying ostream; does nothing if the ostream
   3563   // is NULL.
   3564   template <typename T>
   3565   MatchResultListener& operator<<(const T& x);
   3566 
   3567   // Returns the underlying ostream.
   3568   ::std::ostream* stream();
   3569 };
   3570 
   3571 template <typename T>
   3572 class MatcherInterface {
   3573  public:
   3574   virtual ~MatcherInterface();
   3575 
   3576   // Returns true if and only if the matcher matches x; also explains the match
   3577   // result to 'listener'.
   3578   virtual bool MatchAndExplain(T x, MatchResultListener* listener) const = 0;
   3579 
   3580   // Describes this matcher to an ostream.
   3581   virtual void DescribeTo(::std::ostream* os) const = 0;
   3582 
   3583   // Describes the negation of this matcher to an ostream.
   3584   virtual void DescribeNegationTo(::std::ostream* os) const;
   3585 };
   3586 ```
   3587 
   3588 If you need a custom matcher but `Truly()` is not a good option (for example,
   3589 you may not be happy with the way `Truly(predicate)` describes itself, or you
   3590 may want your matcher to be polymorphic as `Eq(value)` is), you can define a
   3591 matcher to do whatever you want in two steps: first implement the matcher
   3592 interface, and then define a factory function to create a matcher instance. The
   3593 second step is not strictly needed but it makes the syntax of using the matcher
   3594 nicer.
   3595 
   3596 For example, you can define a matcher to test whether an `int` is divisible by 7
   3597 and then use it like this:
   3598 
   3599 ```cpp
   3600 using ::testing::MakeMatcher;
   3601 using ::testing::Matcher;
   3602 using ::testing::MatcherInterface;
   3603 using ::testing::MatchResultListener;
   3604 
   3605 class DivisibleBy7Matcher : public MatcherInterface<int> {
   3606  public:
   3607   bool MatchAndExplain(int n,
   3608                        MatchResultListener* /* listener */) const override {
   3609     return (n % 7) == 0;
   3610   }
   3611 
   3612   void DescribeTo(::std::ostream* os) const override {
   3613     *os << "is divisible by 7";
   3614   }
   3615 
   3616   void DescribeNegationTo(::std::ostream* os) const override {
   3617     *os << "is not divisible by 7";
   3618   }
   3619 };
   3620 
   3621 Matcher<int> DivisibleBy7() {
   3622   return MakeMatcher(new DivisibleBy7Matcher);
   3623 }
   3624 
   3625 ...
   3626   EXPECT_CALL(foo, Bar(DivisibleBy7()));
   3627 ```
   3628 
   3629 You may improve the matcher message by streaming additional information to the
   3630 `listener` argument in `MatchAndExplain()`:
   3631 
   3632 ```cpp
   3633 class DivisibleBy7Matcher : public MatcherInterface<int> {
   3634  public:
   3635   bool MatchAndExplain(int n,
   3636                        MatchResultListener* listener) const override {
   3637     const int remainder = n % 7;
   3638     if (remainder != 0) {
   3639       *listener << "the remainder is " << remainder;
   3640     }
   3641     return remainder == 0;
   3642   }
   3643   ...
   3644 };
   3645 ```
   3646 
   3647 Then, `EXPECT_THAT(x, DivisibleBy7());` may generate a message like this:
   3648 
   3649 ```shell
   3650 Value of: x
   3651 Expected: is divisible by 7
   3652   Actual: 23 (the remainder is 2)
   3653 ```
   3654 
   3655 ### Writing New Polymorphic Matchers
   3656 
   3657 You've learned how to write your own matchers in the previous recipe. Just one
   3658 problem: a matcher created using `MakeMatcher()` only works for one particular
   3659 type of arguments. If you want a *polymorphic* matcher that works with arguments
   3660 of several types (for instance, `Eq(x)` can be used to match a *`value`* as long
   3661 as `value == x` compiles -- *`value`* and `x` don't have to share the same
   3662 type), you can learn the trick from `testing/base/public/gmock-matchers.h` but
   3663 it's a bit involved.
   3664 
   3665 Fortunately, most of the time you can define a polymorphic matcher easily with
   3666 the help of `MakePolymorphicMatcher()`. Here's how you can define `NotNull()` as
   3667 an example:
   3668 
   3669 ```cpp
   3670 using ::testing::MakePolymorphicMatcher;
   3671 using ::testing::MatchResultListener;
   3672 using ::testing::PolymorphicMatcher;
   3673 
   3674 class NotNullMatcher {
   3675  public:
   3676   // To implement a polymorphic matcher, first define a COPYABLE class
   3677   // that has three members MatchAndExplain(), DescribeTo(), and
   3678   // DescribeNegationTo(), like the following.
   3679 
   3680   // In this example, we want to use NotNull() with any pointer, so
   3681   // MatchAndExplain() accepts a pointer of any type as its first argument.
   3682   // In general, you can define MatchAndExplain() as an ordinary method or
   3683   // a method template, or even overload it.
   3684   template <typename T>
   3685   bool MatchAndExplain(T* p,
   3686                        MatchResultListener* /* listener */) const {
   3687     return p != NULL;
   3688   }
   3689 
   3690   // Describes the property of a value matching this matcher.
   3691   void DescribeTo(std::ostream* os) const { *os << "is not NULL"; }
   3692 
   3693   // Describes the property of a value NOT matching this matcher.
   3694   void DescribeNegationTo(std::ostream* os) const { *os << "is NULL"; }
   3695 };
   3696 
   3697 // To construct a polymorphic matcher, pass an instance of the class
   3698 // to MakePolymorphicMatcher().  Note the return type.
   3699 PolymorphicMatcher<NotNullMatcher> NotNull() {
   3700   return MakePolymorphicMatcher(NotNullMatcher());
   3701 }
   3702 
   3703 ...
   3704 
   3705   EXPECT_CALL(foo, Bar(NotNull()));  // The argument must be a non-NULL pointer.
   3706 ```
   3707 
   3708 **Note:** Your polymorphic matcher class does **not** need to inherit from
   3709 `MatcherInterface` or any other class, and its methods do **not** need to be
   3710 virtual.
   3711 
   3712 Like in a monomorphic matcher, you may explain the match result by streaming
   3713 additional information to the `listener` argument in `MatchAndExplain()`.
   3714 
   3715 ### Writing New Cardinalities
   3716 
   3717 A cardinality is used in `Times()` to tell gMock how many times you expect a
   3718 call to occur. It doesn't have to be exact. For example, you can say
   3719 `AtLeast(5)` or `Between(2, 4)`.
   3720 
   3721 If the [built-in set](cheat_sheet.md#CardinalityList) of cardinalities doesn't
   3722 suit you, you are free to define your own by implementing the following
   3723 interface (in namespace `testing`):
   3724 
   3725 ```cpp
   3726 class CardinalityInterface {
   3727  public:
   3728   virtual ~CardinalityInterface();
   3729 
   3730   // Returns true if and only if call_count calls will satisfy this cardinality.
   3731   virtual bool IsSatisfiedByCallCount(int call_count) const = 0;
   3732 
   3733   // Returns true if and only if call_count calls will saturate this
   3734   // cardinality.
   3735   virtual bool IsSaturatedByCallCount(int call_count) const = 0;
   3736 
   3737   // Describes self to an ostream.
   3738   virtual void DescribeTo(std::ostream* os) const = 0;
   3739 };
   3740 ```
   3741 
   3742 For example, to specify that a call must occur even number of times, you can
   3743 write
   3744 
   3745 ```cpp
   3746 using ::testing::Cardinality;
   3747 using ::testing::CardinalityInterface;
   3748 using ::testing::MakeCardinality;
   3749 
   3750 class EvenNumberCardinality : public CardinalityInterface {
   3751  public:
   3752   bool IsSatisfiedByCallCount(int call_count) const override {
   3753     return (call_count % 2) == 0;
   3754   }
   3755 
   3756   bool IsSaturatedByCallCount(int call_count) const override {
   3757     return false;
   3758   }
   3759 
   3760   void DescribeTo(std::ostream* os) const {
   3761     *os << "called even number of times";
   3762   }
   3763 };
   3764 
   3765 Cardinality EvenNumber() {
   3766   return MakeCardinality(new EvenNumberCardinality);
   3767 }
   3768 
   3769 ...
   3770   EXPECT_CALL(foo, Bar(3))
   3771       .Times(EvenNumber());
   3772 ```
   3773 
   3774 ### Writing New Actions Quickly {#QuickNewActions}
   3775 
   3776 If the built-in actions don't work for you, you can easily define your own one.
   3777 Just define a functor class with a (possibly templated) call operator, matching
   3778 the signature of your action.
   3779 
   3780 ```cpp
   3781 struct Increment {
   3782   template <typename T>
   3783   T operator()(T* arg) {
   3784     return ++(*arg);
   3785   }
   3786 }
   3787 ```
   3788 
   3789 The same approach works with stateful functors (or any callable, really):
   3790 
   3791 ```
   3792 struct MultiplyBy {
   3793   template <typename T>
   3794   T operator()(T arg) { return arg * multiplier; }
   3795 
   3796   int multiplier;
   3797 }
   3798 
   3799 // Then use:
   3800 // EXPECT_CALL(...).WillOnce(MultiplyBy{7});
   3801 ```
   3802 
   3803 #### Legacy macro-based Actions
   3804 
   3805 Before C++11, the functor-based actions were not supported; the old way of
   3806 writing actions was through a set of `ACTION*` macros. We suggest to avoid them
   3807 in new code; they hide a lot of logic behind the macro, potentially leading to
   3808 harder-to-understand compiler errors. Nevertheless, we cover them here for
   3809 completeness.
   3810 
   3811 By writing
   3812 
   3813 ```cpp
   3814 ACTION(name) { statements; }
   3815 ```
   3816 
   3817 in a namespace scope (i.e. not inside a class or function), you will define an
   3818 action with the given name that executes the statements. The value returned by
   3819 `statements` will be used as the return value of the action. Inside the
   3820 statements, you can refer to the K-th (0-based) argument of the mock function as
   3821 `argK`. For example:
   3822 
   3823 ```cpp
   3824 ACTION(IncrementArg1) { return ++(*arg1); }
   3825 ```
   3826 
   3827 allows you to write
   3828 
   3829 ```cpp
   3830 ... WillOnce(IncrementArg1());
   3831 ```
   3832 
   3833 Note that you don't need to specify the types of the mock function arguments.
   3834 Rest assured that your code is type-safe though: you'll get a compiler error if
   3835 `*arg1` doesn't support the `++` operator, or if the type of `++(*arg1)` isn't
   3836 compatible with the mock function's return type.
   3837 
   3838 Another example:
   3839 
   3840 ```cpp
   3841 ACTION(Foo) {
   3842   (*arg2)(5);
   3843   Blah();
   3844   *arg1 = 0;
   3845   return arg0;
   3846 }
   3847 ```
   3848 
   3849 defines an action `Foo()` that invokes argument #2 (a function pointer) with 5,
   3850 calls function `Blah()`, sets the value pointed to by argument #1 to 0, and
   3851 returns argument #0.
   3852 
   3853 For more convenience and flexibility, you can also use the following pre-defined
   3854 symbols in the body of `ACTION`:
   3855 
   3856 `argK_type`     | The type of the K-th (0-based) argument of the mock function
   3857 :-------------- | :-----------------------------------------------------------
   3858 `args`          | All arguments of the mock function as a tuple
   3859 `args_type`     | The type of all arguments of the mock function as a tuple
   3860 `return_type`   | The return type of the mock function
   3861 `function_type` | The type of the mock function
   3862 
   3863 For example, when using an `ACTION` as a stub action for mock function:
   3864 
   3865 ```cpp
   3866 int DoSomething(bool flag, int* ptr);
   3867 ```
   3868 
   3869 we have:
   3870 
   3871 Pre-defined Symbol | Is Bound To
   3872 ------------------ | ---------------------------------
   3873 `arg0`             | the value of `flag`
   3874 `arg0_type`        | the type `bool`
   3875 `arg1`             | the value of `ptr`
   3876 `arg1_type`        | the type `int*`
   3877 `args`             | the tuple `(flag, ptr)`
   3878 `args_type`        | the type `std::tuple<bool, int*>`
   3879 `return_type`      | the type `int`
   3880 `function_type`    | the type `int(bool, int*)`
   3881 
   3882 #### Legacy macro-based parameterized Actions
   3883 
   3884 Sometimes you'll want to parameterize an action you define. For that we have
   3885 another macro
   3886 
   3887 ```cpp
   3888 ACTION_P(name, param) { statements; }
   3889 ```
   3890 
   3891 For example,
   3892 
   3893 ```cpp
   3894 ACTION_P(Add, n) { return arg0 + n; }
   3895 ```
   3896 
   3897 will allow you to write
   3898 
   3899 ```cpp
   3900 // Returns argument #0 + 5.
   3901 ... WillOnce(Add(5));
   3902 ```
   3903 
   3904 For convenience, we use the term *arguments* for the values used to invoke the
   3905 mock function, and the term *parameters* for the values used to instantiate an
   3906 action.
   3907 
   3908 Note that you don't need to provide the type of the parameter either. Suppose
   3909 the parameter is named `param`, you can also use the gMock-defined symbol
   3910 `param_type` to refer to the type of the parameter as inferred by the compiler.
   3911 For example, in the body of `ACTION_P(Add, n)` above, you can write `n_type` for
   3912 the type of `n`.
   3913 
   3914 gMock also provides `ACTION_P2`, `ACTION_P3`, and etc to support multi-parameter
   3915 actions. For example,
   3916 
   3917 ```cpp
   3918 ACTION_P2(ReturnDistanceTo, x, y) {
   3919   double dx = arg0 - x;
   3920   double dy = arg1 - y;
   3921   return sqrt(dx*dx + dy*dy);
   3922 }
   3923 ```
   3924 
   3925 lets you write
   3926 
   3927 ```cpp
   3928 ... WillOnce(ReturnDistanceTo(5.0, 26.5));
   3929 ```
   3930 
   3931 You can view `ACTION` as a degenerated parameterized action where the number of
   3932 parameters is 0.
   3933 
   3934 You can also easily define actions overloaded on the number of parameters:
   3935 
   3936 ```cpp
   3937 ACTION_P(Plus, a) { ... }
   3938 ACTION_P2(Plus, a, b) { ... }
   3939 ```
   3940 
   3941 ### Restricting the Type of an Argument or Parameter in an ACTION
   3942 
   3943 For maximum brevity and reusability, the `ACTION*` macros don't ask you to
   3944 provide the types of the mock function arguments and the action parameters.
   3945 Instead, we let the compiler infer the types for us.
   3946 
   3947 Sometimes, however, we may want to be more explicit about the types. There are
   3948 several tricks to do that. For example:
   3949 
   3950 ```cpp
   3951 ACTION(Foo) {
   3952   // Makes sure arg0 can be converted to int.
   3953   int n = arg0;
   3954   ... use n instead of arg0 here ...
   3955 }
   3956 
   3957 ACTION_P(Bar, param) {
   3958   // Makes sure the type of arg1 is const char*.
   3959   ::testing::StaticAssertTypeEq<const char*, arg1_type>();
   3960 
   3961   // Makes sure param can be converted to bool.
   3962   bool flag = param;
   3963 }
   3964 ```
   3965 
   3966 where `StaticAssertTypeEq` is a compile-time assertion in googletest that
   3967 verifies two types are the same.
   3968 
   3969 ### Writing New Action Templates Quickly
   3970 
   3971 Sometimes you want to give an action explicit template parameters that cannot be
   3972 inferred from its value parameters. `ACTION_TEMPLATE()` supports that and can be
   3973 viewed as an extension to `ACTION()` and `ACTION_P*()`.
   3974 
   3975 The syntax:
   3976 
   3977 ```cpp
   3978 ACTION_TEMPLATE(ActionName,
   3979                 HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m),
   3980                 AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; }
   3981 ```
   3982 
   3983 defines an action template that takes *m* explicit template parameters and *n*
   3984 value parameters, where *m* is in [1, 10] and *n* is in [0, 10]. `name_i` is the
   3985 name of the *i*-th template parameter, and `kind_i` specifies whether it's a
   3986 `typename`, an integral constant, or a template. `p_i` is the name of the *i*-th
   3987 value parameter.
   3988 
   3989 Example:
   3990 
   3991 ```cpp
   3992 // DuplicateArg<k, T>(output) converts the k-th argument of the mock
   3993 // function to type T and copies it to *output.
   3994 ACTION_TEMPLATE(DuplicateArg,
   3995                 // Note the comma between int and k:
   3996                 HAS_2_TEMPLATE_PARAMS(int, k, typename, T),
   3997                 AND_1_VALUE_PARAMS(output)) {
   3998   *output = T(::std::get<k>(args));
   3999 }
   4000 ```
   4001 
   4002 To create an instance of an action template, write:
   4003 
   4004 ```cpp
   4005 ActionName<t1, ..., t_m>(v1, ..., v_n)
   4006 ```
   4007 
   4008 where the `t`s are the template arguments and the `v`s are the value arguments.
   4009 The value argument types are inferred by the compiler. For example:
   4010 
   4011 ```cpp
   4012 using ::testing::_;
   4013 ...
   4014   int n;
   4015   EXPECT_CALL(mock, Foo).WillOnce(DuplicateArg<1, unsigned char>(&n));
   4016 ```
   4017 
   4018 If you want to explicitly specify the value argument types, you can provide
   4019 additional template arguments:
   4020 
   4021 ```cpp
   4022 ActionName<t1, ..., t_m, u1, ..., u_k>(v1, ..., v_n)
   4023 ```
   4024 
   4025 where `u_i` is the desired type of `v_i`.
   4026 
   4027 `ACTION_TEMPLATE` and `ACTION`/`ACTION_P*` can be overloaded on the number of
   4028 value parameters, but not on the number of template parameters. Without the
   4029 restriction, the meaning of the following is unclear:
   4030 
   4031 ```cpp
   4032   OverloadedAction<int, bool>(x);
   4033 ```
   4034 
   4035 Are we using a single-template-parameter action where `bool` refers to the type
   4036 of `x`, or a two-template-parameter action where the compiler is asked to infer
   4037 the type of `x`?
   4038 
   4039 ### Using the ACTION Object's Type
   4040 
   4041 If you are writing a function that returns an `ACTION` object, you'll need to
   4042 know its type. The type depends on the macro used to define the action and the
   4043 parameter types. The rule is relatively simple:
   4044 
   4045 | Given Definition              | Expression          | Has Type              |
   4046 | ----------------------------- | ------------------- | --------------------- |
   4047 | `ACTION(Foo)`                 | `Foo()`             | `FooAction`           |
   4048 | `ACTION_TEMPLATE(Foo,`        | `Foo<t1, ...,       | `FooAction<t1, ...,   |
   4049 : `HAS_m_TEMPLATE_PARAMS(...),` : t_m>()`             : t_m>`                 :
   4050 : `AND_0_VALUE_PARAMS())`       :                     :                       :
   4051 | `ACTION_P(Bar, param)`        | `Bar(int_value)`    | `BarActionP<int>`     |
   4052 | `ACTION_TEMPLATE(Bar,`        | `Bar<t1, ..., t_m>` | `FooActionP<t1, ...,  |
   4053 : `HAS_m_TEMPLATE_PARAMS(...),` : `(int_value)`       : t_m, int>`            :
   4054 : `AND_1_VALUE_PARAMS(p1))`     :                     :                       :
   4055 | `ACTION_P2(Baz, p1, p2)`      | `Baz(bool_value,`   | `BazActionP2<bool,    |
   4056 :                               : `int_value)`        : int>`                 :
   4057 | `ACTION_TEMPLATE(Baz,`        | `Baz<t1, ..., t_m>` | `FooActionP2<t1, ..., |
   4058 : `HAS_m_TEMPLATE_PARAMS(...),` : `(bool_value,`      : t_m,` `bool, int>`    :
   4059 : `AND_2_VALUE_PARAMS(p1, p2))` : `int_value)`        :                       :
   4060 | ...                           | ...                 | ...                   |
   4061 
   4062 Note that we have to pick different suffixes (`Action`, `ActionP`, `ActionP2`,
   4063 and etc) for actions with different numbers of value parameters, or the action
   4064 definitions cannot be overloaded on the number of them.
   4065 
   4066 ### Writing New Monomorphic Actions {#NewMonoActions}
   4067 
   4068 While the `ACTION*` macros are very convenient, sometimes they are
   4069 inappropriate. For example, despite the tricks shown in the previous recipes,
   4070 they don't let you directly specify the types of the mock function arguments and
   4071 the action parameters, which in general leads to unoptimized compiler error
   4072 messages that can baffle unfamiliar users. They also don't allow overloading
   4073 actions based on parameter types without jumping through some hoops.
   4074 
   4075 An alternative to the `ACTION*` macros is to implement
   4076 `::testing::ActionInterface<F>`, where `F` is the type of the mock function in
   4077 which the action will be used. For example:
   4078 
   4079 ```cpp
   4080 template <typename F>
   4081 class ActionInterface {
   4082  public:
   4083   virtual ~ActionInterface();
   4084 
   4085   // Performs the action.  Result is the return type of function type
   4086   // F, and ArgumentTuple is the tuple of arguments of F.
   4087   //
   4088 
   4089   // For example, if F is int(bool, const string&), then Result would
   4090   // be int, and ArgumentTuple would be ::std::tuple<bool, const string&>.
   4091   virtual Result Perform(const ArgumentTuple& args) = 0;
   4092 };
   4093 ```
   4094 
   4095 ```cpp
   4096 using ::testing::_;
   4097 using ::testing::Action;
   4098 using ::testing::ActionInterface;
   4099 using ::testing::MakeAction;
   4100 
   4101 typedef int IncrementMethod(int*);
   4102 
   4103 class IncrementArgumentAction : public ActionInterface<IncrementMethod> {
   4104  public:
   4105   int Perform(const ::std::tuple<int*>& args) override {
   4106     int* p = ::std::get<0>(args);  // Grabs the first argument.
   4107     return *p++;
   4108   }
   4109 };
   4110 
   4111 Action<IncrementMethod> IncrementArgument() {
   4112   return MakeAction(new IncrementArgumentAction);
   4113 }
   4114 
   4115 ...
   4116   EXPECT_CALL(foo, Baz(_))
   4117       .WillOnce(IncrementArgument());
   4118 
   4119   int n = 5;
   4120   foo.Baz(&n);  // Should return 5 and change n to 6.
   4121 ```
   4122 
   4123 ### Writing New Polymorphic Actions {#NewPolyActions}
   4124 
   4125 The previous recipe showed you how to define your own action. This is all good,
   4126 except that you need to know the type of the function in which the action will
   4127 be used. Sometimes that can be a problem. For example, if you want to use the
   4128 action in functions with *different* types (e.g. like `Return()` and
   4129 `SetArgPointee()`).
   4130 
   4131 If an action can be used in several types of mock functions, we say it's
   4132 *polymorphic*. The `MakePolymorphicAction()` function template makes it easy to
   4133 define such an action:
   4134 
   4135 ```cpp
   4136 namespace testing {
   4137 template <typename Impl>
   4138 PolymorphicAction<Impl> MakePolymorphicAction(const Impl& impl);
   4139 }  // namespace testing
   4140 ```
   4141 
   4142 As an example, let's define an action that returns the second argument in the
   4143 mock function's argument list. The first step is to define an implementation
   4144 class:
   4145 
   4146 ```cpp
   4147 class ReturnSecondArgumentAction {
   4148  public:
   4149   template <typename Result, typename ArgumentTuple>
   4150   Result Perform(const ArgumentTuple& args) const {
   4151     // To get the i-th (0-based) argument, use ::std::get(args).
   4152     return ::std::get<1>(args);
   4153   }
   4154 };
   4155 ```
   4156 
   4157 This implementation class does *not* need to inherit from any particular class.
   4158 What matters is that it must have a `Perform()` method template. This method
   4159 template takes the mock function's arguments as a tuple in a **single**
   4160 argument, and returns the result of the action. It can be either `const` or not,
   4161 but must be invokable with exactly one template argument, which is the result
   4162 type. In other words, you must be able to call `Perform<R>(args)` where `R` is
   4163 the mock function's return type and `args` is its arguments in a tuple.
   4164 
   4165 Next, we use `MakePolymorphicAction()` to turn an instance of the implementation
   4166 class into the polymorphic action we need. It will be convenient to have a
   4167 wrapper for this:
   4168 
   4169 ```cpp
   4170 using ::testing::MakePolymorphicAction;
   4171 using ::testing::PolymorphicAction;
   4172 
   4173 PolymorphicAction<ReturnSecondArgumentAction> ReturnSecondArgument() {
   4174   return MakePolymorphicAction(ReturnSecondArgumentAction());
   4175 }
   4176 ```
   4177 
   4178 Now, you can use this polymorphic action the same way you use the built-in ones:
   4179 
   4180 ```cpp
   4181 using ::testing::_;
   4182 
   4183 class MockFoo : public Foo {
   4184  public:
   4185   MOCK_METHOD(int, DoThis, (bool flag, int n), (override));
   4186   MOCK_METHOD(string, DoThat, (int x, const char* str1, const char* str2),
   4187               (override));
   4188 };
   4189 
   4190   ...
   4191   MockFoo foo;
   4192   EXPECT_CALL(foo, DoThis).WillOnce(ReturnSecondArgument());
   4193   EXPECT_CALL(foo, DoThat).WillOnce(ReturnSecondArgument());
   4194   ...
   4195   foo.DoThis(true, 5);  // Will return 5.
   4196   foo.DoThat(1, "Hi", "Bye");  // Will return "Hi".
   4197 ```
   4198 
   4199 ### Teaching gMock How to Print Your Values
   4200 
   4201 When an uninteresting or unexpected call occurs, gMock prints the argument
   4202 values and the stack trace to help you debug. Assertion macros like
   4203 `EXPECT_THAT` and `EXPECT_EQ` also print the values in question when the
   4204 assertion fails. gMock and googletest do this using googletest's user-extensible
   4205 value printer.
   4206 
   4207 This printer knows how to print built-in C++ types, native arrays, STL
   4208 containers, and any type that supports the `<<` operator. For other types, it
   4209 prints the raw bytes in the value and hopes that you the user can figure it out.
   4210 [googletest's advanced guide](../../googletest/docs/advanced.md#teaching-googletest-how-to-print-your-values)
   4211 explains how to extend the printer to do a better job at printing your
   4212 particular type than to dump the bytes.
   4213 
   4214 ## Useful Mocks Created Using gMock
   4215 
   4216 <!--#include file="includes/g3_testing_LOGs.md"-->
   4217 <!--#include file="includes/g3_mock_callbacks.md"-->
   4218 
   4219 ### Mock std::function {#MockFunction}
   4220 
   4221 `std::function` is a general function type introduced in C++11. It is a
   4222 preferred way of passing callbacks to new interfaces. Functions are copiable,
   4223 and are not usually passed around by pointer, which makes them tricky to mock.
   4224 But fear not - `MockFunction` can help you with that.
   4225 
   4226 `MockFunction<R(T1, ..., Tn)>` has a mock method `Call()` with the signature:
   4227 
   4228 ```cpp
   4229   R Call(T1, ..., Tn);
   4230 ```
   4231 
   4232 It also has a `AsStdFunction()` method, which creates a `std::function` proxy
   4233 forwarding to Call:
   4234 
   4235 ```cpp
   4236   std::function<R(T1, ..., Tn)> AsStdFunction();
   4237 ```
   4238 
   4239 To use `MockFunction`, first create `MockFunction` object and set up
   4240 expectations on its `Call` method. Then pass proxy obtained from
   4241 `AsStdFunction()` to the code you are testing. For example:
   4242 
   4243 ```cpp
   4244 TEST(FooTest, RunsCallbackWithBarArgument) {
   4245   // 1. Create a mock object.
   4246   MockFunction<int(string)> mock_function;
   4247 
   4248   // 2. Set expectations on Call() method.
   4249   EXPECT_CALL(mock_function, Call("bar")).WillOnce(Return(1));
   4250 
   4251   // 3. Exercise code that uses std::function.
   4252   Foo(mock_function.AsStdFunction());
   4253   // Foo's signature can be either of:
   4254   // void Foo(const std::function<int(string)>& fun);
   4255   // void Foo(std::function<int(string)> fun);
   4256 
   4257   // 4. All expectations will be verified when mock_function
   4258   //     goes out of scope and is destroyed.
   4259 }
   4260 ```
   4261 
   4262 Remember that function objects created with `AsStdFunction()` are just
   4263 forwarders. If you create multiple of them, they will share the same set of
   4264 expectations.
   4265 
   4266 Although `std::function` supports unlimited number of arguments, `MockFunction`
   4267 implementation is limited to ten. If you ever hit that limit... well, your
   4268 callback has bigger problems than being mockable. :-)
   4269 
   4270 <!-- GOOGLETEST_CM0034 DO NOT DELETE -->