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