googletest/googlemock
Arthur O'Dwyer 4f002f1e23 VariadicMatcher needs a non-defaulted move constructor for compile-time performance.
We are about to remove all uses of GTEST_DISALLOW_ASSIGN_ in favor
of using the Rule of Zero everywhere.

Unfortunately, if we use the Rule of Zero here, then when the compiler
needs to figure out if VariadicMatcher is move-constructible, it will
recurse down into `tuple<Args...>`, which on libstdc++ recurses too deeply.

    In file included from googlemock/test/gmock-matchers_test.cc:43:
    In file included from googlemock/include/gmock/gmock-matchers.h:258:
    In file included from /usr/include/c++/5.5.0/algorithm:60:
    In file included from /usr/include/c++/5.5.0/utility:70:
    In file included from /usr/include/c++/5.5.0/bits/stl_pair.h:59:
    In file included from /usr/include/c++/5.5.0/bits/move.h:57:
    /usr/bin/include/c++/5.5.0/type_traits:115:26: fatal error:
          recursive template instantiation exceeded maximum depth of 256
        : public conditional<_B1::value, _B1, _B2>::type
                             ^

The move constructor is the only problematic case, for some unknown reason.
With GTEST_DISALLOW_ASSIGN_, the presence of a copy assignment operator
causes the move constructor to be non-declared, thus non-defaulted, thus
non-problematic. Without GTEST_DISALLOW_ASSIGN_, we have to do one of the
following:

- Default the copy constructor, so that the move constructor will be non-declared.

- Define our own non-defaulted move constructor.

...except that doing the latter STILL did not work!
Fortunately, the former (default the copy constructor, don't provide
any move constructor) both works in practice and is semantically
equivalent to the old code.
2020-04-16 19:12:52 -04:00
..
cmake Ensure that gtest/gmock pkgconfig requirements specify version 2020-03-21 06:38:09 -04:00
docs Googletest export 2020-04-16 13:32:42 -04:00
include/gmock VariadicMatcher needs a non-defaulted move constructor for compile-time performance. 2020-04-16 19:12:52 -04:00
scripts Googletest export 2020-02-11 15:50:18 -05:00
src Googletest export 2020-02-07 18:20:45 -05:00
test Merge pull request #2350 from adambadura:MockFunctionFromStdFunction 2020-03-24 17:32:16 -04:00
CMakeLists.txt Googletest export 2020-02-07 13:35:27 -05:00
CONTRIBUTORS move googlemock files into googlemock/ subdir 2015-08-25 17:47:18 -04:00
LICENSE move googlemock files into googlemock/ subdir 2015-08-25 17:47:18 -04:00
README.md Merge pull request #2353 from anttsov:patch-1 2019-08-02 11:32:15 -04:00

Googletest Mocking (gMock) Framework

Overview

Google's framework for writing and using C++ mock classes. It can help you derive better designs of your system and write better tests.

It is inspired by:

and designed with C++'s specifics in mind.

gMock:

  • provides a declarative syntax for defining mocks,
  • can define partial (hybrid) mocks, which are a cross of real and mock objects,
  • handles functions of arbitrary types and overloaded functions,
  • comes with a rich set of matchers for validating function arguments,
  • uses an intuitive syntax for controlling the behavior of a mock,
  • does automatic verification of expectations (no record-and-replay needed),
  • allows arbitrary (partial) ordering constraints on function calls to be expressed,
  • lets a user extend it by defining new matchers and actions.
  • does not use exceptions, and
  • is easy to learn and use.

Details and examples can be found here:

Please note that code under scripts/generator/ is from the cppclean project and under the Apache License, which is different from Google Mock's license.

Google Mock is a part of Google Test C++ testing framework and a subject to the same requirements.