This header-only library implements gmock functionality for global functions.
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.
- gmock version 1.8.1-1.15.2 (older versions may work too but they are not covered by CI)
- gcc/clang/msvc
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.
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. ON_GLOBAL_NICE_CALL
can be used to set default behavior with suppressed warning when this mock was actually called.
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
The after clause can't be using with gmock-global, use Sequences
instead.
Take a look at the test sample.
gmock-global is licensed under the MIT License. You can freely use it in your commercial or opensource software.
- Added ON_GLOBAL_CALL (#4)
- Segmentation fault when executing tests on a function that has been mocked in another test (#2)
- Specified compatibility with gtest 1.8.1
- Fixed warnings
- Initial public release