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