Googletest export
Add general explanation of MOCK_METHOD, including list of supported qualifiers. PiperOrigin-RevId: 262077180
This commit is contained in:
		
				
					committed by
					
						
						Gennadiy Civil
					
				
			
			
				
	
			
			
			
						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>;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user