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