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