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