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