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