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