1*481dde66SAndroid Build Coastguard Worker# gMock Cheat Sheet 2*481dde66SAndroid Build Coastguard Worker 3*481dde66SAndroid Build Coastguard Worker## Defining a Mock Class 4*481dde66SAndroid Build Coastguard Worker 5*481dde66SAndroid Build Coastguard Worker### Mocking a Normal Class {#MockClass} 6*481dde66SAndroid Build Coastguard Worker 7*481dde66SAndroid Build Coastguard WorkerGiven 8*481dde66SAndroid Build Coastguard Worker 9*481dde66SAndroid Build Coastguard Worker```cpp 10*481dde66SAndroid Build Coastguard Workerclass Foo { 11*481dde66SAndroid Build Coastguard Worker public: 12*481dde66SAndroid Build Coastguard Worker virtual ~Foo(); 13*481dde66SAndroid Build Coastguard Worker virtual int GetSize() const = 0; 14*481dde66SAndroid Build Coastguard Worker virtual string Describe(const char* name) = 0; 15*481dde66SAndroid Build Coastguard Worker virtual string Describe(int type) = 0; 16*481dde66SAndroid Build Coastguard Worker virtual bool Process(Bar elem, int count) = 0; 17*481dde66SAndroid Build Coastguard Worker}; 18*481dde66SAndroid Build Coastguard Worker``` 19*481dde66SAndroid Build Coastguard Worker 20*481dde66SAndroid Build Coastguard Worker(note that `~Foo()` **must** be virtual) we can define its mock as 21*481dde66SAndroid Build Coastguard Worker 22*481dde66SAndroid Build Coastguard Worker```cpp 23*481dde66SAndroid Build Coastguard Worker#include <gmock/gmock.h> 24*481dde66SAndroid Build Coastguard Worker 25*481dde66SAndroid Build Coastguard Workerclass MockFoo : public Foo { 26*481dde66SAndroid Build Coastguard Worker public: 27*481dde66SAndroid Build Coastguard Worker MOCK_METHOD(int, GetSize, (), (const, override)); 28*481dde66SAndroid Build Coastguard Worker MOCK_METHOD(string, Describe, (const char* name), (override)); 29*481dde66SAndroid Build Coastguard Worker MOCK_METHOD(string, Describe, (int type), (override)); 30*481dde66SAndroid Build Coastguard Worker MOCK_METHOD(bool, Process, (Bar elem, int count), (override)); 31*481dde66SAndroid Build Coastguard Worker}; 32*481dde66SAndroid Build Coastguard Worker``` 33*481dde66SAndroid Build Coastguard Worker 34*481dde66SAndroid Build Coastguard WorkerTo create a "nice" mock, which ignores all uninteresting calls, a "naggy" mock, 35*481dde66SAndroid Build Coastguard Workerwhich warns on all uninteresting calls, or a "strict" mock, which treats them as 36*481dde66SAndroid Build Coastguard Workerfailures: 37*481dde66SAndroid Build Coastguard Worker 38*481dde66SAndroid Build Coastguard Worker```cpp 39*481dde66SAndroid Build Coastguard Workerusing ::testing::NiceMock; 40*481dde66SAndroid Build Coastguard Workerusing ::testing::NaggyMock; 41*481dde66SAndroid Build Coastguard Workerusing ::testing::StrictMock; 42*481dde66SAndroid Build Coastguard Worker 43*481dde66SAndroid Build Coastguard WorkerNiceMock<MockFoo> nice_foo; // The type is a subclass of MockFoo. 44*481dde66SAndroid Build Coastguard WorkerNaggyMock<MockFoo> naggy_foo; // The type is a subclass of MockFoo. 45*481dde66SAndroid Build Coastguard WorkerStrictMock<MockFoo> strict_foo; // The type is a subclass of MockFoo. 46*481dde66SAndroid Build Coastguard Worker``` 47*481dde66SAndroid Build Coastguard Worker 48*481dde66SAndroid Build Coastguard Worker{: .callout .note} 49*481dde66SAndroid Build Coastguard Worker**Note:** A mock object is currently naggy by default. We may make it nice by 50*481dde66SAndroid Build Coastguard Workerdefault in the future. 51*481dde66SAndroid Build Coastguard Worker 52*481dde66SAndroid Build Coastguard Worker### Mocking a Class Template {#MockTemplate} 53*481dde66SAndroid Build Coastguard Worker 54*481dde66SAndroid Build Coastguard WorkerClass templates can be mocked just like any class. 55*481dde66SAndroid Build Coastguard Worker 56*481dde66SAndroid Build Coastguard WorkerTo mock 57*481dde66SAndroid Build Coastguard Worker 58*481dde66SAndroid Build Coastguard Worker```cpp 59*481dde66SAndroid Build Coastguard Workertemplate <typename Elem> 60*481dde66SAndroid Build Coastguard Workerclass StackInterface { 61*481dde66SAndroid Build Coastguard Worker public: 62*481dde66SAndroid Build Coastguard Worker virtual ~StackInterface(); 63*481dde66SAndroid Build Coastguard Worker virtual int GetSize() const = 0; 64*481dde66SAndroid Build Coastguard Worker virtual void Push(const Elem& x) = 0; 65*481dde66SAndroid Build Coastguard Worker}; 66*481dde66SAndroid Build Coastguard Worker``` 67*481dde66SAndroid Build Coastguard Worker 68*481dde66SAndroid Build Coastguard Worker(note that all member functions that are mocked, including `~StackInterface()` 69*481dde66SAndroid Build Coastguard Worker**must** be virtual). 70*481dde66SAndroid Build Coastguard Worker 71*481dde66SAndroid Build Coastguard Worker```cpp 72*481dde66SAndroid Build Coastguard Workertemplate <typename Elem> 73*481dde66SAndroid Build Coastguard Workerclass MockStack : public StackInterface<Elem> { 74*481dde66SAndroid Build Coastguard Worker public: 75*481dde66SAndroid Build Coastguard Worker MOCK_METHOD(int, GetSize, (), (const, override)); 76*481dde66SAndroid Build Coastguard Worker MOCK_METHOD(void, Push, (const Elem& x), (override)); 77*481dde66SAndroid Build Coastguard Worker}; 78*481dde66SAndroid Build Coastguard Worker``` 79*481dde66SAndroid Build Coastguard Worker 80*481dde66SAndroid Build Coastguard Worker### Specifying Calling Conventions for Mock Functions 81*481dde66SAndroid Build Coastguard Worker 82*481dde66SAndroid Build Coastguard WorkerIf your mock function doesn't use the default calling convention, you can 83*481dde66SAndroid Build Coastguard Workerspecify it by adding `Calltype(convention)` to `MOCK_METHOD`'s 4th parameter. 84*481dde66SAndroid Build Coastguard WorkerFor example, 85*481dde66SAndroid Build Coastguard Worker 86*481dde66SAndroid Build Coastguard Worker```cpp 87*481dde66SAndroid Build Coastguard Worker MOCK_METHOD(bool, Foo, (int n), (Calltype(STDMETHODCALLTYPE))); 88*481dde66SAndroid Build Coastguard Worker MOCK_METHOD(int, Bar, (double x, double y), 89*481dde66SAndroid Build Coastguard Worker (const, Calltype(STDMETHODCALLTYPE))); 90*481dde66SAndroid Build Coastguard Worker``` 91*481dde66SAndroid Build Coastguard Worker 92*481dde66SAndroid Build Coastguard Workerwhere `STDMETHODCALLTYPE` is defined by `<objbase.h>` on Windows. 93*481dde66SAndroid Build Coastguard Worker 94*481dde66SAndroid Build Coastguard Worker## Using Mocks in Tests {#UsingMocks} 95*481dde66SAndroid Build Coastguard Worker 96*481dde66SAndroid Build Coastguard WorkerThe typical work flow is: 97*481dde66SAndroid Build Coastguard Worker 98*481dde66SAndroid Build Coastguard Worker1. Import the gMock names you need to use. All gMock symbols are in the 99*481dde66SAndroid Build Coastguard Worker `testing` namespace unless they are macros or otherwise noted. 100*481dde66SAndroid Build Coastguard Worker2. Create the mock objects. 101*481dde66SAndroid Build Coastguard Worker3. Optionally, set the default actions of the mock objects. 102*481dde66SAndroid Build Coastguard Worker4. Set your expectations on the mock objects (How will they be called? What 103*481dde66SAndroid Build Coastguard Worker will they do?). 104*481dde66SAndroid Build Coastguard Worker5. Exercise code that uses the mock objects; if necessary, check the result 105*481dde66SAndroid Build Coastguard Worker using googletest assertions. 106*481dde66SAndroid Build Coastguard Worker6. When a mock object is destructed, gMock automatically verifies that all 107*481dde66SAndroid Build Coastguard Worker expectations on it have been satisfied. 108*481dde66SAndroid Build Coastguard Worker 109*481dde66SAndroid Build Coastguard WorkerHere's an example: 110*481dde66SAndroid Build Coastguard Worker 111*481dde66SAndroid Build Coastguard Worker```cpp 112*481dde66SAndroid Build Coastguard Workerusing ::testing::Return; // #1 113*481dde66SAndroid Build Coastguard Worker 114*481dde66SAndroid Build Coastguard WorkerTEST(BarTest, DoesThis) { 115*481dde66SAndroid Build Coastguard Worker MockFoo foo; // #2 116*481dde66SAndroid Build Coastguard Worker 117*481dde66SAndroid Build Coastguard Worker ON_CALL(foo, GetSize()) // #3 118*481dde66SAndroid Build Coastguard Worker .WillByDefault(Return(1)); 119*481dde66SAndroid Build Coastguard Worker // ... other default actions ... 120*481dde66SAndroid Build Coastguard Worker 121*481dde66SAndroid Build Coastguard Worker EXPECT_CALL(foo, Describe(5)) // #4 122*481dde66SAndroid Build Coastguard Worker .Times(3) 123*481dde66SAndroid Build Coastguard Worker .WillRepeatedly(Return("Category 5")); 124*481dde66SAndroid Build Coastguard Worker // ... other expectations ... 125*481dde66SAndroid Build Coastguard Worker 126*481dde66SAndroid Build Coastguard Worker EXPECT_EQ(MyProductionFunction(&foo), "good"); // #5 127*481dde66SAndroid Build Coastguard Worker} // #6 128*481dde66SAndroid Build Coastguard Worker``` 129*481dde66SAndroid Build Coastguard Worker 130*481dde66SAndroid Build Coastguard Worker## Setting Default Actions {#OnCall} 131*481dde66SAndroid Build Coastguard Worker 132*481dde66SAndroid Build Coastguard WorkergMock has a **built-in default action** for any function that returns `void`, 133*481dde66SAndroid Build Coastguard Worker`bool`, a numeric value, or a pointer. In C++11, it will additionally returns 134*481dde66SAndroid Build Coastguard Workerthe default-constructed value, if one exists for the given type. 135*481dde66SAndroid Build Coastguard Worker 136*481dde66SAndroid Build Coastguard WorkerTo customize the default action for functions with return type `T`, use 137*481dde66SAndroid Build Coastguard Worker[`DefaultValue<T>`](reference/mocking.md#DefaultValue). For example: 138*481dde66SAndroid Build Coastguard Worker 139*481dde66SAndroid Build Coastguard Worker```cpp 140*481dde66SAndroid Build Coastguard Worker // Sets the default action for return type std::unique_ptr<Buzz> to 141*481dde66SAndroid Build Coastguard Worker // creating a new Buzz every time. 142*481dde66SAndroid Build Coastguard Worker DefaultValue<std::unique_ptr<Buzz>>::SetFactory( 143*481dde66SAndroid Build Coastguard Worker [] { return std::make_unique<Buzz>(AccessLevel::kInternal); }); 144*481dde66SAndroid Build Coastguard Worker 145*481dde66SAndroid Build Coastguard Worker // When this fires, the default action of MakeBuzz() will run, which 146*481dde66SAndroid Build Coastguard Worker // will return a new Buzz object. 147*481dde66SAndroid Build Coastguard Worker EXPECT_CALL(mock_buzzer_, MakeBuzz("hello")).Times(AnyNumber()); 148*481dde66SAndroid Build Coastguard Worker 149*481dde66SAndroid Build Coastguard Worker auto buzz1 = mock_buzzer_.MakeBuzz("hello"); 150*481dde66SAndroid Build Coastguard Worker auto buzz2 = mock_buzzer_.MakeBuzz("hello"); 151*481dde66SAndroid Build Coastguard Worker EXPECT_NE(buzz1, nullptr); 152*481dde66SAndroid Build Coastguard Worker EXPECT_NE(buzz2, nullptr); 153*481dde66SAndroid Build Coastguard Worker EXPECT_NE(buzz1, buzz2); 154*481dde66SAndroid Build Coastguard Worker 155*481dde66SAndroid Build Coastguard Worker // Resets the default action for return type std::unique_ptr<Buzz>, 156*481dde66SAndroid Build Coastguard Worker // to avoid interfere with other tests. 157*481dde66SAndroid Build Coastguard Worker DefaultValue<std::unique_ptr<Buzz>>::Clear(); 158*481dde66SAndroid Build Coastguard Worker``` 159*481dde66SAndroid Build Coastguard Worker 160*481dde66SAndroid Build Coastguard WorkerTo customize the default action for a particular method of a specific mock 161*481dde66SAndroid Build Coastguard Workerobject, use [`ON_CALL`](reference/mocking.md#ON_CALL). `ON_CALL` has a similar 162*481dde66SAndroid Build Coastguard Workersyntax to `EXPECT_CALL`, but it is used for setting default behaviors when you 163*481dde66SAndroid Build Coastguard Workerdo not require that the mock method is called. See 164*481dde66SAndroid Build Coastguard Worker[Knowing When to Expect](gmock_cook_book.md#UseOnCall) for a more detailed 165*481dde66SAndroid Build Coastguard Workerdiscussion. 166*481dde66SAndroid Build Coastguard Worker 167*481dde66SAndroid Build Coastguard Worker## Setting Expectations {#ExpectCall} 168*481dde66SAndroid Build Coastguard Worker 169*481dde66SAndroid Build Coastguard WorkerSee [`EXPECT_CALL`](reference/mocking.md#EXPECT_CALL) in the Mocking Reference. 170*481dde66SAndroid Build Coastguard Worker 171*481dde66SAndroid Build Coastguard Worker## Matchers {#MatcherList} 172*481dde66SAndroid Build Coastguard Worker 173*481dde66SAndroid Build Coastguard WorkerSee the [Matchers Reference](reference/matchers.md). 174*481dde66SAndroid Build Coastguard Worker 175*481dde66SAndroid Build Coastguard Worker## Actions {#ActionList} 176*481dde66SAndroid Build Coastguard Worker 177*481dde66SAndroid Build Coastguard WorkerSee the [Actions Reference](reference/actions.md). 178*481dde66SAndroid Build Coastguard Worker 179*481dde66SAndroid Build Coastguard Worker## Cardinalities {#CardinalityList} 180*481dde66SAndroid Build Coastguard Worker 181*481dde66SAndroid Build Coastguard WorkerSee the [`Times` clause](reference/mocking.md#EXPECT_CALL.Times) of 182*481dde66SAndroid Build Coastguard Worker`EXPECT_CALL` in the Mocking Reference. 183*481dde66SAndroid Build Coastguard Worker 184*481dde66SAndroid Build Coastguard Worker## Expectation Order 185*481dde66SAndroid Build Coastguard Worker 186*481dde66SAndroid Build Coastguard WorkerBy default, expectations can be matched in *any* order. If some or all 187*481dde66SAndroid Build Coastguard Workerexpectations must be matched in a given order, you can use the 188*481dde66SAndroid Build Coastguard Worker[`After` clause](reference/mocking.md#EXPECT_CALL.After) or 189*481dde66SAndroid Build Coastguard Worker[`InSequence` clause](reference/mocking.md#EXPECT_CALL.InSequence) of 190*481dde66SAndroid Build Coastguard Worker`EXPECT_CALL`, or use an [`InSequence` object](reference/mocking.md#InSequence). 191*481dde66SAndroid Build Coastguard Worker 192*481dde66SAndroid Build Coastguard Worker## Verifying and Resetting a Mock 193*481dde66SAndroid Build Coastguard Worker 194*481dde66SAndroid Build Coastguard WorkergMock will verify the expectations on a mock object when it is destructed, or 195*481dde66SAndroid Build Coastguard Workeryou can do it earlier: 196*481dde66SAndroid Build Coastguard Worker 197*481dde66SAndroid Build Coastguard Worker```cpp 198*481dde66SAndroid Build Coastguard Workerusing ::testing::Mock; 199*481dde66SAndroid Build Coastguard Worker... 200*481dde66SAndroid Build Coastguard Worker// Verifies and removes the expectations on mock_obj; 201*481dde66SAndroid Build Coastguard Worker// returns true if and only if successful. 202*481dde66SAndroid Build Coastguard WorkerMock::VerifyAndClearExpectations(&mock_obj); 203*481dde66SAndroid Build Coastguard Worker... 204*481dde66SAndroid Build Coastguard Worker// Verifies and removes the expectations on mock_obj; 205*481dde66SAndroid Build Coastguard Worker// also removes the default actions set by ON_CALL(); 206*481dde66SAndroid Build Coastguard Worker// returns true if and only if successful. 207*481dde66SAndroid Build Coastguard WorkerMock::VerifyAndClear(&mock_obj); 208*481dde66SAndroid Build Coastguard Worker``` 209*481dde66SAndroid Build Coastguard Worker 210*481dde66SAndroid Build Coastguard WorkerDo not set new expectations after verifying and clearing a mock after its use. 211*481dde66SAndroid Build Coastguard WorkerSetting expectations after code that exercises the mock has undefined behavior. 212*481dde66SAndroid Build Coastguard WorkerSee [Using Mocks in Tests](gmock_for_dummies.md#using-mocks-in-tests) for more 213*481dde66SAndroid Build Coastguard Workerinformation. 214*481dde66SAndroid Build Coastguard Worker 215*481dde66SAndroid Build Coastguard WorkerYou can also tell gMock that a mock object can be leaked and doesn't need to be 216*481dde66SAndroid Build Coastguard Workerverified: 217*481dde66SAndroid Build Coastguard Worker 218*481dde66SAndroid Build Coastguard Worker```cpp 219*481dde66SAndroid Build Coastguard WorkerMock::AllowLeak(&mock_obj); 220*481dde66SAndroid Build Coastguard Worker``` 221*481dde66SAndroid Build Coastguard Worker 222*481dde66SAndroid Build Coastguard Worker## Mock Classes 223*481dde66SAndroid Build Coastguard Worker 224*481dde66SAndroid Build Coastguard WorkergMock defines a convenient mock class template 225*481dde66SAndroid Build Coastguard Worker 226*481dde66SAndroid Build Coastguard Worker```cpp 227*481dde66SAndroid Build Coastguard Workerclass MockFunction<R(A1, ..., An)> { 228*481dde66SAndroid Build Coastguard Worker public: 229*481dde66SAndroid Build Coastguard Worker MOCK_METHOD(R, Call, (A1, ..., An)); 230*481dde66SAndroid Build Coastguard Worker}; 231*481dde66SAndroid Build Coastguard Worker``` 232*481dde66SAndroid Build Coastguard Worker 233*481dde66SAndroid Build Coastguard WorkerSee this [recipe](gmock_cook_book.md#UsingCheckPoints) for one application of 234*481dde66SAndroid Build Coastguard Workerit. 235*481dde66SAndroid Build Coastguard Worker 236*481dde66SAndroid Build Coastguard Worker## Flags 237*481dde66SAndroid Build Coastguard Worker 238*481dde66SAndroid Build Coastguard Worker| Flag | Description | 239*481dde66SAndroid Build Coastguard Worker| :----------------------------- | :---------------------------------------- | 240*481dde66SAndroid Build Coastguard Worker| `--gmock_catch_leaked_mocks=0` | Don't report leaked mock objects as failures. | 241*481dde66SAndroid Build Coastguard Worker| `--gmock_verbose=LEVEL` | Sets the default verbosity level (`info`, `warning`, or `error`) of Google Mock messages. | 242