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