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 1140Since matchers are basically predicates that also know how to describe 1141themselves, there is a way to take advantage of them in googletest assertions. 1142It's called `ASSERT_THAT` and `EXPECT_THAT`: 1143 1144```cpp 1145 ASSERT_THAT(value, matcher); // Asserts that value matches matcher. 1146 EXPECT_THAT(value, matcher); // The non-fatal version. 1147``` 1148 1149For example, in a googletest test you can write: 1150 1151```cpp 1152#include "gmock/gmock.h" 1153 1154using ::testing::AllOf; 1155using ::testing::Ge; 1156using ::testing::Le; 1157using ::testing::MatchesRegex; 1158using ::testing::StartsWith; 1159 1160... 1161 EXPECT_THAT(Foo(), StartsWith("Hello")); 1162 EXPECT_THAT(Bar(), MatchesRegex("Line \\d+")); 1163 ASSERT_THAT(Baz(), AllOf(Ge(5), Le(10))); 1164``` 1165 1166which (as you can probably guess) executes `Foo()`, `Bar()`, and `Baz()`, and 1167verifies that: 1168 1169* `Foo()` returns a string that starts with `"Hello"`. 1170* `Bar()` returns a string that matches regular expression `"Line \\d+"`. 1171* `Baz()` returns a number in the range [5, 10]. 1172 1173The nice thing about these macros is that *they read like English*. They 1174generate informative messages too. For example, if the first `EXPECT_THAT()` 1175above fails, the message will be something like: 1176 1177```cpp 1178Value of: Foo() 1179 Actual: "Hi, world!" 1180Expected: starts with "Hello" 1181``` 1182 1183**Credit:** The idea of `(ASSERT|EXPECT)_THAT` was borrowed from Joe Walnes' 1184Hamcrest project, which adds `assertThat()` to JUnit. 1185 1186### Using Predicates as Matchers 1187 1188gMock provides a set of built-in matchers for matching arguments with expected 1189values—see the [Matchers Reference](reference/matchers.md) for more information. 1190In case you find the built-in set lacking, you can use an arbitrary unary 1191predicate function or functor as a matcher - as long as the predicate accepts a 1192value of the type you want. You do this by wrapping the predicate inside the 1193`Truly()` function, for example: 1194 1195```cpp 1196using ::testing::Truly; 1197 1198int IsEven(int n) { return (n % 2) == 0 ? 1 : 0; } 1199... 1200 // Bar() must be called with an even number. 1201 EXPECT_CALL(foo, Bar(Truly(IsEven))); 1202``` 1203 1204Note that the predicate function / functor doesn't have to return `bool`. It 1205works as long as the return value can be used as the condition in in statement 1206`if (condition) ...`. 1207 1208### Matching Arguments that Are Not Copyable 1209 1210When you do an `EXPECT_CALL(mock_obj, Foo(bar))`, gMock saves away a copy of 1211`bar`. When `Foo()` is called later, gMock compares the argument to `Foo()` with 1212the saved copy of `bar`. This way, you don't need to worry about `bar` being 1213modified or destroyed after the `EXPECT_CALL()` is executed. The same is true 1214when you use matchers like `Eq(bar)`, `Le(bar)`, and so on. 1215 1216But what if `bar` cannot be copied (i.e. has no copy constructor)? You could 1217define your own matcher function or callback and use it with `Truly()`, as the 1218previous couple of recipes have shown. Or, you may be able to get away from it 1219if you can guarantee that `bar` won't be changed after the `EXPECT_CALL()` is 1220executed. Just tell gMock that it should save a reference to `bar`, instead of a 1221copy of it. Here's how: 1222 1223```cpp 1224using ::testing::Eq; 1225using ::testing::Lt; 1226... 1227 // Expects that Foo()'s argument == bar. 1228 EXPECT_CALL(mock_obj, Foo(Eq(std::ref(bar)))); 1229 1230 // Expects that Foo()'s argument < bar. 1231 EXPECT_CALL(mock_obj, Foo(Lt(std::ref(bar)))); 1232``` 1233 1234Remember: if you do this, don't change `bar` after the `EXPECT_CALL()`, or the 1235result is undefined. 1236 1237### Validating a Member of an Object 1238 1239Often a mock function takes a reference to object as an argument. When matching 1240the argument, you may not want to compare the entire object against a fixed 1241object, as that may be over-specification. Instead, you may need to validate a 1242certain member variable or the result of a certain getter method of the object. 1243You can do this with `Field()` and `Property()`. More specifically, 1244 1245```cpp 1246Field(&Foo::bar, m) 1247``` 1248 1249is a matcher that matches a `Foo` object whose `bar` member variable satisfies 1250matcher `m`. 1251 1252```cpp 1253Property(&Foo::baz, m) 1254``` 1255 1256is a matcher that matches a `Foo` object whose `baz()` method returns a value 1257that satisfies matcher `m`. 1258 1259For example: 1260 1261| Expression | Description | 1262| :--------------------------- | :--------------------------------------- | 1263| `Field(&Foo::number, Ge(3))` | Matches `x` where `x.number >= 3`. | 1264| `Property(&Foo::name, StartsWith("John "))` | Matches `x` where `x.name()` starts with `"John "`. | 1265 1266Note that in `Property(&Foo::baz, ...)`, method `baz()` must take no argument 1267and be declared as `const`. Don't use `Property()` against member functions that 1268you do not own, because taking addresses of functions is fragile and generally 1269not part of the contract of the function. 1270 1271`Field()` and `Property()` can also match plain pointers to objects. For 1272instance, 1273 1274```cpp 1275using ::testing::Field; 1276using ::testing::Ge; 1277... 1278Field(&Foo::number, Ge(3)) 1279``` 1280 1281matches a plain pointer `p` where `p->number >= 3`. If `p` is `NULL`, the match 1282will always fail regardless of the inner matcher. 1283 1284What if you want to validate more than one members at the same time? Remember 1285that there are [`AllOf()` and `AllOfArray()`](#CombiningMatchers). 1286 1287Finally `Field()` and `Property()` provide overloads that take the field or 1288property names as the first argument to include it in the error message. This 1289can be useful when creating combined matchers. 1290 1291```cpp 1292using ::testing::AllOf; 1293using ::testing::Field; 1294using ::testing::Matcher; 1295using ::testing::SafeMatcherCast; 1296 1297Matcher<Foo> IsFoo(const Foo& foo) { 1298 return AllOf(Field("some_field", &Foo::some_field, foo.some_field), 1299 Field("other_field", &Foo::other_field, foo.other_field), 1300 Field("last_field", &Foo::last_field, foo.last_field)); 1301} 1302``` 1303 1304### Validating the Value Pointed to by a Pointer Argument 1305 1306C++ functions often take pointers as arguments. You can use matchers like 1307`IsNull()`, `NotNull()`, and other comparison matchers to match a pointer, but 1308what if you want to make sure the value *pointed to* by the pointer, instead of 1309the pointer itself, has a certain property? Well, you can use the `Pointee(m)` 1310matcher. 1311 1312`Pointee(m)` matches a pointer if and only if `m` matches the value the pointer 1313points to. For example: 1314 1315```cpp 1316using ::testing::Ge; 1317using ::testing::Pointee; 1318... 1319 EXPECT_CALL(foo, Bar(Pointee(Ge(3)))); 1320``` 1321 1322expects `foo.Bar()` to be called with a pointer that points to a value greater 1323than or equal to 3. 1324 1325One nice thing about `Pointee()` is that it treats a `NULL` pointer as a match 1326failure, so you can write `Pointee(m)` instead of 1327 1328```cpp 1329using ::testing::AllOf; 1330using ::testing::NotNull; 1331using ::testing::Pointee; 1332... 1333 AllOf(NotNull(), Pointee(m)) 1334``` 1335 1336without worrying that a `NULL` pointer will crash your test. 1337 1338Also, did we tell you that `Pointee()` works with both raw pointers **and** 1339smart pointers (`std::unique_ptr`, `std::shared_ptr`, etc)? 1340 1341What if you have a pointer to pointer? You guessed it - you can use nested 1342`Pointee()` to probe deeper inside the value. For example, 1343`Pointee(Pointee(Lt(3)))` matches a pointer that points to a pointer that points 1344to a number less than 3 (what a mouthful...). 1345 1346### Testing a Certain Property of an Object 1347 1348Sometimes you want to specify that an object argument has a certain property, 1349but there is no existing matcher that does this. If you want good error 1350messages, you should [define a matcher](#NewMatchers). If you want to do it 1351quick and dirty, you could get away with writing an ordinary function. 1352 1353Let's say you have a mock function that takes an object of type `Foo`, which has 1354an `int bar()` method and an `int baz()` method, and you want to constrain that 1355the argument's `bar()` value plus its `baz()` value is a given number. Here's 1356how you can define a matcher to do it: 1357 1358```cpp 1359using ::testing::Matcher; 1360 1361class BarPlusBazEqMatcher { 1362 public: 1363 explicit BarPlusBazEqMatcher(int expected_sum) 1364 : expected_sum_(expected_sum) {} 1365 1366 bool MatchAndExplain(const Foo& foo, 1367 std::ostream* /* listener */) const { 1368 return (foo.bar() + foo.baz()) == expected_sum_; 1369 } 1370 1371 void DescribeTo(std::ostream& os) const { 1372 os << "bar() + baz() equals " << expected_sum_; 1373 } 1374 1375 void DescribeNegationTo(std::ostream& os) const { 1376 os << "bar() + baz() does not equal " << expected_sum_; 1377 } 1378 private: 1379 const int expected_sum_; 1380}; 1381 1382Matcher<const Foo&> BarPlusBazEq(int expected_sum) { 1383 return BarPlusBazEqMatcher(expected_sum); 1384} 1385 1386... 1387 EXPECT_CALL(..., DoThis(BarPlusBazEq(5)))...; 1388``` 1389 1390### Matching Containers 1391 1392Sometimes an STL container (e.g. list, vector, map, ...) is passed to a mock 1393function and you may want to validate it. Since most STL containers support the 1394`==` operator, you can write `Eq(expected_container)` or simply 1395`expected_container` to match a container exactly. 1396 1397Sometimes, though, you may want to be more flexible (for example, the first 1398element must be an exact match, but the second element can be any positive 1399number, and so on). Also, containers used in tests often have a small number of 1400elements, and having to define the expected container out-of-line is a bit of a 1401hassle. 1402 1403You can use the `ElementsAre()` or `UnorderedElementsAre()` matcher in such 1404cases: 1405 1406```cpp 1407using ::testing::_; 1408using ::testing::ElementsAre; 1409using ::testing::Gt; 1410... 1411 MOCK_METHOD(void, Foo, (const vector<int>& numbers), (override)); 1412... 1413 EXPECT_CALL(mock, Foo(ElementsAre(1, Gt(0), _, 5))); 1414``` 1415 1416The above matcher says that the container must have 4 elements, which must be 1, 1417greater than 0, anything, and 5 respectively. 1418 1419If you instead write: 1420 1421```cpp 1422using ::testing::_; 1423using ::testing::Gt; 1424using ::testing::UnorderedElementsAre; 1425... 1426 MOCK_METHOD(void, Foo, (const vector<int>& numbers), (override)); 1427... 1428 EXPECT_CALL(mock, Foo(UnorderedElementsAre(1, Gt(0), _, 5))); 1429``` 1430 1431It means that the container must have 4 elements, which (under some permutation) 1432must be 1, greater than 0, anything, and 5 respectively. 1433 1434As an alternative you can place the arguments in a C-style array and use 1435`ElementsAreArray()` or `UnorderedElementsAreArray()` instead: 1436 1437```cpp 1438using ::testing::ElementsAreArray; 1439... 1440 // ElementsAreArray accepts an array of element values. 1441 const int expected_vector1[] = {1, 5, 2, 4, ...}; 1442 EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector1))); 1443 1444 // Or, an array of element matchers. 1445 Matcher<int> expected_vector2[] = {1, Gt(2), _, 3, ...}; 1446 EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector2))); 1447``` 1448 1449In case the array needs to be dynamically created (and therefore the array size 1450cannot be inferred by the compiler), you can give `ElementsAreArray()` an 1451additional argument to specify the array size: 1452 1453```cpp 1454using ::testing::ElementsAreArray; 1455... 1456 int* const expected_vector3 = new int[count]; 1457 ... fill expected_vector3 with values ... 1458 EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector3, count))); 1459``` 1460 1461Use `Pair` when comparing maps or other associative containers. 1462 1463{% raw %} 1464 1465```cpp 1466using testing::ElementsAre; 1467using testing::Pair; 1468... 1469 std::map<string, int> m = {{"a", 1}, {"b", 2}, {"c", 3}}; 1470 EXPECT_THAT(m, ElementsAre(Pair("a", 1), Pair("b", 2), Pair("c", 3))); 1471``` 1472 1473{% endraw %} 1474 1475**Tips:** 1476 1477* `ElementsAre*()` can be used to match *any* container that implements the 1478 STL iterator pattern (i.e. it has a `const_iterator` type and supports 1479 `begin()/end()`), not just the ones defined in STL. It will even work with 1480 container types yet to be written - as long as they follows the above 1481 pattern. 1482* You can use nested `ElementsAre*()` to match nested (multi-dimensional) 1483 containers. 1484* If the container is passed by pointer instead of by reference, just write 1485 `Pointee(ElementsAre*(...))`. 1486* The order of elements *matters* for `ElementsAre*()`. If you are using it 1487 with containers whose element order are undefined (e.g. `hash_map`) you 1488 should use `WhenSorted` around `ElementsAre`. 1489 1490### Sharing Matchers 1491 1492Under the hood, a gMock matcher object consists of a pointer to a ref-counted 1493implementation object. Copying matchers is allowed and very efficient, as only 1494the pointer is copied. When the last matcher that references the implementation 1495object dies, the implementation object will be deleted. 1496 1497Therefore, if you have some complex matcher that you want to use again and 1498again, there is no need to build it everytime. Just assign it to a matcher 1499variable and use that variable repeatedly! For example, 1500 1501```cpp 1502using ::testing::AllOf; 1503using ::testing::Gt; 1504using ::testing::Le; 1505using ::testing::Matcher; 1506... 1507 Matcher<int> in_range = AllOf(Gt(5), Le(10)); 1508 ... use in_range as a matcher in multiple EXPECT_CALLs ... 1509``` 1510 1511### Matchers must have no side-effects {#PureMatchers} 1512 1513{: .callout .warning} 1514WARNING: gMock does not guarantee when or how many times a matcher will be 1515invoked. Therefore, all matchers must be *purely functional*: they cannot have 1516any side effects, and the match result must not depend on anything other than 1517the matcher's parameters and the value being matched. 1518 1519This requirement must be satisfied no matter how a matcher is defined (e.g., if 1520it is one of the standard matchers, or a custom matcher). In particular, a 1521matcher can never call a mock function, as that will affect the state of the 1522mock object and gMock. 1523 1524## Setting Expectations 1525 1526### Knowing When to Expect {#UseOnCall} 1527 1528**`ON_CALL`** is likely the *single most under-utilized construct* in gMock. 1529 1530There are basically two constructs for defining the behavior of a mock object: 1531`ON_CALL` and `EXPECT_CALL`. The difference? `ON_CALL` defines what happens when 1532a mock method is called, but <em>doesn't imply any expectation on the method 1533being called</em>. `EXPECT_CALL` not only defines the behavior, but also sets an 1534expectation that <em>the method will be called with the given arguments, for the 1535given number of times</em> (and *in the given order* when you specify the order 1536too). 1537 1538Since `EXPECT_CALL` does more, isn't it better than `ON_CALL`? Not really. Every 1539`EXPECT_CALL` adds a constraint on the behavior of the code under test. Having 1540more constraints than necessary is *baaad* - even worse than not having enough 1541constraints. 1542 1543This may be counter-intuitive. How could tests that verify more be worse than 1544tests that verify less? Isn't verification the whole point of tests? 1545 1546The answer lies in *what* a test should verify. **A good test verifies the 1547contract of the code.** If a test over-specifies, it doesn't leave enough 1548freedom to the implementation. As a result, changing the implementation without 1549breaking the contract (e.g. refactoring and optimization), which should be 1550perfectly fine to do, can break such tests. Then you have to spend time fixing 1551them, only to see them broken again the next time the implementation is changed. 1552 1553Keep in mind that one doesn't have to verify more than one property in one test. 1554In fact, **it's a good style to verify only one thing in one test.** If you do 1555that, a bug will likely break only one or two tests instead of dozens (which 1556case would you rather debug?). If you are also in the habit of giving tests 1557descriptive names that tell what they verify, you can often easily guess what's 1558wrong just from the test log itself. 1559 1560So use `ON_CALL` by default, and only use `EXPECT_CALL` when you actually intend 1561to verify that the call is made. For example, you may have a bunch of `ON_CALL`s 1562in your test fixture to set the common mock behavior shared by all tests in the 1563same group, and write (scarcely) different `EXPECT_CALL`s in different `TEST_F`s 1564to verify different aspects of the code's behavior. Compared with the style 1565where each `TEST` has many `EXPECT_CALL`s, this leads to tests that are more 1566resilient to implementational changes (and thus less likely to require 1567maintenance) and makes the intent of the tests more obvious (so they are easier 1568to maintain when you do need to maintain them). 1569 1570If you are bothered by the "Uninteresting mock function call" message printed 1571when a mock method without an `EXPECT_CALL` is called, you may use a `NiceMock` 1572instead to suppress all such messages for the mock object, or suppress the 1573message for specific methods by adding `EXPECT_CALL(...).Times(AnyNumber())`. DO 1574NOT suppress it by blindly adding an `EXPECT_CALL(...)`, or you'll have a test 1575that's a pain to maintain. 1576 1577### Ignoring Uninteresting Calls 1578 1579If you are not interested in how a mock method is called, just don't say 1580anything about it. In this case, if the method is ever called, gMock will 1581perform its default action to allow the test program to continue. If you are not 1582happy with the default action taken by gMock, you can override it using 1583`DefaultValue<T>::Set()` (described [here](#DefaultValue)) or `ON_CALL()`. 1584 1585Please note that once you expressed interest in a particular mock method (via 1586`EXPECT_CALL()`), all invocations to it must match some expectation. If this 1587function is called but the arguments don't match any `EXPECT_CALL()` statement, 1588it will be an error. 1589 1590### Disallowing Unexpected Calls 1591 1592If a mock method shouldn't be called at all, explicitly say so: 1593 1594```cpp 1595using ::testing::_; 1596... 1597 EXPECT_CALL(foo, Bar(_)) 1598 .Times(0); 1599``` 1600 1601If some calls to the method are allowed, but the rest are not, just list all the 1602expected calls: 1603 1604```cpp 1605using ::testing::AnyNumber; 1606using ::testing::Gt; 1607... 1608 EXPECT_CALL(foo, Bar(5)); 1609 EXPECT_CALL(foo, Bar(Gt(10))) 1610 .Times(AnyNumber()); 1611``` 1612 1613A call to `foo.Bar()` that doesn't match any of the `EXPECT_CALL()` statements 1614will be an error. 1615 1616### Understanding Uninteresting vs Unexpected Calls {#uninteresting-vs-unexpected} 1617 1618*Uninteresting* calls and *unexpected* calls are different concepts in gMock. 1619*Very* different. 1620 1621A call `x.Y(...)` is **uninteresting** if there's *not even a single* 1622`EXPECT_CALL(x, Y(...))` set. In other words, the test isn't interested in the 1623`x.Y()` method at all, as evident in that the test doesn't care to say anything 1624about it. 1625 1626A call `x.Y(...)` is **unexpected** if there are *some* `EXPECT_CALL(x, 1627Y(...))`s set, but none of them matches the call. Put another way, the test is 1628interested in the `x.Y()` method (therefore it explicitly sets some 1629`EXPECT_CALL` to verify how it's called); however, the verification fails as the 1630test doesn't expect this particular call to happen. 1631 1632**An unexpected call is always an error,** as the code under test doesn't behave 1633the way the test expects it to behave. 1634 1635**By default, an uninteresting call is not an error,** as it violates no 1636constraint specified by the test. (gMock's philosophy is that saying nothing 1637means there is no constraint.) However, it leads to a warning, as it *might* 1638indicate a problem (e.g. the test author might have forgotten to specify a 1639constraint). 1640 1641In gMock, `NiceMock` and `StrictMock` can be used to make a mock class "nice" or 1642"strict". How does this affect uninteresting calls and unexpected calls? 1643 1644A **nice mock** suppresses uninteresting call *warnings*. It is less chatty than 1645the default mock, but otherwise is the same. If a test fails with a default 1646mock, it will also fail using a nice mock instead. And vice versa. Don't expect 1647making a mock nice to change the test's result. 1648 1649A **strict mock** turns uninteresting call warnings into errors. So making a 1650mock strict may change the test's result. 1651 1652Let's look at an example: 1653 1654```cpp 1655TEST(...) { 1656 NiceMock<MockDomainRegistry> mock_registry; 1657 EXPECT_CALL(mock_registry, GetDomainOwner("google.com")) 1658 .WillRepeatedly(Return("Larry Page")); 1659 1660 // Use mock_registry in code under test. 1661 ... &mock_registry ... 1662} 1663``` 1664 1665The sole `EXPECT_CALL` here says that all calls to `GetDomainOwner()` must have 1666`"google.com"` as the argument. If `GetDomainOwner("yahoo.com")` is called, it 1667will be an unexpected call, and thus an error. *Having a nice mock doesn't 1668change the severity of an unexpected call.* 1669 1670So how do we tell gMock that `GetDomainOwner()` can be called with some other 1671arguments as well? The standard technique is to add a "catch all" `EXPECT_CALL`: 1672 1673```cpp 1674 EXPECT_CALL(mock_registry, GetDomainOwner(_)) 1675 .Times(AnyNumber()); // catches all other calls to this method. 1676 EXPECT_CALL(mock_registry, GetDomainOwner("google.com")) 1677 .WillRepeatedly(Return("Larry Page")); 1678``` 1679 1680Remember that `_` is the wildcard matcher that matches anything. With this, if 1681`GetDomainOwner("google.com")` is called, it will do what the second 1682`EXPECT_CALL` says; if it is called with a different argument, it will do what 1683the first `EXPECT_CALL` says. 1684 1685Note that the order of the two `EXPECT_CALL`s is important, as a newer 1686`EXPECT_CALL` takes precedence over an older one. 1687 1688For more on uninteresting calls, nice mocks, and strict mocks, read 1689["The Nice, the Strict, and the Naggy"](#NiceStrictNaggy). 1690 1691### Ignoring Uninteresting Arguments {#ParameterlessExpectations} 1692 1693If your test doesn't care about the parameters (it only cares about the number 1694or order of calls), you can often simply omit the parameter list: 1695 1696```cpp 1697 // Expect foo.Bar( ... ) twice with any arguments. 1698 EXPECT_CALL(foo, Bar).Times(2); 1699 1700 // Delegate to the given method whenever the factory is invoked. 1701 ON_CALL(foo_factory, MakeFoo) 1702 .WillByDefault(&BuildFooForTest); 1703``` 1704 1705This functionality is only available when a method is not overloaded; to prevent 1706unexpected behavior it is a compilation error to try to set an expectation on a 1707method where the specific overload is ambiguous. You can work around this by 1708supplying a [simpler mock interface](#SimplerInterfaces) than the mocked class 1709provides. 1710 1711This pattern is also useful when the arguments are interesting, but match logic 1712is substantially complex. You can leave the argument list unspecified and use 1713SaveArg actions to [save the values for later verification](#SaveArgVerify). If 1714you do that, you can easily differentiate calling the method the wrong number of 1715times from calling it with the wrong arguments. 1716 1717### Expecting Ordered Calls {#OrderedCalls} 1718 1719Although an `EXPECT_CALL()` statement defined later takes precedence when gMock 1720tries to match a function call with an expectation, by default calls don't have 1721to happen in the order `EXPECT_CALL()` statements are written. For example, if 1722the arguments match the matchers in the second `EXPECT_CALL()`, but not those in 1723the first and third, then the second expectation will be used. 1724 1725If you would rather have all calls occur in the order of the expectations, put 1726the `EXPECT_CALL()` statements in a block where you define a variable of type 1727`InSequence`: 1728 1729```cpp 1730using ::testing::_; 1731using ::testing::InSequence; 1732 1733 { 1734 InSequence s; 1735 1736 EXPECT_CALL(foo, DoThis(5)); 1737 EXPECT_CALL(bar, DoThat(_)) 1738 .Times(2); 1739 EXPECT_CALL(foo, DoThis(6)); 1740 } 1741``` 1742 1743In this example, we expect a call to `foo.DoThis(5)`, followed by two calls to 1744`bar.DoThat()` where the argument can be anything, which are in turn followed by 1745a call to `foo.DoThis(6)`. If a call occurred out-of-order, gMock will report an 1746error. 1747 1748### Expecting Partially Ordered Calls {#PartialOrder} 1749 1750Sometimes requiring everything to occur in a predetermined order can lead to 1751brittle tests. For example, we may care about `A` occurring before both `B` and 1752`C`, but aren't interested in the relative order of `B` and `C`. In this case, 1753the test should reflect our real intent, instead of being overly constraining. 1754 1755gMock allows you to impose an arbitrary DAG (directed acyclic graph) on the 1756calls. One way to express the DAG is to use the 1757[After](gmock_cheat_sheet.md#AfterClause) clause of `EXPECT_CALL`. 1758 1759Another way is via the `InSequence()` clause (not the same as the `InSequence` 1760class), which we borrowed from jMock 2. It's less flexible than `After()`, but 1761more convenient when you have long chains of sequential calls, as it doesn't 1762require you to come up with different names for the expectations in the chains. 1763Here's how it works: 1764 1765If we view `EXPECT_CALL()` statements as nodes in a graph, and add an edge from 1766node A to node B wherever A must occur before B, we can get a DAG. We use the 1767term "sequence" to mean a directed path in this DAG. Now, if we decompose the 1768DAG into sequences, we just need to know which sequences each `EXPECT_CALL()` 1769belongs to in order to be able to reconstruct the original DAG. 1770 1771So, to specify the partial order on the expectations we need to do two things: 1772first to define some `Sequence` objects, and then for each `EXPECT_CALL()` say 1773which `Sequence` objects it is part of. 1774 1775Expectations in the same sequence must occur in the order they are written. For 1776example, 1777 1778```cpp 1779using ::testing::Sequence; 1780... 1781 Sequence s1, s2; 1782 1783 EXPECT_CALL(foo, A()) 1784 .InSequence(s1, s2); 1785 EXPECT_CALL(bar, B()) 1786 .InSequence(s1); 1787 EXPECT_CALL(bar, C()) 1788 .InSequence(s2); 1789 EXPECT_CALL(foo, D()) 1790 .InSequence(s2); 1791``` 1792 1793specifies the following DAG (where `s1` is `A -> B`, and `s2` is `A -> C -> D`): 1794 1795```text 1796 +---> B 1797 | 1798 A ---| 1799 | 1800 +---> C ---> D 1801``` 1802 1803This means that A must occur before B and C, and C must occur before D. There's 1804no restriction about the order other than these. 1805 1806### Controlling When an Expectation Retires 1807 1808When a mock method is called, gMock only considers expectations that are still 1809active. An expectation is active when created, and becomes inactive (aka 1810*retires*) when a call that has to occur later has occurred. For example, in 1811 1812```cpp 1813using ::testing::_; 1814using ::testing::Sequence; 1815... 1816 Sequence s1, s2; 1817 1818 EXPECT_CALL(log, Log(WARNING, _, "File too large.")) // #1 1819 .Times(AnyNumber()) 1820 .InSequence(s1, s2); 1821 EXPECT_CALL(log, Log(WARNING, _, "Data set is empty.")) // #2 1822 .InSequence(s1); 1823 EXPECT_CALL(log, Log(WARNING, _, "User not found.")) // #3 1824 .InSequence(s2); 1825``` 1826 1827as soon as either #2 or #3 is matched, #1 will retire. If a warning `"File too 1828large."` is logged after this, it will be an error. 1829 1830Note that an expectation doesn't retire automatically when it's saturated. For 1831example, 1832 1833```cpp 1834using ::testing::_; 1835... 1836 EXPECT_CALL(log, Log(WARNING, _, _)); // #1 1837 EXPECT_CALL(log, Log(WARNING, _, "File too large.")); // #2 1838``` 1839 1840says that there will be exactly one warning with the message `"File too 1841large."`. If the second warning contains this message too, #2 will match again 1842and result in an upper-bound-violated error. 1843 1844If this is not what you want, you can ask an expectation to retire as soon as it 1845becomes saturated: 1846 1847```cpp 1848using ::testing::_; 1849... 1850 EXPECT_CALL(log, Log(WARNING, _, _)); // #1 1851 EXPECT_CALL(log, Log(WARNING, _, "File too large.")) // #2 1852 .RetiresOnSaturation(); 1853``` 1854 1855Here #2 can be used only once, so if you have two warnings with the message 1856`"File too large."`, the first will match #2 and the second will match #1 - 1857there will be no error. 1858 1859## Using Actions 1860 1861### Returning References from Mock Methods 1862 1863If a mock function's return type is a reference, you need to use `ReturnRef()` 1864instead of `Return()` to return a result: 1865 1866```cpp 1867using ::testing::ReturnRef; 1868 1869class MockFoo : public Foo { 1870 public: 1871 MOCK_METHOD(Bar&, GetBar, (), (override)); 1872}; 1873... 1874 MockFoo foo; 1875 Bar bar; 1876 EXPECT_CALL(foo, GetBar()) 1877 .WillOnce(ReturnRef(bar)); 1878... 1879``` 1880 1881### Returning Live Values from Mock Methods 1882 1883The `Return(x)` action saves a copy of `x` when the action is created, and 1884always returns the same value whenever it's executed. Sometimes you may want to 1885instead return the *live* value of `x` (i.e. its value at the time when the 1886action is *executed*.). Use either `ReturnRef()` or `ReturnPointee()` for this 1887purpose. 1888 1889If the mock function's return type is a reference, you can do it using 1890`ReturnRef(x)`, as shown in the previous recipe ("Returning References from Mock 1891Methods"). However, gMock doesn't let you use `ReturnRef()` in a mock function 1892whose return type is not a reference, as doing that usually indicates a user 1893error. So, what shall you do? 1894 1895Though you may be tempted, DO NOT use `std::ref()`: 1896 1897```cpp 1898using testing::Return; 1899 1900class MockFoo : public Foo { 1901 public: 1902 MOCK_METHOD(int, GetValue, (), (override)); 1903}; 1904... 1905 int x = 0; 1906 MockFoo foo; 1907 EXPECT_CALL(foo, GetValue()) 1908 .WillRepeatedly(Return(std::ref(x))); // Wrong! 1909 x = 42; 1910 EXPECT_EQ(42, foo.GetValue()); 1911``` 1912 1913Unfortunately, it doesn't work here. The above code will fail with error: 1914 1915```text 1916Value of: foo.GetValue() 1917 Actual: 0 1918Expected: 42 1919``` 1920 1921The reason is that `Return(*value*)` converts `value` to the actual return type 1922of the mock function at the time when the action is *created*, not when it is 1923*executed*. (This behavior was chosen for the action to be safe when `value` is 1924a proxy object that references some temporary objects.) As a result, 1925`std::ref(x)` is converted to an `int` value (instead of a `const int&`) when 1926the expectation is set, and `Return(std::ref(x))` will always return 0. 1927 1928`ReturnPointee(pointer)` was provided to solve this problem specifically. It 1929returns the value pointed to by `pointer` at the time the action is *executed*: 1930 1931```cpp 1932using testing::ReturnPointee; 1933... 1934 int x = 0; 1935 MockFoo foo; 1936 EXPECT_CALL(foo, GetValue()) 1937 .WillRepeatedly(ReturnPointee(&x)); // Note the & here. 1938 x = 42; 1939 EXPECT_EQ(42, foo.GetValue()); // This will succeed now. 1940``` 1941 1942### Combining Actions 1943 1944Want to do more than one thing when a function is called? That's fine. `DoAll()` 1945allow you to do sequence of actions every time. Only the return value of the 1946last action in the sequence will be used. 1947 1948```cpp 1949using ::testing::_; 1950using ::testing::DoAll; 1951 1952class MockFoo : public Foo { 1953 public: 1954 MOCK_METHOD(bool, Bar, (int n), (override)); 1955}; 1956... 1957 EXPECT_CALL(foo, Bar(_)) 1958 .WillOnce(DoAll(action_1, 1959 action_2, 1960 ... 1961 action_n)); 1962``` 1963 1964### Verifying Complex Arguments {#SaveArgVerify} 1965 1966If you want to verify that a method is called with a particular argument but the 1967match criteria is complex, it can be difficult to distinguish between 1968cardinality failures (calling the method the wrong number of times) and argument 1969match failures. Similarly, if you are matching multiple parameters, it may not 1970be easy to distinguishing which argument failed to match. For example: 1971 1972```cpp 1973 // Not ideal: this could fail because of a problem with arg1 or arg2, or maybe 1974 // just the method wasn't called. 1975 EXPECT_CALL(foo, SendValues(_, ElementsAre(1, 4, 4, 7), EqualsProto( ... ))); 1976``` 1977 1978You can instead save the arguments and test them individually: 1979 1980```cpp 1981 EXPECT_CALL(foo, SendValues) 1982 .WillOnce(DoAll(SaveArg<1>(&actual_array), SaveArg<2>(&actual_proto))); 1983 ... run the test 1984 EXPECT_THAT(actual_array, ElementsAre(1, 4, 4, 7)); 1985 EXPECT_THAT(actual_proto, EqualsProto( ... )); 1986``` 1987 1988### Mocking Side Effects {#MockingSideEffects} 1989 1990Sometimes a method exhibits its effect not via returning a value but via side 1991effects. For example, it may change some global state or modify an output 1992argument. To mock side effects, in general you can define your own action by 1993implementing `::testing::ActionInterface`. 1994 1995If all you need to do is to change an output argument, the built-in 1996`SetArgPointee()` action is convenient: 1997 1998```cpp 1999using ::testing::_; 2000using ::testing::SetArgPointee; 2001 2002class MockMutator : public Mutator { 2003 public: 2004 MOCK_METHOD(void, Mutate, (bool mutate, int* value), (override)); 2005 ... 2006} 2007... 2008 MockMutator mutator; 2009 EXPECT_CALL(mutator, Mutate(true, _)) 2010 .WillOnce(SetArgPointee<1>(5)); 2011``` 2012 2013In this example, when `mutator.Mutate()` is called, we will assign 5 to the 2014`int` variable pointed to by argument #1 (0-based). 2015 2016`SetArgPointee()` conveniently makes an internal copy of the value you pass to 2017it, removing the need to keep the value in scope and alive. The implication 2018however is that the value must have a copy constructor and assignment operator. 2019 2020If the mock method also needs to return a value as well, you can chain 2021`SetArgPointee()` with `Return()` using `DoAll()`, remembering to put the 2022`Return()` statement last: 2023 2024```cpp 2025using ::testing::_; 2026using ::testing::Return; 2027using ::testing::SetArgPointee; 2028 2029class MockMutator : public Mutator { 2030 public: 2031 ... 2032 MOCK_METHOD(bool, MutateInt, (int* value), (override)); 2033} 2034... 2035 MockMutator mutator; 2036 EXPECT_CALL(mutator, MutateInt(_)) 2037 .WillOnce(DoAll(SetArgPointee<0>(5), 2038 Return(true))); 2039``` 2040 2041Note, however, that if you use the `ReturnOKWith()` method, it will override the 2042values provided by `SetArgPointee()` in the response parameters of your function 2043call. 2044 2045If the output argument is an array, use the `SetArrayArgument<N>(first, last)` 2046action instead. It copies the elements in source range `[first, last)` to the 2047array pointed to by the `N`-th (0-based) argument: 2048 2049```cpp 2050using ::testing::NotNull; 2051using ::testing::SetArrayArgument; 2052 2053class MockArrayMutator : public ArrayMutator { 2054 public: 2055 MOCK_METHOD(void, Mutate, (int* values, int num_values), (override)); 2056 ... 2057} 2058... 2059 MockArrayMutator mutator; 2060 int values[5] = {1, 2, 3, 4, 5}; 2061 EXPECT_CALL(mutator, Mutate(NotNull(), 5)) 2062 .WillOnce(SetArrayArgument<0>(values, values + 5)); 2063``` 2064 2065This also works when the argument is an output iterator: 2066 2067```cpp 2068using ::testing::_; 2069using ::testing::SetArrayArgument; 2070 2071class MockRolodex : public Rolodex { 2072 public: 2073 MOCK_METHOD(void, GetNames, (std::back_insert_iterator<vector<string>>), 2074 (override)); 2075 ... 2076} 2077... 2078 MockRolodex rolodex; 2079 vector<string> names; 2080 names.push_back("George"); 2081 names.push_back("John"); 2082 names.push_back("Thomas"); 2083 EXPECT_CALL(rolodex, GetNames(_)) 2084 .WillOnce(SetArrayArgument<0>(names.begin(), names.end())); 2085``` 2086 2087### Changing a Mock Object's Behavior Based on the State 2088 2089If you expect a call to change the behavior of a mock object, you can use 2090`::testing::InSequence` to specify different behaviors before and after the 2091call: 2092 2093```cpp 2094using ::testing::InSequence; 2095using ::testing::Return; 2096 2097... 2098 { 2099 InSequence seq; 2100 EXPECT_CALL(my_mock, IsDirty()) 2101 .WillRepeatedly(Return(true)); 2102 EXPECT_CALL(my_mock, Flush()); 2103 EXPECT_CALL(my_mock, IsDirty()) 2104 .WillRepeatedly(Return(false)); 2105 } 2106 my_mock.FlushIfDirty(); 2107``` 2108 2109This makes `my_mock.IsDirty()` return `true` before `my_mock.Flush()` is called 2110and return `false` afterwards. 2111 2112If the behavior change is more complex, you can store the effects in a variable 2113and make a mock method get its return value from that variable: 2114 2115```cpp 2116using ::testing::_; 2117using ::testing::SaveArg; 2118using ::testing::Return; 2119 2120ACTION_P(ReturnPointee, p) { return *p; } 2121... 2122 int previous_value = 0; 2123 EXPECT_CALL(my_mock, GetPrevValue) 2124 .WillRepeatedly(ReturnPointee(&previous_value)); 2125 EXPECT_CALL(my_mock, UpdateValue) 2126 .WillRepeatedly(SaveArg<0>(&previous_value)); 2127 my_mock.DoSomethingToUpdateValue(); 2128``` 2129 2130Here `my_mock.GetPrevValue()` will always return the argument of the last 2131`UpdateValue()` call. 2132 2133### Setting the Default Value for a Return Type {#DefaultValue} 2134 2135If a mock method's return type is a built-in C++ type or pointer, by default it 2136will return 0 when invoked. Also, in C++ 11 and above, a mock method whose 2137return type has a default constructor will return a default-constructed value by 2138default. You only need to specify an action if this default value doesn't work 2139for you. 2140 2141Sometimes, you may want to change this default value, or you may want to specify 2142a default value for types gMock doesn't know about. You can do this using the 2143`::testing::DefaultValue` class template: 2144 2145```cpp 2146using ::testing::DefaultValue; 2147 2148class MockFoo : public Foo { 2149 public: 2150 MOCK_METHOD(Bar, CalculateBar, (), (override)); 2151}; 2152 2153 2154... 2155 Bar default_bar; 2156 // Sets the default return value for type Bar. 2157 DefaultValue<Bar>::Set(default_bar); 2158 2159 MockFoo foo; 2160 2161 // We don't need to specify an action here, as the default 2162 // return value works for us. 2163 EXPECT_CALL(foo, CalculateBar()); 2164 2165 foo.CalculateBar(); // This should return default_bar. 2166 2167 // Unsets the default return value. 2168 DefaultValue<Bar>::Clear(); 2169``` 2170 2171Please note that changing the default value for a type can make your tests hard 2172to understand. We recommend you to use this feature judiciously. For example, 2173you may want to make sure the `Set()` and `Clear()` calls are right next to the 2174code that uses your mock. 2175 2176### Setting the Default Actions for a Mock Method 2177 2178You've learned how to change the default value of a given type. However, this 2179may be too coarse for your purpose: perhaps you have two mock methods with the 2180same return type and you want them to have different behaviors. The `ON_CALL()` 2181macro allows you to customize your mock's behavior at the method level: 2182 2183```cpp 2184using ::testing::_; 2185using ::testing::AnyNumber; 2186using ::testing::Gt; 2187using ::testing::Return; 2188... 2189 ON_CALL(foo, Sign(_)) 2190 .WillByDefault(Return(-1)); 2191 ON_CALL(foo, Sign(0)) 2192 .WillByDefault(Return(0)); 2193 ON_CALL(foo, Sign(Gt(0))) 2194 .WillByDefault(Return(1)); 2195 2196 EXPECT_CALL(foo, Sign(_)) 2197 .Times(AnyNumber()); 2198 2199 foo.Sign(5); // This should return 1. 2200 foo.Sign(-9); // This should return -1. 2201 foo.Sign(0); // This should return 0. 2202``` 2203 2204As you may have guessed, when there are more than one `ON_CALL()` statements, 2205the newer ones in the order take precedence over the older ones. In other words, 2206the **last** one that matches the function arguments will be used. This matching 2207order allows you to set up the common behavior in a mock object's constructor or 2208the test fixture's set-up phase and specialize the mock's behavior later. 2209 2210Note that both `ON_CALL` and `EXPECT_CALL` have the same "later statements take 2211precedence" rule, but they don't interact. That is, `EXPECT_CALL`s have their 2212own precedence order distinct from the `ON_CALL` precedence order. 2213 2214### Using Functions/Methods/Functors/Lambdas as Actions {#FunctionsAsActions} 2215 2216If the built-in actions don't suit you, you can use an existing callable 2217(function, `std::function`, method, functor, lambda) as an action. 2218 2219```cpp 2220using ::testing::_; using ::testing::Invoke; 2221 2222class MockFoo : public Foo { 2223 public: 2224 MOCK_METHOD(int, Sum, (int x, int y), (override)); 2225 MOCK_METHOD(bool, ComplexJob, (int x), (override)); 2226}; 2227 2228int CalculateSum(int x, int y) { return x + y; } 2229int Sum3(int x, int y, int z) { return x + y + z; } 2230 2231class Helper { 2232 public: 2233 bool ComplexJob(int x); 2234}; 2235 2236... 2237 MockFoo foo; 2238 Helper helper; 2239 EXPECT_CALL(foo, Sum(_, _)) 2240 .WillOnce(&CalculateSum) 2241 .WillRepeatedly(Invoke(NewPermanentCallback(Sum3, 1))); 2242 EXPECT_CALL(foo, ComplexJob(_)) 2243 .WillOnce(Invoke(&helper, &Helper::ComplexJob)) 2244 .WillOnce([] { return true; }) 2245 .WillRepeatedly([](int x) { return x > 0; }); 2246 2247 foo.Sum(5, 6); // Invokes CalculateSum(5, 6). 2248 foo.Sum(2, 3); // Invokes Sum3(1, 2, 3). 2249 foo.ComplexJob(10); // Invokes helper.ComplexJob(10). 2250 foo.ComplexJob(-1); // Invokes the inline lambda. 2251``` 2252 2253The only requirement is that the type of the function, etc must be *compatible* 2254with the signature of the mock function, meaning that the latter's arguments (if 2255it takes any) can be implicitly converted to the corresponding arguments of the 2256former, and the former's return type can be implicitly converted to that of the 2257latter. So, you can invoke something whose type is *not* exactly the same as the 2258mock function, as long as it's safe to do so - nice, huh? 2259 2260Note that: 2261 2262* The action takes ownership of the callback and will delete it when the 2263 action itself is destructed. 2264* If the type of a callback is derived from a base callback type `C`, you need 2265 to implicitly cast it to `C` to resolve the overloading, e.g. 2266 2267 ```cpp 2268 using ::testing::Invoke; 2269 ... 2270 ResultCallback<bool>* is_ok = ...; 2271 ... Invoke(is_ok) ...; // This works. 2272 2273 BlockingClosure* done = new BlockingClosure; 2274 ... Invoke(implicit_cast<Closure*>(done)) ...; // The cast is necessary. 2275 ``` 2276 2277### Using Functions with Extra Info as Actions 2278 2279The function or functor you call using `Invoke()` must have the same number of 2280arguments as the mock function you use it for. Sometimes you may have a function 2281that takes more arguments, and you are willing to pass in the extra arguments 2282yourself to fill the gap. You can do this in gMock using callbacks with 2283pre-bound arguments. Here's an example: 2284 2285```cpp 2286using ::testing::Invoke; 2287 2288class MockFoo : public Foo { 2289 public: 2290 MOCK_METHOD(char, DoThis, (int n), (override)); 2291}; 2292 2293char SignOfSum(int x, int y) { 2294 const int sum = x + y; 2295 return (sum > 0) ? '+' : (sum < 0) ? '-' : '0'; 2296} 2297 2298TEST_F(FooTest, Test) { 2299 MockFoo foo; 2300 2301 EXPECT_CALL(foo, DoThis(2)) 2302 .WillOnce(Invoke(NewPermanentCallback(SignOfSum, 5))); 2303 EXPECT_EQ('+', foo.DoThis(2)); // Invokes SignOfSum(5, 2). 2304} 2305``` 2306 2307### Invoking a Function/Method/Functor/Lambda/Callback Without Arguments 2308 2309`Invoke()` passes the mock function's arguments to the function, etc being 2310invoked such that the callee has the full context of the call to work with. If 2311the invoked function is not interested in some or all of the arguments, it can 2312simply ignore them. 2313 2314Yet, a common pattern is that a test author wants to invoke a function without 2315the arguments of the mock function. She could do that using a wrapper function 2316that throws away the arguments before invoking an underlining nullary function. 2317Needless to say, this can be tedious and obscures the intent of the test. 2318 2319There are two solutions to this problem. First, you can pass any callable of 2320zero args as an action. Alternatively, use `InvokeWithoutArgs()`, which is like 2321`Invoke()` except that it doesn't pass the mock function's arguments to the 2322callee. Here's an example of each: 2323 2324```cpp 2325using ::testing::_; 2326using ::testing::InvokeWithoutArgs; 2327 2328class MockFoo : public Foo { 2329 public: 2330 MOCK_METHOD(bool, ComplexJob, (int n), (override)); 2331}; 2332 2333bool Job1() { ... } 2334bool Job2(int n, char c) { ... } 2335 2336... 2337 MockFoo foo; 2338 EXPECT_CALL(foo, ComplexJob(_)) 2339 .WillOnce([] { Job1(); }); 2340 .WillOnce(InvokeWithoutArgs(NewPermanentCallback(Job2, 5, 'a'))); 2341 2342 foo.ComplexJob(10); // Invokes Job1(). 2343 foo.ComplexJob(20); // Invokes Job2(5, 'a'). 2344``` 2345 2346Note that: 2347 2348* The action takes ownership of the callback and will delete it when the 2349 action itself is destructed. 2350* If the type of a callback is derived from a base callback type `C`, you need 2351 to implicitly cast it to `C` to resolve the overloading, e.g. 2352 2353 ```cpp 2354 using ::testing::InvokeWithoutArgs; 2355 ... 2356 ResultCallback<bool>* is_ok = ...; 2357 ... InvokeWithoutArgs(is_ok) ...; // This works. 2358 2359 BlockingClosure* done = ...; 2360 ... InvokeWithoutArgs(implicit_cast<Closure*>(done)) ...; 2361 // The cast is necessary. 2362 ``` 2363 2364### Invoking an Argument of the Mock Function 2365 2366Sometimes a mock function will receive a function pointer, a functor (in other 2367words, a "callable") as an argument, e.g. 2368 2369```cpp 2370class MockFoo : public Foo { 2371 public: 2372 MOCK_METHOD(bool, DoThis, (int n, (ResultCallback1<bool, int>* callback)), 2373 (override)); 2374}; 2375``` 2376 2377and you may want to invoke this callable argument: 2378 2379```cpp 2380using ::testing::_; 2381... 2382 MockFoo foo; 2383 EXPECT_CALL(foo, DoThis(_, _)) 2384 .WillOnce(...); 2385 // Will execute callback->Run(5), where callback is the 2386 // second argument DoThis() receives. 2387``` 2388 2389{: .callout .note} 2390NOTE: The section below is legacy documentation from before C++ had lambdas: 2391 2392Arghh, you need to refer to a mock function argument but C++ has no lambda 2393(yet), so you have to define your own action. :-( Or do you really? 2394 2395Well, gMock has an action to solve *exactly* this problem: 2396 2397```cpp 2398InvokeArgument<N>(arg_1, arg_2, ..., arg_m) 2399``` 2400 2401will invoke the `N`-th (0-based) argument the mock function receives, with 2402`arg_1`, `arg_2`, ..., and `arg_m`. No matter if the argument is a function 2403pointer, a functor, or a callback. gMock handles them all. 2404 2405With that, you could write: 2406 2407```cpp 2408using ::testing::_; 2409using ::testing::InvokeArgument; 2410... 2411 EXPECT_CALL(foo, DoThis(_, _)) 2412 .WillOnce(InvokeArgument<1>(5)); 2413 // Will execute callback->Run(5), where callback is the 2414 // second argument DoThis() receives. 2415``` 2416 2417What if the callable takes an argument by reference? No problem - just wrap it 2418inside `std::ref()`: 2419 2420```cpp 2421 ... 2422 MOCK_METHOD(bool, Bar, 2423 ((ResultCallback2<bool, int, const Helper&>* callback)), 2424 (override)); 2425 ... 2426 using ::testing::_; 2427 using ::testing::InvokeArgument; 2428 ... 2429 MockFoo foo; 2430 Helper helper; 2431 ... 2432 EXPECT_CALL(foo, Bar(_)) 2433 .WillOnce(InvokeArgument<0>(5, std::ref(helper))); 2434 // std::ref(helper) guarantees that a reference to helper, not a copy of 2435 // it, will be passed to the callback. 2436``` 2437 2438What if the callable takes an argument by reference and we do **not** wrap the 2439argument in `std::ref()`? Then `InvokeArgument()` will *make a copy* of the 2440argument, and pass a *reference to the copy*, instead of a reference to the 2441original value, to the callable. This is especially handy when the argument is a 2442temporary value: 2443 2444```cpp 2445 ... 2446 MOCK_METHOD(bool, DoThat, (bool (*f)(const double& x, const string& s)), 2447 (override)); 2448 ... 2449 using ::testing::_; 2450 using ::testing::InvokeArgument; 2451 ... 2452 MockFoo foo; 2453 ... 2454 EXPECT_CALL(foo, DoThat(_)) 2455 .WillOnce(InvokeArgument<0>(5.0, string("Hi"))); 2456 // Will execute (*f)(5.0, string("Hi")), where f is the function pointer 2457 // DoThat() receives. Note that the values 5.0 and string("Hi") are 2458 // temporary and dead once the EXPECT_CALL() statement finishes. Yet 2459 // it's fine to perform this action later, since a copy of the values 2460 // are kept inside the InvokeArgument action. 2461``` 2462 2463### Ignoring an Action's Result 2464 2465Sometimes you have an action that returns *something*, but you need an action 2466that returns `void` (perhaps you want to use it in a mock function that returns 2467`void`, or perhaps it needs to be used in `DoAll()` and it's not the last in the 2468list). `IgnoreResult()` lets you do that. For example: 2469 2470```cpp 2471using ::testing::_; 2472using ::testing::DoAll; 2473using ::testing::IgnoreResult; 2474using ::testing::Return; 2475 2476int Process(const MyData& data); 2477string DoSomething(); 2478 2479class MockFoo : public Foo { 2480 public: 2481 MOCK_METHOD(void, Abc, (const MyData& data), (override)); 2482 MOCK_METHOD(bool, Xyz, (), (override)); 2483}; 2484 2485 ... 2486 MockFoo foo; 2487 EXPECT_CALL(foo, Abc(_)) 2488 // .WillOnce(Invoke(Process)); 2489 // The above line won't compile as Process() returns int but Abc() needs 2490 // to return void. 2491 .WillOnce(IgnoreResult(Process)); 2492 EXPECT_CALL(foo, Xyz()) 2493 .WillOnce(DoAll(IgnoreResult(DoSomething), 2494 // Ignores the string DoSomething() returns. 2495 Return(true))); 2496``` 2497 2498Note that you **cannot** use `IgnoreResult()` on an action that already returns 2499`void`. Doing so will lead to ugly compiler errors. 2500 2501### Selecting an Action's Arguments {#SelectingArgs} 2502 2503Say you have a mock function `Foo()` that takes seven arguments, and you have a 2504custom action that you want to invoke when `Foo()` is called. Trouble is, the 2505custom action only wants three arguments: 2506 2507```cpp 2508using ::testing::_; 2509using ::testing::Invoke; 2510... 2511 MOCK_METHOD(bool, Foo, 2512 (bool visible, const string& name, int x, int y, 2513 (const map<pair<int, int>>), double& weight, double min_weight, 2514 double max_wight)); 2515... 2516bool IsVisibleInQuadrant1(bool visible, int x, int y) { 2517 return visible && x >= 0 && y >= 0; 2518} 2519... 2520 EXPECT_CALL(mock, Foo) 2521 .WillOnce(Invoke(IsVisibleInQuadrant1)); // Uh, won't compile. :-( 2522``` 2523 2524To please the compiler God, you need to define an "adaptor" that has the same 2525signature as `Foo()` and calls the custom action with the right arguments: 2526 2527```cpp 2528using ::testing::_; 2529using ::testing::Invoke; 2530... 2531bool MyIsVisibleInQuadrant1(bool visible, const string& name, int x, int y, 2532 const map<pair<int, int>, double>& weight, 2533 double min_weight, double max_wight) { 2534 return IsVisibleInQuadrant1(visible, x, y); 2535} 2536... 2537 EXPECT_CALL(mock, Foo) 2538 .WillOnce(Invoke(MyIsVisibleInQuadrant1)); // Now it works. 2539``` 2540 2541But isn't this awkward? 2542 2543gMock provides a generic *action adaptor*, so you can spend your time minding 2544more important business than writing your own adaptors. Here's the syntax: 2545 2546```cpp 2547WithArgs<N1, N2, ..., Nk>(action) 2548``` 2549 2550creates an action that passes the arguments of the mock function at the given 2551indices (0-based) to the inner `action` and performs it. Using `WithArgs`, our 2552original example can be written as: 2553 2554```cpp 2555using ::testing::_; 2556using ::testing::Invoke; 2557using ::testing::WithArgs; 2558... 2559 EXPECT_CALL(mock, Foo) 2560 .WillOnce(WithArgs<0, 2, 3>(Invoke(IsVisibleInQuadrant1))); // No need to define your own adaptor. 2561``` 2562 2563For better readability, gMock also gives you: 2564 2565* `WithoutArgs(action)` when the inner `action` takes *no* argument, and 2566* `WithArg<N>(action)` (no `s` after `Arg`) when the inner `action` takes 2567 *one* argument. 2568 2569As you may have realized, `InvokeWithoutArgs(...)` is just syntactic sugar for 2570`WithoutArgs(Invoke(...))`. 2571 2572Here are more tips: 2573 2574* The inner action used in `WithArgs` and friends does not have to be 2575 `Invoke()` -- it can be anything. 2576* You can repeat an argument in the argument list if necessary, e.g. 2577 `WithArgs<2, 3, 3, 5>(...)`. 2578* You can change the order of the arguments, e.g. `WithArgs<3, 2, 1>(...)`. 2579* The types of the selected arguments do *not* have to match the signature of 2580 the inner action exactly. It works as long as they can be implicitly 2581 converted to the corresponding arguments of the inner action. For example, 2582 if the 4-th argument of the mock function is an `int` and `my_action` takes 2583 a `double`, `WithArg<4>(my_action)` will work. 2584 2585### Ignoring Arguments in Action Functions 2586 2587The [selecting-an-action's-arguments](#SelectingArgs) recipe showed us one way 2588to make a mock function and an action with incompatible argument lists fit 2589together. The downside is that wrapping the action in `WithArgs<...>()` can get 2590tedious for people writing the tests. 2591 2592If you are defining a function (or method, functor, lambda, callback) to be used 2593with `Invoke*()`, and you are not interested in some of its arguments, an 2594alternative to `WithArgs` is to declare the uninteresting arguments as `Unused`. 2595This makes the definition less cluttered and less fragile in case the types of 2596the uninteresting arguments change. It could also increase the chance the action 2597function can be reused. For example, given 2598 2599```cpp 2600 public: 2601 MOCK_METHOD(double, Foo, double(const string& label, double x, double y), 2602 (override)); 2603 MOCK_METHOD(double, Bar, (int index, double x, double y), (override)); 2604``` 2605 2606instead of 2607 2608```cpp 2609using ::testing::_; 2610using ::testing::Invoke; 2611 2612double DistanceToOriginWithLabel(const string& label, double x, double y) { 2613 return sqrt(x*x + y*y); 2614} 2615double DistanceToOriginWithIndex(int index, double x, double y) { 2616 return sqrt(x*x + y*y); 2617} 2618... 2619 EXPECT_CALL(mock, Foo("abc", _, _)) 2620 .WillOnce(Invoke(DistanceToOriginWithLabel)); 2621 EXPECT_CALL(mock, Bar(5, _, _)) 2622 .WillOnce(Invoke(DistanceToOriginWithIndex)); 2623``` 2624 2625you could write 2626 2627```cpp 2628using ::testing::_; 2629using ::testing::Invoke; 2630using ::testing::Unused; 2631 2632double DistanceToOrigin(Unused, double x, double y) { 2633 return sqrt(x*x + y*y); 2634} 2635... 2636 EXPECT_CALL(mock, Foo("abc", _, _)) 2637 .WillOnce(Invoke(DistanceToOrigin)); 2638 EXPECT_CALL(mock, Bar(5, _, _)) 2639 .WillOnce(Invoke(DistanceToOrigin)); 2640``` 2641 2642### Sharing Actions 2643 2644Just like matchers, a gMock action object consists of a pointer to a ref-counted 2645implementation object. Therefore copying actions is also allowed and very 2646efficient. When the last action that references the implementation object dies, 2647the implementation object will be deleted. 2648 2649If you have some complex action that you want to use again and again, you may 2650not have to build it from scratch everytime. If the action doesn't have an 2651internal state (i.e. if it always does the same thing no matter how many times 2652it has been called), you can assign it to an action variable and use that 2653variable repeatedly. For example: 2654 2655```cpp 2656using ::testing::Action; 2657using ::testing::DoAll; 2658using ::testing::Return; 2659using ::testing::SetArgPointee; 2660... 2661 Action<bool(int*)> set_flag = DoAll(SetArgPointee<0>(5), 2662 Return(true)); 2663 ... use set_flag in .WillOnce() and .WillRepeatedly() ... 2664``` 2665 2666However, if the action has its own state, you may be surprised if you share the 2667action object. Suppose you have an action factory `IncrementCounter(init)` which 2668creates an action that increments and returns a counter whose initial value is 2669`init`, using two actions created from the same expression and using a shared 2670action will exhibit different behaviors. Example: 2671 2672```cpp 2673 EXPECT_CALL(foo, DoThis()) 2674 .WillRepeatedly(IncrementCounter(0)); 2675 EXPECT_CALL(foo, DoThat()) 2676 .WillRepeatedly(IncrementCounter(0)); 2677 foo.DoThis(); // Returns 1. 2678 foo.DoThis(); // Returns 2. 2679 foo.DoThat(); // Returns 1 - Blah() uses a different 2680 // counter than Bar()'s. 2681``` 2682 2683versus 2684 2685```cpp 2686using ::testing::Action; 2687... 2688 Action<int()> increment = IncrementCounter(0); 2689 EXPECT_CALL(foo, DoThis()) 2690 .WillRepeatedly(increment); 2691 EXPECT_CALL(foo, DoThat()) 2692 .WillRepeatedly(increment); 2693 foo.DoThis(); // Returns 1. 2694 foo.DoThis(); // Returns 2. 2695 foo.DoThat(); // Returns 3 - the counter is shared. 2696``` 2697 2698### Testing Asynchronous Behavior 2699 2700One oft-encountered problem with gMock is that it can be hard to test 2701asynchronous behavior. Suppose you had a `EventQueue` class that you wanted to 2702test, and you created a separate `EventDispatcher` interface so that you could 2703easily mock it out. However, the implementation of the class fired all the 2704events on a background thread, which made test timings difficult. You could just 2705insert `sleep()` statements and hope for the best, but that makes your test 2706behavior nondeterministic. A better way is to use gMock actions and 2707`Notification` objects to force your asynchronous test to behave synchronously. 2708 2709```cpp 2710class MockEventDispatcher : public EventDispatcher { 2711 MOCK_METHOD(bool, DispatchEvent, (int32), (override)); 2712}; 2713 2714TEST(EventQueueTest, EnqueueEventTest) { 2715 MockEventDispatcher mock_event_dispatcher; 2716 EventQueue event_queue(&mock_event_dispatcher); 2717 2718 const int32 kEventId = 321; 2719 absl::Notification done; 2720 EXPECT_CALL(mock_event_dispatcher, DispatchEvent(kEventId)) 2721 .WillOnce([&done] { done.Notify(); }); 2722 2723 event_queue.EnqueueEvent(kEventId); 2724 done.WaitForNotification(); 2725} 2726``` 2727 2728In the example above, we set our normal gMock expectations, but then add an 2729additional action to notify the `Notification` object. Now we can just call 2730`Notification::WaitForNotification()` in the main thread to wait for the 2731asynchronous call to finish. After that, our test suite is complete and we can 2732safely exit. 2733 2734{: .callout .note} 2735Note: this example has a downside: namely, if the expectation is not satisfied, 2736our test will run forever. It will eventually time-out and fail, but it will 2737take longer and be slightly harder to debug. To alleviate this problem, you can 2738use `WaitForNotificationWithTimeout(ms)` instead of `WaitForNotification()`. 2739 2740## Misc Recipes on Using gMock 2741 2742### Mocking Methods That Use Move-Only Types 2743 2744C++11 introduced *move-only types*. A move-only-typed value can be moved from 2745one object to another, but cannot be copied. `std::unique_ptr<T>` is probably 2746the most commonly used move-only type. 2747 2748Mocking a method that takes and/or returns move-only types presents some 2749challenges, but nothing insurmountable. This recipe shows you how you can do it. 2750Note that the support for move-only method arguments was only introduced to 2751gMock in April 2017; in older code, you may find more complex 2752[workarounds](#LegacyMoveOnly) for lack of this feature. 2753 2754Let’s say we are working on a fictional project that lets one post and share 2755snippets called “buzzes”. Your code uses these types: 2756 2757```cpp 2758enum class AccessLevel { kInternal, kPublic }; 2759 2760class Buzz { 2761 public: 2762 explicit Buzz(AccessLevel access) { ... } 2763 ... 2764}; 2765 2766class Buzzer { 2767 public: 2768 virtual ~Buzzer() {} 2769 virtual std::unique_ptr<Buzz> MakeBuzz(StringPiece text) = 0; 2770 virtual bool ShareBuzz(std::unique_ptr<Buzz> buzz, int64_t timestamp) = 0; 2771 ... 2772}; 2773``` 2774 2775A `Buzz` object represents a snippet being posted. A class that implements the 2776`Buzzer` interface is capable of creating and sharing `Buzz`es. Methods in 2777`Buzzer` may return a `unique_ptr<Buzz>` or take a `unique_ptr<Buzz>`. Now we 2778need to mock `Buzzer` in our tests. 2779 2780To mock a method that accepts or returns move-only types, you just use the 2781familiar `MOCK_METHOD` syntax as usual: 2782 2783```cpp 2784class MockBuzzer : public Buzzer { 2785 public: 2786 MOCK_METHOD(std::unique_ptr<Buzz>, MakeBuzz, (StringPiece text), (override)); 2787 MOCK_METHOD(bool, ShareBuzz, (std::unique_ptr<Buzz> buzz, int64_t timestamp), 2788 (override)); 2789}; 2790``` 2791 2792Now that we have the mock class defined, we can use it in tests. In the 2793following code examples, we assume that we have defined a `MockBuzzer` object 2794named `mock_buzzer_`: 2795 2796```cpp 2797 MockBuzzer mock_buzzer_; 2798``` 2799 2800First let’s see how we can set expectations on the `MakeBuzz()` method, which 2801returns a `unique_ptr<Buzz>`. 2802 2803As usual, if you set an expectation without an action (i.e. the `.WillOnce()` or 2804`.WillRepeatedly()` clause), when that expectation fires, the default action for 2805that method will be taken. Since `unique_ptr<>` has a default constructor that 2806returns a null `unique_ptr`, that’s what you’ll get if you don’t specify an 2807action: 2808 2809```cpp 2810 // Use the default action. 2811 EXPECT_CALL(mock_buzzer_, MakeBuzz("hello")); 2812 2813 // Triggers the previous EXPECT_CALL. 2814 EXPECT_EQ(nullptr, mock_buzzer_.MakeBuzz("hello")); 2815``` 2816 2817If you are not happy with the default action, you can tweak it as usual; see 2818[Setting Default Actions](#OnCall). 2819 2820If you just need to return a pre-defined move-only value, you can use the 2821`Return(ByMove(...))` action: 2822 2823```cpp 2824 // When this fires, the unique_ptr<> specified by ByMove(...) will 2825 // be returned. 2826 EXPECT_CALL(mock_buzzer_, MakeBuzz("world")) 2827 .WillOnce(Return(ByMove(MakeUnique<Buzz>(AccessLevel::kInternal)))); 2828 2829 EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("world")); 2830``` 2831 2832Note that `ByMove()` is essential here - if you drop it, the code won’t compile. 2833 2834Quiz time! What do you think will happen if a `Return(ByMove(...))` action is 2835performed more than once (e.g. you write `... 2836.WillRepeatedly(Return(ByMove(...)));`)? Come think of it, after the first time 2837the action runs, the source value will be consumed (since it’s a move-only 2838value), so the next time around, there’s no value to move from -- you’ll get a 2839run-time error that `Return(ByMove(...))` can only be run once. 2840 2841If you need your mock method to do more than just moving a pre-defined value, 2842remember that you can always use a lambda or a callable object, which can do 2843pretty much anything you want: 2844 2845```cpp 2846 EXPECT_CALL(mock_buzzer_, MakeBuzz("x")) 2847 .WillRepeatedly([](StringPiece text) { 2848 return MakeUnique<Buzz>(AccessLevel::kInternal); 2849 }); 2850 2851 EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("x")); 2852 EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("x")); 2853``` 2854 2855Every time this `EXPECT_CALL` fires, a new `unique_ptr<Buzz>` will be created 2856and returned. You cannot do this with `Return(ByMove(...))`. 2857 2858That covers returning move-only values; but how do we work with methods 2859accepting move-only arguments? The answer is that they work normally, although 2860some actions will not compile when any of method's arguments are move-only. You 2861can always use `Return`, or a [lambda or functor](#FunctionsAsActions): 2862 2863```cpp 2864 using ::testing::Unused; 2865 2866 EXPECT_CALL(mock_buzzer_, ShareBuzz(NotNull(), _)).WillOnce(Return(true)); 2867 EXPECT_TRUE(mock_buzzer_.ShareBuzz(MakeUnique<Buzz>(AccessLevel::kInternal)), 2868 0); 2869 2870 EXPECT_CALL(mock_buzzer_, ShareBuzz(_, _)).WillOnce( 2871 [](std::unique_ptr<Buzz> buzz, Unused) { return buzz != nullptr; }); 2872 EXPECT_FALSE(mock_buzzer_.ShareBuzz(nullptr, 0)); 2873``` 2874 2875Many built-in actions (`WithArgs`, `WithoutArgs`,`DeleteArg`, `SaveArg`, ...) 2876could in principle support move-only arguments, but the support for this is not 2877implemented yet. If this is blocking you, please file a bug. 2878 2879A few actions (e.g. `DoAll`) copy their arguments internally, so they can never 2880work with non-copyable objects; you'll have to use functors instead. 2881 2882#### Legacy workarounds for move-only types {#LegacyMoveOnly} 2883 2884Support for move-only function arguments was only introduced to gMock in April 2885of 2017. In older code, you may encounter the following workaround for the lack 2886of this feature (it is no longer necessary - we're including it just for 2887reference): 2888 2889```cpp 2890class MockBuzzer : public Buzzer { 2891 public: 2892 MOCK_METHOD(bool, DoShareBuzz, (Buzz* buzz, Time timestamp)); 2893 bool ShareBuzz(std::unique_ptr<Buzz> buzz, Time timestamp) override { 2894 return DoShareBuzz(buzz.get(), timestamp); 2895 } 2896}; 2897``` 2898 2899The trick is to delegate the `ShareBuzz()` method to a mock method (let’s call 2900it `DoShareBuzz()`) that does not take move-only parameters. Then, instead of 2901setting expectations on `ShareBuzz()`, you set them on the `DoShareBuzz()` mock 2902method: 2903 2904```cpp 2905 MockBuzzer mock_buzzer_; 2906 EXPECT_CALL(mock_buzzer_, DoShareBuzz(NotNull(), _)); 2907 2908 // When one calls ShareBuzz() on the MockBuzzer like this, the call is 2909 // forwarded to DoShareBuzz(), which is mocked. Therefore this statement 2910 // will trigger the above EXPECT_CALL. 2911 mock_buzzer_.ShareBuzz(MakeUnique<Buzz>(AccessLevel::kInternal), 0); 2912``` 2913 2914### Making the Compilation Faster 2915 2916Believe it or not, the *vast majority* of the time spent on compiling a mock 2917class is in generating its constructor and destructor, as they perform 2918non-trivial tasks (e.g. verification of the expectations). What's more, mock 2919methods with different signatures have different types and thus their 2920constructors/destructors need to be generated by the compiler separately. As a 2921result, if you mock many different types of methods, compiling your mock class 2922can get really slow. 2923 2924If you are experiencing slow compilation, you can move the definition of your 2925mock class' constructor and destructor out of the class body and into a `.cc` 2926file. This way, even if you `#include` your mock class in N files, the compiler 2927only needs to generate its constructor and destructor once, resulting in a much 2928faster compilation. 2929 2930Let's illustrate the idea using an example. Here's the definition of a mock 2931class before applying this recipe: 2932 2933```cpp 2934// File mock_foo.h. 2935... 2936class MockFoo : public Foo { 2937 public: 2938 // Since we don't declare the constructor or the destructor, 2939 // the compiler will generate them in every translation unit 2940 // where this mock class is used. 2941 2942 MOCK_METHOD(int, DoThis, (), (override)); 2943 MOCK_METHOD(bool, DoThat, (const char* str), (override)); 2944 ... more mock methods ... 2945}; 2946``` 2947 2948After the change, it would look like: 2949 2950```cpp 2951// File mock_foo.h. 2952... 2953class MockFoo : public Foo { 2954 public: 2955 // The constructor and destructor are declared, but not defined, here. 2956 MockFoo(); 2957 virtual ~MockFoo(); 2958 2959 MOCK_METHOD(int, DoThis, (), (override)); 2960 MOCK_METHOD(bool, DoThat, (const char* str), (override)); 2961 ... more mock methods ... 2962}; 2963``` 2964 2965and 2966 2967```cpp 2968// File mock_foo.cc. 2969#include "path/to/mock_foo.h" 2970 2971// The definitions may appear trivial, but the functions actually do a 2972// lot of things through the constructors/destructors of the member 2973// variables used to implement the mock methods. 2974MockFoo::MockFoo() {} 2975MockFoo::~MockFoo() {} 2976``` 2977 2978### Forcing a Verification 2979 2980When it's being destroyed, your friendly mock object will automatically verify 2981that all expectations on it have been satisfied, and will generate googletest 2982failures if not. This is convenient as it leaves you with one less thing to 2983worry about. That is, unless you are not sure if your mock object will be 2984destroyed. 2985 2986How could it be that your mock object won't eventually be destroyed? Well, it 2987might be created on the heap and owned by the code you are testing. Suppose 2988there's a bug in that code and it doesn't delete the mock object properly - you 2989could end up with a passing test when there's actually a bug. 2990 2991Using a heap checker is a good idea and can alleviate the concern, but its 2992implementation is not 100% reliable. So, sometimes you do want to *force* gMock 2993to verify a mock object before it is (hopefully) destructed. You can do this 2994with `Mock::VerifyAndClearExpectations(&mock_object)`: 2995 2996```cpp 2997TEST(MyServerTest, ProcessesRequest) { 2998 using ::testing::Mock; 2999 3000 MockFoo* const foo = new MockFoo; 3001 EXPECT_CALL(*foo, ...)...; 3002 // ... other expectations ... 3003 3004 // server now owns foo. 3005 MyServer server(foo); 3006 server.ProcessRequest(...); 3007 3008 // In case that server's destructor will forget to delete foo, 3009 // this will verify the expectations anyway. 3010 Mock::VerifyAndClearExpectations(foo); 3011} // server is destroyed when it goes out of scope here. 3012``` 3013 3014{: .callout .tip} 3015**Tip:** The `Mock::VerifyAndClearExpectations()` function returns a `bool` to 3016indicate whether the verification was successful (`true` for yes), so you can 3017wrap that function call inside a `ASSERT_TRUE()` if there is no point going 3018further when the verification has failed. 3019 3020### Using Check Points {#UsingCheckPoints} 3021 3022Sometimes you may want to "reset" a mock object at various check points in your 3023test: at each check point, you verify that all existing expectations on the mock 3024object have been satisfied, and then you set some new expectations on it as if 3025it's newly created. This allows you to work with a mock object in "phases" whose 3026sizes are each manageable. 3027 3028One such scenario is that in your test's `SetUp()` function, you may want to put 3029the object you are testing into a certain state, with the help from a mock 3030object. Once in the desired state, you want to clear all expectations on the 3031mock, such that in the `TEST_F` body you can set fresh expectations on it. 3032 3033As you may have figured out, the `Mock::VerifyAndClearExpectations()` function 3034we saw in the previous recipe can help you here. Or, if you are using 3035`ON_CALL()` to set default actions on the mock object and want to clear the 3036default actions as well, use `Mock::VerifyAndClear(&mock_object)` instead. This 3037function does what `Mock::VerifyAndClearExpectations(&mock_object)` does and 3038returns the same `bool`, **plus** it clears the `ON_CALL()` statements on 3039`mock_object` too. 3040 3041Another trick you can use to achieve the same effect is to put the expectations 3042in sequences and insert calls to a dummy "check-point" function at specific 3043places. Then you can verify that the mock function calls do happen at the right 3044time. For example, if you are exercising code: 3045 3046```cpp 3047 Foo(1); 3048 Foo(2); 3049 Foo(3); 3050``` 3051 3052and want to verify that `Foo(1)` and `Foo(3)` both invoke `mock.Bar("a")`, but 3053`Foo(2)` doesn't invoke anything. You can write: 3054 3055```cpp 3056using ::testing::MockFunction; 3057 3058TEST(FooTest, InvokesBarCorrectly) { 3059 MyMock mock; 3060 // Class MockFunction<F> has exactly one mock method. It is named 3061 // Call() and has type F. 3062 MockFunction<void(string check_point_name)> check; 3063 { 3064 InSequence s; 3065 3066 EXPECT_CALL(mock, Bar("a")); 3067 EXPECT_CALL(check, Call("1")); 3068 EXPECT_CALL(check, Call("2")); 3069 EXPECT_CALL(mock, Bar("a")); 3070 } 3071 Foo(1); 3072 check.Call("1"); 3073 Foo(2); 3074 check.Call("2"); 3075 Foo(3); 3076} 3077``` 3078 3079The expectation spec says that the first `Bar("a")` must happen before check 3080point "1", the second `Bar("a")` must happen after check point "2", and nothing 3081should happen between the two check points. The explicit check points make it 3082easy to tell which `Bar("a")` is called by which call to `Foo()`. 3083 3084### Mocking Destructors 3085 3086Sometimes you want to make sure a mock object is destructed at the right time, 3087e.g. after `bar->A()` is called but before `bar->B()` is called. We already know 3088that you can specify constraints on the [order](#OrderedCalls) of mock function 3089calls, so all we need to do is to mock the destructor of the mock function. 3090 3091This sounds simple, except for one problem: a destructor is a special function 3092with special syntax and special semantics, and the `MOCK_METHOD` macro doesn't 3093work for it: 3094 3095```cpp 3096MOCK_METHOD(void, ~MockFoo, ()); // Won't compile! 3097``` 3098 3099The good news is that you can use a simple pattern to achieve the same effect. 3100First, add a mock function `Die()` to your mock class and call it in the 3101destructor, like this: 3102 3103```cpp 3104class MockFoo : public Foo { 3105 ... 3106 // Add the following two lines to the mock class. 3107 MOCK_METHOD(void, Die, ()); 3108 ~MockFoo() override { Die(); } 3109}; 3110``` 3111 3112(If the name `Die()` clashes with an existing symbol, choose another name.) Now, 3113we have translated the problem of testing when a `MockFoo` object dies to 3114testing when its `Die()` method is called: 3115 3116```cpp 3117 MockFoo* foo = new MockFoo; 3118 MockBar* bar = new MockBar; 3119 ... 3120 { 3121 InSequence s; 3122 3123 // Expects *foo to die after bar->A() and before bar->B(). 3124 EXPECT_CALL(*bar, A()); 3125 EXPECT_CALL(*foo, Die()); 3126 EXPECT_CALL(*bar, B()); 3127 } 3128``` 3129 3130And that's that. 3131 3132### Using gMock and Threads {#UsingThreads} 3133 3134In a **unit** test, it's best if you could isolate and test a piece of code in a 3135single-threaded context. That avoids race conditions and dead locks, and makes 3136debugging your test much easier. 3137 3138Yet most programs are multi-threaded, and sometimes to test something we need to 3139pound on it from more than one thread. gMock works for this purpose too. 3140 3141Remember the steps for using a mock: 3142 31431. Create a mock object `foo`. 31442. Set its default actions and expectations using `ON_CALL()` and 3145 `EXPECT_CALL()`. 31463. The code under test calls methods of `foo`. 31474. Optionally, verify and reset the mock. 31485. Destroy the mock yourself, or let the code under test destroy it. The 3149 destructor will automatically verify it. 3150 3151If you follow the following simple rules, your mocks and threads can live 3152happily together: 3153 3154* Execute your *test code* (as opposed to the code being tested) in *one* 3155 thread. This makes your test easy to follow. 3156* Obviously, you can do step #1 without locking. 3157* When doing step #2 and #5, make sure no other thread is accessing `foo`. 3158 Obvious too, huh? 3159* #3 and #4 can be done either in one thread or in multiple threads - anyway 3160 you want. gMock takes care of the locking, so you don't have to do any - 3161 unless required by your test logic. 3162 3163If you violate the rules (for example, if you set expectations on a mock while 3164another thread is calling its methods), you get undefined behavior. That's not 3165fun, so don't do it. 3166 3167gMock guarantees that the action for a mock function is done in the same thread 3168that called the mock function. For example, in 3169 3170```cpp 3171 EXPECT_CALL(mock, Foo(1)) 3172 .WillOnce(action1); 3173 EXPECT_CALL(mock, Foo(2)) 3174 .WillOnce(action2); 3175``` 3176 3177if `Foo(1)` is called in thread 1 and `Foo(2)` is called in thread 2, gMock will 3178execute `action1` in thread 1 and `action2` in thread 2. 3179 3180gMock does *not* impose a sequence on actions performed in different threads 3181(doing so may create deadlocks as the actions may need to cooperate). This means 3182that the execution of `action1` and `action2` in the above example *may* 3183interleave. If this is a problem, you should add proper synchronization logic to 3184`action1` and `action2` to make the test thread-safe. 3185 3186Also, remember that `DefaultValue<T>` is a global resource that potentially 3187affects *all* living mock objects in your program. Naturally, you won't want to 3188mess with it from multiple threads or when there still are mocks in action. 3189 3190### Controlling How Much Information gMock Prints 3191 3192When gMock sees something that has the potential of being an error (e.g. a mock 3193function with no expectation is called, a.k.a. an uninteresting call, which is 3194allowed but perhaps you forgot to explicitly ban the call), it prints some 3195warning messages, including the arguments of the function, the return value, and 3196the stack trace. Hopefully this will remind you to take a look and see if there 3197is indeed a problem. 3198 3199Sometimes you are confident that your tests are correct and may not appreciate 3200such friendly messages. Some other times, you are debugging your tests or 3201learning about the behavior of the code you are testing, and wish you could 3202observe every mock call that happens (including argument values, the return 3203value, and the stack trace). Clearly, one size doesn't fit all. 3204 3205You can control how much gMock tells you using the `--gmock_verbose=LEVEL` 3206command-line flag, where `LEVEL` is a string with three possible values: 3207 3208* `info`: gMock will print all informational messages, warnings, and errors 3209 (most verbose). At this setting, gMock will also log any calls to the 3210 `ON_CALL/EXPECT_CALL` macros. It will include a stack trace in 3211 "uninteresting call" warnings. 3212* `warning`: gMock will print both warnings and errors (less verbose); it will 3213 omit the stack traces in "uninteresting call" warnings. This is the default. 3214* `error`: gMock will print errors only (least verbose). 3215 3216Alternatively, you can adjust the value of that flag from within your tests like 3217so: 3218 3219```cpp 3220 ::testing::FLAGS_gmock_verbose = "error"; 3221``` 3222 3223If you find gMock printing too many stack frames with its informational or 3224warning messages, remember that you can control their amount with the 3225`--gtest_stack_trace_depth=max_depth` flag. 3226 3227Now, judiciously use the right flag to enable gMock serve you better! 3228 3229### Gaining Super Vision into Mock Calls 3230 3231You have a test using gMock. It fails: gMock tells you some expectations aren't 3232satisfied. However, you aren't sure why: Is there a typo somewhere in the 3233matchers? Did you mess up the order of the `EXPECT_CALL`s? Or is the code under 3234test doing something wrong? How can you find out the cause? 3235 3236Won't it be nice if you have X-ray vision and can actually see the trace of all 3237`EXPECT_CALL`s and mock method calls as they are made? For each call, would you 3238like to see its actual argument values and which `EXPECT_CALL` gMock thinks it 3239matches? If you still need some help to figure out who made these calls, how 3240about being able to see the complete stack trace at each mock call? 3241 3242You can unlock this power by running your test with the `--gmock_verbose=info` 3243flag. For example, given the test program: 3244 3245```cpp 3246#include "gmock/gmock.h" 3247 3248using testing::_; 3249using testing::HasSubstr; 3250using testing::Return; 3251 3252class MockFoo { 3253 public: 3254 MOCK_METHOD(void, F, (const string& x, const string& y)); 3255}; 3256 3257TEST(Foo, Bar) { 3258 MockFoo mock; 3259 EXPECT_CALL(mock, F(_, _)).WillRepeatedly(Return()); 3260 EXPECT_CALL(mock, F("a", "b")); 3261 EXPECT_CALL(mock, F("c", HasSubstr("d"))); 3262 3263 mock.F("a", "good"); 3264 mock.F("a", "b"); 3265} 3266``` 3267 3268if you run it with `--gmock_verbose=info`, you will see this output: 3269 3270```shell 3271[ RUN ] Foo.Bar 3272 3273foo_test.cc:14: EXPECT_CALL(mock, F(_, _)) invoked 3274Stack trace: ... 3275 3276foo_test.cc:15: EXPECT_CALL(mock, F("a", "b")) invoked 3277Stack trace: ... 3278 3279foo_test.cc:16: EXPECT_CALL(mock, F("c", HasSubstr("d"))) invoked 3280Stack trace: ... 3281 3282foo_test.cc:14: Mock function call matches EXPECT_CALL(mock, F(_, _))... 3283 Function call: F(@0x7fff7c8dad40"a",@0x7fff7c8dad10"good") 3284Stack trace: ... 3285 3286foo_test.cc:15: Mock function call matches EXPECT_CALL(mock, F("a", "b"))... 3287 Function call: F(@0x7fff7c8dada0"a",@0x7fff7c8dad70"b") 3288Stack trace: ... 3289 3290foo_test.cc:16: Failure 3291Actual function call count doesn't match EXPECT_CALL(mock, F("c", HasSubstr("d")))... 3292 Expected: to be called once 3293 Actual: never called - unsatisfied and active 3294[ FAILED ] Foo.Bar 3295``` 3296 3297Suppose the bug is that the `"c"` in the third `EXPECT_CALL` is a typo and 3298should actually be `"a"`. With the above message, you should see that the actual 3299`F("a", "good")` call is matched by the first `EXPECT_CALL`, not the third as 3300you thought. From that it should be obvious that the third `EXPECT_CALL` is 3301written wrong. Case solved. 3302 3303If you are interested in the mock call trace but not the stack traces, you can 3304combine `--gmock_verbose=info` with `--gtest_stack_trace_depth=0` on the test 3305command line. 3306 3307### Running Tests in Emacs 3308 3309If you build and run your tests in Emacs using the `M-x google-compile` command 3310(as many googletest users do), the source file locations of gMock and googletest 3311errors will be highlighted. Just press `<Enter>` on one of them and you'll be 3312taken to the offending line. Or, you can just type `C-x`` to jump to the next 3313error. 3314 3315To make it even easier, you can add the following lines to your `~/.emacs` file: 3316 3317```text 3318(global-set-key "\M-m" 'google-compile) ; m is for make 3319(global-set-key [M-down] 'next-error) 3320(global-set-key [M-up] '(lambda () (interactive) (next-error -1))) 3321``` 3322 3323Then you can type `M-m` to start a build (if you want to run the test as well, 3324just make sure `foo_test.run` or `runtests` is in the build command you supply 3325after typing `M-m`), or `M-up`/`M-down` to move back and forth between errors. 3326 3327## Extending gMock 3328 3329### Writing New Matchers Quickly {#NewMatchers} 3330 3331{: .callout .warning} 3332WARNING: gMock does not guarantee when or how many times a matcher will be 3333invoked. Therefore, all matchers must be functionally pure. See 3334[this section](#PureMatchers) for more details. 3335 3336The `MATCHER*` family of macros can be used to define custom matchers easily. 3337The syntax: 3338 3339```cpp 3340MATCHER(name, description_string_expression) { statements; } 3341``` 3342 3343will define a matcher with the given name that executes the statements, which 3344must return a `bool` to indicate if the match succeeds. Inside the statements, 3345you can refer to the value being matched by `arg`, and refer to its type by 3346`arg_type`. 3347 3348The *description string* is a `string`-typed expression that documents what the 3349matcher does, and is used to generate the failure message when the match fails. 3350It can (and should) reference the special `bool` variable `negation`, and should 3351evaluate to the description of the matcher when `negation` is `false`, or that 3352of the matcher's negation when `negation` is `true`. 3353 3354For convenience, we allow the description string to be empty (`""`), in which 3355case gMock will use the sequence of words in the matcher name as the 3356description. 3357 3358For example: 3359 3360```cpp 3361MATCHER(IsDivisibleBy7, "") { return (arg % 7) == 0; } 3362``` 3363 3364allows you to write 3365 3366```cpp 3367 // Expects mock_foo.Bar(n) to be called where n is divisible by 7. 3368 EXPECT_CALL(mock_foo, Bar(IsDivisibleBy7())); 3369``` 3370 3371or, 3372 3373```cpp 3374 using ::testing::Not; 3375 ... 3376 // Verifies that two values are divisible by 7. 3377 EXPECT_THAT(some_expression, IsDivisibleBy7()); 3378 EXPECT_THAT(some_other_expression, Not(IsDivisibleBy7())); 3379``` 3380 3381If the above assertions fail, they will print something like: 3382 3383```shell 3384 Value of: some_expression 3385 Expected: is divisible by 7 3386 Actual: 27 3387 ... 3388 Value of: some_other_expression 3389 Expected: not (is divisible by 7) 3390 Actual: 21 3391``` 3392 3393where the descriptions `"is divisible by 7"` and `"not (is divisible by 7)"` are 3394automatically calculated from the matcher name `IsDivisibleBy7`. 3395 3396As you may have noticed, the auto-generated descriptions (especially those for 3397the negation) may not be so great. You can always override them with a `string` 3398expression of your own: 3399 3400```cpp 3401MATCHER(IsDivisibleBy7, 3402 absl::StrCat(negation ? "isn't" : "is", " divisible by 7")) { 3403 return (arg % 7) == 0; 3404} 3405``` 3406 3407Optionally, you can stream additional information to a hidden argument named 3408`result_listener` to explain the match result. For example, a better definition 3409of `IsDivisibleBy7` is: 3410 3411```cpp 3412MATCHER(IsDivisibleBy7, "") { 3413 if ((arg % 7) == 0) 3414 return true; 3415 3416 *result_listener << "the remainder is " << (arg % 7); 3417 return false; 3418} 3419``` 3420 3421With this definition, the above assertion will give a better message: 3422 3423```shell 3424 Value of: some_expression 3425 Expected: is divisible by 7 3426 Actual: 27 (the remainder is 6) 3427``` 3428 3429You should let `MatchAndExplain()` print *any additional information* that can 3430help a user understand the match result. Note that it should explain why the 3431match succeeds in case of a success (unless it's obvious) - this is useful when 3432the matcher is used inside `Not()`. There is no need to print the argument value 3433itself, as gMock already prints it for you. 3434 3435{: .callout .note} 3436NOTE: The type of the value being matched (`arg_type`) is determined by the 3437context in which you use the matcher and is supplied to you by the compiler, so 3438you don't need to worry about declaring it (nor can you). This allows the 3439matcher to be polymorphic. For example, `IsDivisibleBy7()` can be used to match 3440any type where the value of `(arg % 7) == 0` can be implicitly converted to a 3441`bool`. In the `Bar(IsDivisibleBy7())` example above, if method `Bar()` takes an 3442`int`, `arg_type` will be `int`; if it takes an `unsigned long`, `arg_type` will 3443be `unsigned long`; and so on. 3444 3445### Writing New Parameterized Matchers Quickly 3446 3447Sometimes you'll want to define a matcher that has parameters. For that you can 3448use the macro: 3449 3450```cpp 3451MATCHER_P(name, param_name, description_string) { statements; } 3452``` 3453 3454where the description string can be either `""` or a `string` expression that 3455references `negation` and `param_name`. 3456 3457For example: 3458 3459```cpp 3460MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; } 3461``` 3462 3463will allow you to write: 3464 3465```cpp 3466 EXPECT_THAT(Blah("a"), HasAbsoluteValue(n)); 3467``` 3468 3469which may lead to this message (assuming `n` is 10): 3470 3471```shell 3472 Value of: Blah("a") 3473 Expected: has absolute value 10 3474 Actual: -9 3475``` 3476 3477Note that both the matcher description and its parameter are printed, making the 3478message human-friendly. 3479 3480In the matcher definition body, you can write `foo_type` to reference the type 3481of a parameter named `foo`. For example, in the body of 3482`MATCHER_P(HasAbsoluteValue, value)` above, you can write `value_type` to refer 3483to the type of `value`. 3484 3485gMock also provides `MATCHER_P2`, `MATCHER_P3`, ..., up to `MATCHER_P10` to 3486support multi-parameter matchers: 3487 3488```cpp 3489MATCHER_Pk(name, param_1, ..., param_k, description_string) { statements; } 3490``` 3491 3492Please note that the custom description string is for a particular *instance* of 3493the matcher, where the parameters have been bound to actual values. Therefore 3494usually you'll want the parameter values to be part of the description. gMock 3495lets you do that by referencing the matcher parameters in the description string 3496expression. 3497 3498For example, 3499 3500```cpp 3501using ::testing::PrintToString; 3502MATCHER_P2(InClosedRange, low, hi, 3503 absl::StrFormat("%s in range [%s, %s]", negation ? "isn't" : "is", 3504 PrintToString(low), PrintToString(hi))) { 3505 return low <= arg && arg <= hi; 3506} 3507... 3508EXPECT_THAT(3, InClosedRange(4, 6)); 3509``` 3510 3511would generate a failure that contains the message: 3512 3513```shell 3514 Expected: is in range [4, 6] 3515``` 3516 3517If you specify `""` as the description, the failure message will contain the 3518sequence of words in the matcher name followed by the parameter values printed 3519as a tuple. For example, 3520 3521```cpp 3522 MATCHER_P2(InClosedRange, low, hi, "") { ... } 3523 ... 3524 EXPECT_THAT(3, InClosedRange(4, 6)); 3525``` 3526 3527would generate a failure that contains the text: 3528 3529```shell 3530 Expected: in closed range (4, 6) 3531``` 3532 3533For the purpose of typing, you can view 3534 3535```cpp 3536MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... } 3537``` 3538 3539as shorthand for 3540 3541```cpp 3542template <typename p1_type, ..., typename pk_type> 3543FooMatcherPk<p1_type, ..., pk_type> 3544Foo(p1_type p1, ..., pk_type pk) { ... } 3545``` 3546 3547When you write `Foo(v1, ..., vk)`, the compiler infers the types of the 3548parameters `v1`, ..., and `vk` for you. If you are not happy with the result of 3549the type inference, you can specify the types by explicitly instantiating the 3550template, as in `Foo<long, bool>(5, false)`. As said earlier, you don't get to 3551(or need to) specify `arg_type` as that's determined by the context in which the 3552matcher is used. 3553 3554You can assign the result of expression `Foo(p1, ..., pk)` to a variable of type 3555`FooMatcherPk<p1_type, ..., pk_type>`. This can be useful when composing 3556matchers. Matchers that don't have a parameter or have only one parameter have 3557special types: you can assign `Foo()` to a `FooMatcher`-typed variable, and 3558assign `Foo(p)` to a `FooMatcherP<p_type>`-typed variable. 3559 3560While you can instantiate a matcher template with reference types, passing the 3561parameters by pointer usually makes your code more readable. If, however, you 3562still want to pass a parameter by reference, be aware that in the failure 3563message generated by the matcher you will see the value of the referenced object 3564but not its address. 3565 3566You can overload matchers with different numbers of parameters: 3567 3568```cpp 3569MATCHER_P(Blah, a, description_string_1) { ... } 3570MATCHER_P2(Blah, a, b, description_string_2) { ... } 3571``` 3572 3573While it's tempting to always use the `MATCHER*` macros when defining a new 3574matcher, you should also consider implementing the matcher interface directly 3575instead (see the recipes that follow), especially if you need to use the matcher 3576a lot. While these approaches require more work, they give you more control on 3577the types of the value being matched and the matcher parameters, which in 3578general leads to better compiler error messages that pay off in the long run. 3579They also allow overloading matchers based on parameter types (as opposed to 3580just based on the number of parameters). 3581 3582### Writing New Monomorphic Matchers 3583 3584A matcher of argument type `T` implements the matcher interface for `T` and does 3585two things: it tests whether a value of type `T` matches the matcher, and can 3586describe what kind of values it matches. The latter ability is used for 3587generating readable error messages when expectations are violated. 3588 3589A matcher of `T` must declare a typedef like: 3590 3591```cpp 3592using is_gtest_matcher = void; 3593``` 3594 3595and supports the following operations: 3596 3597```cpp 3598// Match a value and optionally explain into an ostream. 3599bool matched = matcher.MatchAndExplain(value, maybe_os); 3600// where `value` is of type `T` and 3601// `maybe_os` is of type `std::ostream*`, where it can be null if the caller 3602// is not interested in there textual explanation. 3603 3604matcher.DescribeTo(os); 3605matcher.DescribeNegationTo(os); 3606// where `os` is of type `std::ostream*`. 3607``` 3608 3609If you need a custom matcher but `Truly()` is not a good option (for example, 3610you may not be happy with the way `Truly(predicate)` describes itself, or you 3611may want your matcher to be polymorphic as `Eq(value)` is), you can define a 3612matcher to do whatever you want in two steps: first implement the matcher 3613interface, and then define a factory function to create a matcher instance. The 3614second step is not strictly needed but it makes the syntax of using the matcher 3615nicer. 3616 3617For example, you can define a matcher to test whether an `int` is divisible by 7 3618and then use it like this: 3619 3620```cpp 3621using ::testing::Matcher; 3622 3623class DivisibleBy7Matcher { 3624 public: 3625 using is_gtest_matcher = void; 3626 3627 bool MatchAndExplain(int n, std::ostream*) const { 3628 return (n % 7) == 0; 3629 } 3630 3631 void DescribeTo(std::ostream* os) const { 3632 *os << "is divisible by 7"; 3633 } 3634 3635 void DescribeNegationTo(std::ostream* os) const { 3636 *os << "is not divisible by 7"; 3637 } 3638}; 3639 3640Matcher<int> DivisibleBy7() { 3641 return DivisibleBy7Matcher(); 3642} 3643 3644... 3645 EXPECT_CALL(foo, Bar(DivisibleBy7())); 3646``` 3647 3648You may improve the matcher message by streaming additional information to the 3649`os` argument in `MatchAndExplain()`: 3650 3651```cpp 3652class DivisibleBy7Matcher { 3653 public: 3654 bool MatchAndExplain(int n, std::ostream* os) const { 3655 const int remainder = n % 7; 3656 if (remainder != 0 && os != nullptr) { 3657 *os << "the remainder is " << remainder; 3658 } 3659 return remainder == 0; 3660 } 3661 ... 3662}; 3663``` 3664 3665Then, `EXPECT_THAT(x, DivisibleBy7());` may generate a message like this: 3666 3667```shell 3668Value of: x 3669Expected: is divisible by 7 3670 Actual: 23 (the remainder is 2) 3671``` 3672 3673{: .callout .tip} 3674Tip: for convenience, `MatchAndExplain()` can take a `MatchResultListener*` 3675instead of `std::ostream*`. 3676 3677### Writing New Polymorphic Matchers 3678 3679Expanding what we learned above to *polymorphic* matchers is now just as simple 3680as adding templates in the right place. 3681 3682```cpp 3683 3684class NotNullMatcher { 3685 public: 3686 using is_gtest_matcher = void; 3687 3688 // To implement a polymorphic matcher, we just need to make MatchAndExplain a 3689 // template on its first argument. 3690 3691 // In this example, we want to use NotNull() with any pointer, so 3692 // MatchAndExplain() accepts a pointer of any type as its first argument. 3693 // In general, you can define MatchAndExplain() as an ordinary method or 3694 // a method template, or even overload it. 3695 template <typename T> 3696 bool MatchAndExplain(T* p, std::ostream*) const { 3697 return p != nullptr; 3698 } 3699 3700 // Describes the property of a value matching this matcher. 3701 void DescribeTo(std::ostream* os) const { *os << "is not NULL"; } 3702 3703 // Describes the property of a value NOT matching this matcher. 3704 void DescribeNegationTo(std::ostream* os) const { *os << "is NULL"; } 3705}; 3706 3707NotNullMatcher NotNull() { 3708 return NotNullMatcher(); 3709} 3710 3711... 3712 3713 EXPECT_CALL(foo, Bar(NotNull())); // The argument must be a non-NULL pointer. 3714``` 3715 3716### Legacy Matcher Implementation 3717 3718Defining matchers used to be somewhat more complicated, in which it required 3719several supporting classes and virtual functions. To implement a matcher for 3720type `T` using the legacy API you have to derive from `MatcherInterface<T>` and 3721call `MakeMatcher` to construct the object. 3722 3723The interface looks like this: 3724 3725```cpp 3726class MatchResultListener { 3727 public: 3728 ... 3729 // Streams x to the underlying ostream; does nothing if the ostream 3730 // is NULL. 3731 template <typename T> 3732 MatchResultListener& operator<<(const T& x); 3733 3734 // Returns the underlying ostream. 3735 std::ostream* stream(); 3736}; 3737 3738template <typename T> 3739class MatcherInterface { 3740 public: 3741 virtual ~MatcherInterface(); 3742 3743 // Returns true if and only if the matcher matches x; also explains the match 3744 // result to 'listener'. 3745 virtual bool MatchAndExplain(T x, MatchResultListener* listener) const = 0; 3746 3747 // Describes this matcher to an ostream. 3748 virtual void DescribeTo(std::ostream* os) const = 0; 3749 3750 // Describes the negation of this matcher to an ostream. 3751 virtual void DescribeNegationTo(std::ostream* os) const; 3752}; 3753``` 3754 3755Fortunately, most of the time you can define a polymorphic matcher easily with 3756the help of `MakePolymorphicMatcher()`. Here's how you can define `NotNull()` as 3757an example: 3758 3759```cpp 3760using ::testing::MakePolymorphicMatcher; 3761using ::testing::MatchResultListener; 3762using ::testing::PolymorphicMatcher; 3763 3764class NotNullMatcher { 3765 public: 3766 // To implement a polymorphic matcher, first define a COPYABLE class 3767 // that has three members MatchAndExplain(), DescribeTo(), and 3768 // DescribeNegationTo(), like the following. 3769 3770 // In this example, we want to use NotNull() with any pointer, so 3771 // MatchAndExplain() accepts a pointer of any type as its first argument. 3772 // In general, you can define MatchAndExplain() as an ordinary method or 3773 // a method template, or even overload it. 3774 template <typename T> 3775 bool MatchAndExplain(T* p, 3776 MatchResultListener* /* listener */) const { 3777 return p != NULL; 3778 } 3779 3780 // Describes the property of a value matching this matcher. 3781 void DescribeTo(std::ostream* os) const { *os << "is not NULL"; } 3782 3783 // Describes the property of a value NOT matching this matcher. 3784 void DescribeNegationTo(std::ostream* os) const { *os << "is NULL"; } 3785}; 3786 3787// To construct a polymorphic matcher, pass an instance of the class 3788// to MakePolymorphicMatcher(). Note the return type. 3789PolymorphicMatcher<NotNullMatcher> NotNull() { 3790 return MakePolymorphicMatcher(NotNullMatcher()); 3791} 3792 3793... 3794 3795 EXPECT_CALL(foo, Bar(NotNull())); // The argument must be a non-NULL pointer. 3796``` 3797 3798{: .callout .note} 3799**Note:** Your polymorphic matcher class does **not** need to inherit from 3800`MatcherInterface` or any other class, and its methods do **not** need to be 3801virtual. 3802 3803Like in a monomorphic matcher, you may explain the match result by streaming 3804additional information to the `listener` argument in `MatchAndExplain()`. 3805 3806### Writing New Cardinalities 3807 3808A cardinality is used in `Times()` to tell gMock how many times you expect a 3809call to occur. It doesn't have to be exact. For example, you can say 3810`AtLeast(5)` or `Between(2, 4)`. 3811 3812If the [built-in set](gmock_cheat_sheet.md#CardinalityList) of cardinalities 3813doesn't suit you, you are free to define your own by implementing the following 3814interface (in namespace `testing`): 3815 3816```cpp 3817class CardinalityInterface { 3818 public: 3819 virtual ~CardinalityInterface(); 3820 3821 // Returns true if and only if call_count calls will satisfy this cardinality. 3822 virtual bool IsSatisfiedByCallCount(int call_count) const = 0; 3823 3824 // Returns true if and only if call_count calls will saturate this 3825 // cardinality. 3826 virtual bool IsSaturatedByCallCount(int call_count) const = 0; 3827 3828 // Describes self to an ostream. 3829 virtual void DescribeTo(std::ostream* os) const = 0; 3830}; 3831``` 3832 3833For example, to specify that a call must occur even number of times, you can 3834write 3835 3836```cpp 3837using ::testing::Cardinality; 3838using ::testing::CardinalityInterface; 3839using ::testing::MakeCardinality; 3840 3841class EvenNumberCardinality : public CardinalityInterface { 3842 public: 3843 bool IsSatisfiedByCallCount(int call_count) const override { 3844 return (call_count % 2) == 0; 3845 } 3846 3847 bool IsSaturatedByCallCount(int call_count) const override { 3848 return false; 3849 } 3850 3851 void DescribeTo(std::ostream* os) const { 3852 *os << "called even number of times"; 3853 } 3854}; 3855 3856Cardinality EvenNumber() { 3857 return MakeCardinality(new EvenNumberCardinality); 3858} 3859 3860... 3861 EXPECT_CALL(foo, Bar(3)) 3862 .Times(EvenNumber()); 3863``` 3864 3865### Writing New Actions Quickly {#QuickNewActions} 3866 3867If the built-in actions don't work for you, you can easily define your own one. 3868Just define a functor class with a (possibly templated) call operator, matching 3869the signature of your action. 3870 3871```cpp 3872struct Increment { 3873 template <typename T> 3874 T operator()(T* arg) { 3875 return ++(*arg); 3876 } 3877} 3878``` 3879 3880The same approach works with stateful functors (or any callable, really): 3881 3882``` 3883struct MultiplyBy { 3884 template <typename T> 3885 T operator()(T arg) { return arg * multiplier; } 3886 3887 int multiplier; 3888} 3889 3890// Then use: 3891// EXPECT_CALL(...).WillOnce(MultiplyBy{7}); 3892``` 3893 3894#### Legacy macro-based Actions 3895 3896Before C++11, the functor-based actions were not supported; the old way of 3897writing actions was through a set of `ACTION*` macros. We suggest to avoid them 3898in new code; they hide a lot of logic behind the macro, potentially leading to 3899harder-to-understand compiler errors. Nevertheless, we cover them here for 3900completeness. 3901 3902By writing 3903 3904```cpp 3905ACTION(name) { statements; } 3906``` 3907 3908in a namespace scope (i.e. not inside a class or function), you will define an 3909action with the given name that executes the statements. The value returned by 3910`statements` will be used as the return value of the action. Inside the 3911statements, you can refer to the K-th (0-based) argument of the mock function as 3912`argK`. For example: 3913 3914```cpp 3915ACTION(IncrementArg1) { return ++(*arg1); } 3916``` 3917 3918allows you to write 3919 3920```cpp 3921... WillOnce(IncrementArg1()); 3922``` 3923 3924Note that you don't need to specify the types of the mock function arguments. 3925Rest assured that your code is type-safe though: you'll get a compiler error if 3926`*arg1` doesn't support the `++` operator, or if the type of `++(*arg1)` isn't 3927compatible with the mock function's return type. 3928 3929Another example: 3930 3931```cpp 3932ACTION(Foo) { 3933 (*arg2)(5); 3934 Blah(); 3935 *arg1 = 0; 3936 return arg0; 3937} 3938``` 3939 3940defines an action `Foo()` that invokes argument #2 (a function pointer) with 5, 3941calls function `Blah()`, sets the value pointed to by argument #1 to 0, and 3942returns argument #0. 3943 3944For more convenience and flexibility, you can also use the following pre-defined 3945symbols in the body of `ACTION`: 3946 3947`argK_type` | The type of the K-th (0-based) argument of the mock function 3948:-------------- | :----------------------------------------------------------- 3949`args` | All arguments of the mock function as a tuple 3950`args_type` | The type of all arguments of the mock function as a tuple 3951`return_type` | The return type of the mock function 3952`function_type` | The type of the mock function 3953 3954For example, when using an `ACTION` as a stub action for mock function: 3955 3956```cpp 3957int DoSomething(bool flag, int* ptr); 3958``` 3959 3960we have: 3961 3962Pre-defined Symbol | Is Bound To 3963------------------ | --------------------------------- 3964`arg0` | the value of `flag` 3965`arg0_type` | the type `bool` 3966`arg1` | the value of `ptr` 3967`arg1_type` | the type `int*` 3968`args` | the tuple `(flag, ptr)` 3969`args_type` | the type `std::tuple<bool, int*>` 3970`return_type` | the type `int` 3971`function_type` | the type `int(bool, int*)` 3972 3973#### Legacy macro-based parameterized Actions 3974 3975Sometimes you'll want to parameterize an action you define. For that we have 3976another macro 3977 3978```cpp 3979ACTION_P(name, param) { statements; } 3980``` 3981 3982For example, 3983 3984```cpp 3985ACTION_P(Add, n) { return arg0 + n; } 3986``` 3987 3988will allow you to write 3989 3990```cpp 3991// Returns argument #0 + 5. 3992... WillOnce(Add(5)); 3993``` 3994 3995For convenience, we use the term *arguments* for the values used to invoke the 3996mock function, and the term *parameters* for the values used to instantiate an 3997action. 3998 3999Note that you don't need to provide the type of the parameter either. Suppose 4000the parameter is named `param`, you can also use the gMock-defined symbol 4001`param_type` to refer to the type of the parameter as inferred by the compiler. 4002For example, in the body of `ACTION_P(Add, n)` above, you can write `n_type` for 4003the type of `n`. 4004 4005gMock also provides `ACTION_P2`, `ACTION_P3`, and etc to support multi-parameter 4006actions. For example, 4007 4008```cpp 4009ACTION_P2(ReturnDistanceTo, x, y) { 4010 double dx = arg0 - x; 4011 double dy = arg1 - y; 4012 return sqrt(dx*dx + dy*dy); 4013} 4014``` 4015 4016lets you write 4017 4018```cpp 4019... WillOnce(ReturnDistanceTo(5.0, 26.5)); 4020``` 4021 4022You can view `ACTION` as a degenerated parameterized action where the number of 4023parameters is 0. 4024 4025You can also easily define actions overloaded on the number of parameters: 4026 4027```cpp 4028ACTION_P(Plus, a) { ... } 4029ACTION_P2(Plus, a, b) { ... } 4030``` 4031 4032### Restricting the Type of an Argument or Parameter in an ACTION 4033 4034For maximum brevity and reusability, the `ACTION*` macros don't ask you to 4035provide the types of the mock function arguments and the action parameters. 4036Instead, we let the compiler infer the types for us. 4037 4038Sometimes, however, we may want to be more explicit about the types. There are 4039several tricks to do that. For example: 4040 4041```cpp 4042ACTION(Foo) { 4043 // Makes sure arg0 can be converted to int. 4044 int n = arg0; 4045 ... use n instead of arg0 here ... 4046} 4047 4048ACTION_P(Bar, param) { 4049 // Makes sure the type of arg1 is const char*. 4050 ::testing::StaticAssertTypeEq<const char*, arg1_type>(); 4051 4052 // Makes sure param can be converted to bool. 4053 bool flag = param; 4054} 4055``` 4056 4057where `StaticAssertTypeEq` is a compile-time assertion in googletest that 4058verifies two types are the same. 4059 4060### Writing New Action Templates Quickly 4061 4062Sometimes you want to give an action explicit template parameters that cannot be 4063inferred from its value parameters. `ACTION_TEMPLATE()` supports that and can be 4064viewed as an extension to `ACTION()` and `ACTION_P*()`. 4065 4066The syntax: 4067 4068```cpp 4069ACTION_TEMPLATE(ActionName, 4070 HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m), 4071 AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; } 4072``` 4073 4074defines an action template that takes *m* explicit template parameters and *n* 4075value parameters, where *m* is in [1, 10] and *n* is in [0, 10]. `name_i` is the 4076name of the *i*-th template parameter, and `kind_i` specifies whether it's a 4077`typename`, an integral constant, or a template. `p_i` is the name of the *i*-th 4078value parameter. 4079 4080Example: 4081 4082```cpp 4083// DuplicateArg<k, T>(output) converts the k-th argument of the mock 4084// function to type T and copies it to *output. 4085ACTION_TEMPLATE(DuplicateArg, 4086 // Note the comma between int and k: 4087 HAS_2_TEMPLATE_PARAMS(int, k, typename, T), 4088 AND_1_VALUE_PARAMS(output)) { 4089 *output = T(std::get<k>(args)); 4090} 4091``` 4092 4093To create an instance of an action template, write: 4094 4095```cpp 4096ActionName<t1, ..., t_m>(v1, ..., v_n) 4097``` 4098 4099where the `t`s are the template arguments and the `v`s are the value arguments. 4100The value argument types are inferred by the compiler. For example: 4101 4102```cpp 4103using ::testing::_; 4104... 4105 int n; 4106 EXPECT_CALL(mock, Foo).WillOnce(DuplicateArg<1, unsigned char>(&n)); 4107``` 4108 4109If you want to explicitly specify the value argument types, you can provide 4110additional template arguments: 4111 4112```cpp 4113ActionName<t1, ..., t_m, u1, ..., u_k>(v1, ..., v_n) 4114``` 4115 4116where `u_i` is the desired type of `v_i`. 4117 4118`ACTION_TEMPLATE` and `ACTION`/`ACTION_P*` can be overloaded on the number of 4119value parameters, but not on the number of template parameters. Without the 4120restriction, the meaning of the following is unclear: 4121 4122```cpp 4123 OverloadedAction<int, bool>(x); 4124``` 4125 4126Are we using a single-template-parameter action where `bool` refers to the type 4127of `x`, or a two-template-parameter action where the compiler is asked to infer 4128the type of `x`? 4129 4130### Using the ACTION Object's Type 4131 4132If you are writing a function that returns an `ACTION` object, you'll need to 4133know its type. The type depends on the macro used to define the action and the 4134parameter types. The rule is relatively simple: 4135 4136 4137| Given Definition | Expression | Has Type | 4138| ----------------------------- | ------------------- | --------------------- | 4139| `ACTION(Foo)` | `Foo()` | `FooAction` | 4140| `ACTION_TEMPLATE(Foo, HAS_m_TEMPLATE_PARAMS(...), AND_0_VALUE_PARAMS())` | `Foo<t1, ..., t_m>()` | `FooAction<t1, ..., t_m>` | 4141| `ACTION_P(Bar, param)` | `Bar(int_value)` | `BarActionP<int>` | 4142| `ACTION_TEMPLATE(Bar, HAS_m_TEMPLATE_PARAMS(...), AND_1_VALUE_PARAMS(p1))` | `Bar<t1, ..., t_m>(int_value)` | `BarActionP<t1, ..., t_m, int>` | 4143| `ACTION_P2(Baz, p1, p2)` | `Baz(bool_value, int_value)` | `BazActionP2<bool, int>` | 4144| `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>` | 4145| ... | ... | ... | 4146 4147 4148Note that we have to pick different suffixes (`Action`, `ActionP`, `ActionP2`, 4149and etc) for actions with different numbers of value parameters, or the action 4150definitions cannot be overloaded on the number of them. 4151 4152### Writing New Monomorphic Actions {#NewMonoActions} 4153 4154While the `ACTION*` macros are very convenient, sometimes they are 4155inappropriate. For example, despite the tricks shown in the previous recipes, 4156they don't let you directly specify the types of the mock function arguments and 4157the action parameters, which in general leads to unoptimized compiler error 4158messages that can baffle unfamiliar users. They also don't allow overloading 4159actions based on parameter types without jumping through some hoops. 4160 4161An alternative to the `ACTION*` macros is to implement 4162`::testing::ActionInterface<F>`, where `F` is the type of the mock function in 4163which the action will be used. For example: 4164 4165```cpp 4166template <typename F> 4167class ActionInterface { 4168 public: 4169 virtual ~ActionInterface(); 4170 4171 // Performs the action. Result is the return type of function type 4172 // F, and ArgumentTuple is the tuple of arguments of F. 4173 // 4174 4175 // For example, if F is int(bool, const string&), then Result would 4176 // be int, and ArgumentTuple would be std::tuple<bool, const string&>. 4177 virtual Result Perform(const ArgumentTuple& args) = 0; 4178}; 4179``` 4180 4181```cpp 4182using ::testing::_; 4183using ::testing::Action; 4184using ::testing::ActionInterface; 4185using ::testing::MakeAction; 4186 4187typedef int IncrementMethod(int*); 4188 4189class IncrementArgumentAction : public ActionInterface<IncrementMethod> { 4190 public: 4191 int Perform(const std::tuple<int*>& args) override { 4192 int* p = std::get<0>(args); // Grabs the first argument. 4193 return *p++; 4194 } 4195}; 4196 4197Action<IncrementMethod> IncrementArgument() { 4198 return MakeAction(new IncrementArgumentAction); 4199} 4200 4201... 4202 EXPECT_CALL(foo, Baz(_)) 4203 .WillOnce(IncrementArgument()); 4204 4205 int n = 5; 4206 foo.Baz(&n); // Should return 5 and change n to 6. 4207``` 4208 4209### Writing New Polymorphic Actions {#NewPolyActions} 4210 4211The previous recipe showed you how to define your own action. This is all good, 4212except that you need to know the type of the function in which the action will 4213be used. Sometimes that can be a problem. For example, if you want to use the 4214action in functions with *different* types (e.g. like `Return()` and 4215`SetArgPointee()`). 4216 4217If an action can be used in several types of mock functions, we say it's 4218*polymorphic*. The `MakePolymorphicAction()` function template makes it easy to 4219define such an action: 4220 4221```cpp 4222namespace testing { 4223template <typename Impl> 4224PolymorphicAction<Impl> MakePolymorphicAction(const Impl& impl); 4225} // namespace testing 4226``` 4227 4228As an example, let's define an action that returns the second argument in the 4229mock function's argument list. The first step is to define an implementation 4230class: 4231 4232```cpp 4233class ReturnSecondArgumentAction { 4234 public: 4235 template <typename Result, typename ArgumentTuple> 4236 Result Perform(const ArgumentTuple& args) const { 4237 // To get the i-th (0-based) argument, use std::get(args). 4238 return std::get<1>(args); 4239 } 4240}; 4241``` 4242 4243This implementation class does *not* need to inherit from any particular class. 4244What matters is that it must have a `Perform()` method template. This method 4245template takes the mock function's arguments as a tuple in a **single** 4246argument, and returns the result of the action. It can be either `const` or not, 4247but must be invokable with exactly one template argument, which is the result 4248type. In other words, you must be able to call `Perform<R>(args)` where `R` is 4249the mock function's return type and `args` is its arguments in a tuple. 4250 4251Next, we use `MakePolymorphicAction()` to turn an instance of the implementation 4252class into the polymorphic action we need. It will be convenient to have a 4253wrapper for this: 4254 4255```cpp 4256using ::testing::MakePolymorphicAction; 4257using ::testing::PolymorphicAction; 4258 4259PolymorphicAction<ReturnSecondArgumentAction> ReturnSecondArgument() { 4260 return MakePolymorphicAction(ReturnSecondArgumentAction()); 4261} 4262``` 4263 4264Now, you can use this polymorphic action the same way you use the built-in ones: 4265 4266```cpp 4267using ::testing::_; 4268 4269class MockFoo : public Foo { 4270 public: 4271 MOCK_METHOD(int, DoThis, (bool flag, int n), (override)); 4272 MOCK_METHOD(string, DoThat, (int x, const char* str1, const char* str2), 4273 (override)); 4274}; 4275 4276 ... 4277 MockFoo foo; 4278 EXPECT_CALL(foo, DoThis).WillOnce(ReturnSecondArgument()); 4279 EXPECT_CALL(foo, DoThat).WillOnce(ReturnSecondArgument()); 4280 ... 4281 foo.DoThis(true, 5); // Will return 5. 4282 foo.DoThat(1, "Hi", "Bye"); // Will return "Hi". 4283``` 4284 4285### Teaching gMock How to Print Your Values 4286 4287When an uninteresting or unexpected call occurs, gMock prints the argument 4288values and the stack trace to help you debug. Assertion macros like 4289`EXPECT_THAT` and `EXPECT_EQ` also print the values in question when the 4290assertion fails. gMock and googletest do this using googletest's user-extensible 4291value printer. 4292 4293This printer knows how to print built-in C++ types, native arrays, STL 4294containers, and any type that supports the `<<` operator. For other types, it 4295prints the raw bytes in the value and hopes that you the user can figure it out. 4296[The GoogleTest advanced guide](advanced.md#teaching-googletest-how-to-print-your-values) 4297explains how to extend the printer to do a better job at printing your 4298particular type than to dump the bytes. 4299 4300## Useful Mocks Created Using gMock 4301 4302<!--#include file="includes/g3_testing_LOGs.md"--> 4303<!--#include file="includes/g3_mock_callbacks.md"--> 4304 4305### Mock std::function {#MockFunction} 4306 4307`std::function` is a general function type introduced in C++11. It is a 4308preferred way of passing callbacks to new interfaces. Functions are copiable, 4309and are not usually passed around by pointer, which makes them tricky to mock. 4310But fear not - `MockFunction` can help you with that. 4311 4312`MockFunction<R(T1, ..., Tn)>` has a mock method `Call()` with the signature: 4313 4314```cpp 4315 R Call(T1, ..., Tn); 4316``` 4317 4318It also has a `AsStdFunction()` method, which creates a `std::function` proxy 4319forwarding to Call: 4320 4321```cpp 4322 std::function<R(T1, ..., Tn)> AsStdFunction(); 4323``` 4324 4325To use `MockFunction`, first create `MockFunction` object and set up 4326expectations on its `Call` method. Then pass proxy obtained from 4327`AsStdFunction()` to the code you are testing. For example: 4328 4329```cpp 4330TEST(FooTest, RunsCallbackWithBarArgument) { 4331 // 1. Create a mock object. 4332 MockFunction<int(string)> mock_function; 4333 4334 // 2. Set expectations on Call() method. 4335 EXPECT_CALL(mock_function, Call("bar")).WillOnce(Return(1)); 4336 4337 // 3. Exercise code that uses std::function. 4338 Foo(mock_function.AsStdFunction()); 4339 // Foo's signature can be either of: 4340 // void Foo(const std::function<int(string)>& fun); 4341 // void Foo(std::function<int(string)> fun); 4342 4343 // 4. All expectations will be verified when mock_function 4344 // goes out of scope and is destroyed. 4345} 4346``` 4347 4348Remember that function objects created with `AsStdFunction()` are just 4349forwarders. If you create multiple of them, they will share the same set of 4350expectations. 4351 4352Although `std::function` supports unlimited number of arguments, `MockFunction` 4353implementation is limited to ten. If you ever hit that limit... well, your 4354callback has bigger problems than being mockable. :-) 4355