mirror of
https://github.com/google/googletest.git
synced 2024-12-26 17:41:03 +08:00
Googletest export
Add general explanation of MOCK_METHOD, including list of supported qualifiers. PiperOrigin-RevId: 262077180
This commit is contained in:
parent
79690c5375
commit
dd5402d9d4
@ -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>;
|
||||
|
Loading…
x
Reference in New Issue
Block a user