Googletest export

Add general explanation of MOCK_METHOD, including list of supported qualifiers.

PiperOrigin-RevId: 262077180
This commit is contained in:
Abseil Team 2019-08-07 03:19:07 -04:00 committed by Gennadiy Civil
parent 79690c5375
commit dd5402d9d4

View File

@ -12,12 +12,36 @@ brevity, but you should do it in your own code.
### Creating Mock Classes
Mock classes are defined as normal classes, using the `MOCK_METHOD` macro to
generate mocked methods. The macro gets 3 or 4 parameters:
```cpp
class MyMock {
public:
MOCK_METHOD(ReturnType, MethodName, (Args...));
MOCK_METHOD(ReturnType, MethodName, (Args...), (Specs...));
};
```
The first 3 parameters are simply the method declaration, split into 3 parts.
The 4th parameter accepts a closed list of qualifiers, which affect the
generated method:
* **`const`** - Makes the mocked method a `const` method. Required if
overriding a `const` method.
* **`override`** - Marks the method with `override`. Recommended if overriding
a `virtual` method.
* **`noexcept`** - Marks the method with `noexcept`. Required if overriding a
`noexcept` method.
* **`Calltype(...)`** - Sets the call type for the method (e.g. to
`STDMETHODCALLTYPE`), useful in Windows.
#### Dealing with unprotected commas
Unprotected commas, i.e. commas which are not surrounded by parentheses, prevent
`MOCK_METHOD` from parsing its arguments correctly:
```cpp
```cpp {.bad}
class MockFoo {
public:
MOCK_METHOD(std::pair<bool, int>, GetPair, ()); // Won't compile!
@ -27,7 +51,7 @@ class MockFoo {
Solution 1 - wrap with parentheses:
```cpp
```cpp {.good}
class MockFoo {
public:
MOCK_METHOD((std::pair<bool, int>), GetPair, ());
@ -40,7 +64,7 @@ invalid C++. `MOCK_METHOD` removes the parentheses.
Solution 2 - define an alias:
```cpp
```cpp {.good}
class MockFoo {
public:
using BoolAndInt = std::pair<bool, int>;