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