gmock-global
gmock-global copied to clipboard
Provides ability to mock global functions with gmock
gmock-global 
This header-only library implements gmock functionality for global functions.
- Introduction
-
Usage
- Step 1: Adding includes
- Step 2: Declare mock global
- Known issues
- Samples
- License
-
Version history
- Version 1.0.2 (28 Aug 2019)
- Version 1.0.1 (19 Apr 2019)
- Version 1.0.0 (17 Oct 2017)
Introduction
Gmock is a C++ framework for writing mock classes. It is very convenient to create mock objects for mocking of methods. But gmock can not mock global functions. This problem is quite common but has no trivial solution. Gmock FAQ says you are doing something wrong if you need to mock static or global functions. However it is required in some cases and gmock-global provides such functionality.
Usage
Step 1: Adding includes
At first your project needs to know about gmock-global.
- Add
gmock-global/include
to the project include paths. - Add
#include <gmock-global/gmock-global.h>
after gmock include.
Step 2: Declare mock global
Syntax is most similar to gmock. For example, to mock function multiply
with two double
arguments and double
result you have to write declaration:
MOCK_GLOBAL_FUNC2(multiply, double(double, double));
You can check call count of such function using EXPECT_GLOBAL_CALL
macro, same as you used EXPECT_CALL
macro for classes:
EXPECT_GLOBAL_CALL(multiply, multiply(1, 2));
The .Times(...)
and other methods will be work too.
In result mocking of global double multiply(double, double)
looks like:
MOCK_GLOBAL_FUNC2(multiply, double(double, double));
...
TEST(TestGlobal, CanMultiplyGlobal)
{
EXPECT_GLOBAL_CALL(multiply, multiply(1, 2)).Times(1);
multiply(1, 2);
}
Also you can use ON_GLOBAL_CALL
to specify default behavior.
gmock-global supports more than 10 arguments with gtest version 1.8.1. But it requires gmock-more-args version 1.0.1 in case you use gtest version 1.8.0
Known issues
The after clause can't be using with gmock-global, use Sequences
instead.
Samples
Samples live in the separate repository
License
gmock-global is licensed under the MIT License. You can freely use it in your commercial or opensource software.
Version history
Version 1.0.2 (28 Aug 2019)
- Added ON_GLOBAL_CALL (#4)
- Segmentation fault when executing tests on a function that has been mocked in another test (#2)
Version 1.0.1 (19 Apr 2019)
- Specified compatibility with gtest 1.8.1
- Fixed warnings
Version 1.0.0 (17 Oct 2017)
- Initial public release