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