ca87cc72e2
- 208874130 Copybara tweaks, testing various round-trip sutuations(fu... by misterg <misterg@google.com> - 208880646 Fix header guards and remove special case copybara by misterg <misterg@google.com> - 208874252 Copybara tweaks for googletest reversible transform by misterg <misterg@google.com> - 208853103 Adding a flow to export PR from GitHub into Google3 and a... by misterg <misterg@google.com> - 208708150 Removing leakr-sensitive words. by misterg <misterg@google.com> - 208672083 Import of OSS PR 1665 by misterg <misterg@google.com> - 208663904 Remove LEAKR "author" warnings for googletest copybara ex... by misterg <misterg@google.com> - 208646244 Incrementally finalizing OSS<->google3 transforms by misterg <misterg@google.com> - 208548323 Move custom google3 only code to custom/ by misterg <misterg@google.com> - 208234974 Removed scrubs, replaced with reversible transforms by misterg <misterg@google.com> - 208211213 Move custom tests under custom by misterg <misterg@google.com> - 208082996 Replace of OSS insert with reversible replace by misterg <misterg@google.com> - 208072299 Replace scrubs with reversible replaces, incrementally ge... by misterg <misterg@google.com> - 208059357 Replace scrub with reversible replace by misterg <misterg@google.com> - 208055415 Fixing GCC brace warning that shows up in OSS with GCC8 a... by misterg <misterg@google.com> - 207933728 Incrementally getting close to the reversible transformat... by misterg <misterg@google.com> - 207917581 Removing stripping with replace dictionary entries to eas... by misterg <misterg@google.com> - 207911026 Incremental Tweaks, on the way to reversible google3<-> g... by misterg <misterg@google.com> - 207905179 Removing unnecessary comments stripping by misterg <misterg@google.com> - 207901741 Fix typo in Fuchsia death-test implementation. by Abseil Team <absl-team@google.com> - 207776408 Move custom tests into /custom by misterg <misterg@google.com> - 207746583 Remove stripping for printer for absl:variant by misterg <misterg@google.com> - 207733597 Suppress default exception handling for death-test proces... by Abseil Team <absl-team@google.com> - 207719598 Import of googletest from Github. by misterg <misterg@google.com> - 207283991 PR1673, extra parentheses in declaration cause GCC 8.1.1 ... by misterg <misterg@google.com> - 206986279 Fix Duplicate definition, (original in googletest-test_te... by misterg <misterg@google.com> - 206980794 Allow googletest-json-output unitest to handle supporting... by misterg <misterg@google.com> - 206957064 Refactor to avoid OSS round-trip transformation problems ... by misterg <misterg@google.com> - 206760733 Fixed weird syntax in these tests that was causing OSS tr... by misterg <misterg@google.com> - 206750694 Tweak copybara, by misterg <misterg@google.com> - 206611945 Make files consistent to enable copybara round-trip trans... by misterg <misterg@google.com> - 206589404 OSS changes to open source two more tests by misterg <misterg@google.com> - 206355044 Fixing copybara (was missing comment) by misterg <misterg@google.com> - 206323492 Make reversible transforms possible for Copybara OSS<->go... by misterg <misterg@google.com> - 206011852 Consolidate various copybara files into one file. by misterg <misterg@google.com> - 205999518 remove weird char, should be space. pump and generated .h... by misterg <misterg@google.com> - 205897244 Small cleanups to avoid potentially hard-to-reverse OSS t... by misterg <misterg@google.com> - 205894405 Simplifying include path for tests. by misterg <misterg@google.com> - 205892873 Removing obsolete files by misterg <misterg@google.com> - 205873647 Simplifying include path for samples. by misterg <misterg@google.com> - 205712910 Continue restructuring, will have common copybara file to... by misterg <misterg@google.com> - 205711819 Removing non-ASCII chars by misterg <misterg@google.com> - 205702635 Refactor internal googletest name to match OSS Name by misterg <misterg@google.com> - 205403311 Comments change by misterg <misterg@google.com> - 205246538 OSS community (https://github.com/google/googletest/pull/... by misterg <misterg@google.com> - 205242422 Moving RE2 into custom where it rightfully belongs by misterg <misterg@google.com> - 205138666 Add a 3-ary Property() matcher overload for ref-qualified... by Abseil Team <absl-team@google.com> - 205128154 Automated g4 rollback of changelist 205108639. by misterg <misterg@google.com> - 205108639 Moving RE2 into custom where it rightfully belongs by misterg <misterg@google.com> - 205102342 Comment link fix by misterg <misterg@google.com> - 205097052 OSS sync, still need to worry about not C++11 by misterg <misterg@google.com> - 205080271 Keeping up with the changes, ensure that the code still t... by misterg <misterg@google.com> - 204815384 Mark the various RE legacy versions of the matchers as de... by Abseil Team <absl-team@google.com> - 204744294 OSS, someone noticed that if GTEST_HAS_EXCEPTIONS is set ... by misterg <misterg@google.com> - 204363541 Add stacktrace support to the non-Google3 version of Goog... by Abseil Team <absl-team@google.com> - 204330832 Google Test: absl::variant is now open source, so add the by Abseil Team <absl-team@google.com> - 204130690 Bringing in OSS PR 1647 by misterg <misterg@google.com> - 203979061 Set 'reason' field for leakr.disable_check() transformati... by Abseil Team <absl-team@google.com> - 203954557 Fixing comments, otherwise copybara leaves extra "//" in ... by misterg <misterg@google.com> - 203487065 Correctly handle legacy regular expressions in googletest... by Abseil Team <absl-team@google.com> - 201997367 Remove references to GTEST_HAS_PROTOBUF_. by Abseil Team <absl-team@google.com> - 201735597 Upgrade gUnit from RE to RE2 -- Step 3/4 by Abseil Team <absl-team@google.com> - 201229160 Upgrade gUnit from RE to RE2 -- Step 1/4 by Abseil Team <absl-team@google.com> - 201228020 Remove extra copy of gunit samples - there should really ... by misterg <misterg@google.com> - 200602156 Eliminate GTEST_TEST_FILTER_ENV_VAR_. by Abseil Team <absl-team@google.com> - 200500026 Make RegisterTasks faster by Abseil Team <absl-team@google.com> - 200361990 Add IWYU pragmas to gmock headers. by Abseil Team <absl-team@google.com> - 200292286 Fix speling by Abseil Team <absl-team@google.com> - 200222319 Adding docs to copybara. by misterg <misterg@google.com> - 199815917 Fuchsia: Change fdio include path. by Abseil Team <absl-team@google.com> - 199195290 Remove launchpad dependency from Fuchsia. by Abseil Team <absl-team@google.com> - 199134849 Add printer for std::nullptr_t. by Abseil Team <absl-team@google.com> - 198710999 Properly decay variadic matchers by Abseil Team <absl-team@google.com> - 197733704 WIP - copybara script capable of google3-to-github by misterg <misterg@google.com> - 197166689 Keeping up, sync cl/197012432 to combined "googletest" di... by misterg <misterg@google.com> - 196253300 Keep up with changes,cl/196162435 by misterg <misterg@google.com> - 195816901 go/googletest-plan by misterg <misterg@google.com> - 195816542 Moving http://cl/167016557 and http://cl/195690905 into c... by misterg <misterg@google.com> - 195712930 Following up for http://cl/195677772 More fixing typos, p... by misterg <misterg@google.com> - 195702162 Moving http://cl/195020996 into combined dir by misterg <misterg@google.com> - 195677772 Fix typos, the original IWYU was by misterg <misterg@google.com> - 195249681 go/googletest-plan , Combine gUnit and gMock into third_p... by misterg <misterg@google.com> PiperOrigin-RevId: 208874130 |
||
---|---|---|
.. | ||
build-aux | ||
cmake | ||
docs | ||
include/gmock | ||
make | ||
msvc | ||
scripts | ||
src | ||
test | ||
CHANGES | ||
CMakeLists.txt | ||
configure.ac | ||
CONTRIBUTORS | ||
LICENSE | ||
Makefile.am | ||
README.md |
Google Mock
The Google C++ mocking 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.
Google mock:
- lets you create mock classes trivially using simple macros.
- supports a rich set of matchers and actions.
- handles unordered, partially ordered, or completely ordered expectations.
- is extensible by users.
We hope you find it useful!
Features
- Provides a declarative syntax for defining mocks.
- Can easily 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 an user extend it by defining new matchers and actions.
- Does not use exceptions.
- Is easy to learn and use.
Please see the project page above for more information as well as the mailing list for questions, discussions, and development. There is also an IRC channel on OFTC (irc.oftc.net) #gtest available. Please join us!
Please note that code under scripts/generator is from cppclean and released under the Apache License, which is different from Google Mock's license.
Getting Started
If you are new to the project, we suggest that you read the user documentation in the following order:
- Learn the basics of Google Test, if you choose to use Google Mock with it (recommended).
- Read Google Mock for Dummies.
- Read the instructions below on how to build Google Mock.
You can also watch Zhanyong's talk on Google Mock's usage and implementation.
Once you understand the basics, check out the rest of the docs:
- CheatSheet - all the commonly used stuff at a glance.
- CookBook - recipes for getting things done, including advanced techniques.
If you need help, please check the KnownIssues and FrequentlyAskedQuestions before posting a question on the discussion group.
Using Google Mock Without Google Test
Google Mock is not a testing framework itself. Instead, it needs a testing framework for writing tests. Google Mock works seamlessly with Google Test, but you can also use it with any C++ testing framework.
Requirements for End Users
Google Mock is implemented on top of Google Test, and depends on it. You must use the bundled version of Google Test when using Google Mock.
You can also easily configure Google Mock to work with another testing framework, although it will still need Google Test. Please read "Using_Google_Mock_with_Any_Testing_Framework" for instructions.
Google Mock depends on advanced C++ features and thus requires a more modern compiler. The following are needed to use Google Mock:
Linux Requirements
- GNU-compatible Make or "gmake"
- POSIX-standard shell
- POSIX(-2) Regular Expressions (regex.h)
- C++98-standard-compliant compiler (e.g. GCC 3.4 or newer)
Windows Requirements
- Microsoft Visual C++ 8.0 SP1 or newer
Mac OS X Requirements
- Mac OS X 10.4 Tiger or newer
- Developer Tools Installed
Requirements for Contributors
We welcome patches. If you plan to contribute a patch, you need to build Google Mock and its tests, which has further requirements:
- Automake version 1.9 or newer
- Autoconf version 2.59 or newer
- Libtool / Libtoolize
- Python version 2.3 or newer (for running some of the tests and re-generating certain source files from templates)
Building Google Mock
Using CMake
If you have CMake available, it is recommended that you follow the build instructions as described for Google Test.
If are using Google Mock with an existing CMake project, the section Incorporating Into An Existing CMake Project may be of particular interest. To make it work for Google Mock you will need to change
target_link_libraries(example gtest_main)
to
target_link_libraries(example gmock_main)
This works because gmock_main
library is compiled with Google Test.
However, it does not automatically add Google Test includes.
Therefore you will also have to change
if (CMAKE_VERSION VERSION_LESS 2.8.11)
include_directories("${gtest_SOURCE_DIR}/include")
endif()
to
if (CMAKE_VERSION VERSION_LESS 2.8.11)
include_directories(BEFORE SYSTEM
"${gtest_SOURCE_DIR}/include" "${gmock_SOURCE_DIR}/include")
else()
target_include_directories(gmock_main SYSTEM BEFORE INTERFACE
"${gtest_SOURCE_DIR}/include" "${gmock_SOURCE_DIR}/include")
endif()
This will addtionally mark Google Mock includes as system, which will
silence compiler warnings when compiling your tests using clang with
-Wpedantic -Wall -Wextra -Wconversion
.
Preparing to Build (Unix only)
If you are using a Unix system and plan to use the GNU Autotools build system to build Google Mock (described below), you'll need to configure it now.
To prepare the Autotools build system:
cd googlemock
autoreconf -fvi
To build Google Mock and your tests that use it, you need to tell your build system where to find its headers and source files. The exact way to do it depends on which build system you use, and is usually straightforward.
This section shows how you can integrate Google Mock into your existing build system.
Suppose you put Google Mock in directory ${GMOCK_DIR}
and Google Test
in ${GTEST_DIR}
(the latter is ${GMOCK_DIR}/gtest
by default). To
build Google Mock, create a library build target (or a project as
called by Visual Studio and Xcode) to compile
${GTEST_DIR}/src/gtest-all.cc and ${GMOCK_DIR}/src/gmock-all.cc
with
${GTEST_DIR}/include and ${GMOCK_DIR}/include
in the system header search path, and
${GTEST_DIR} and ${GMOCK_DIR}
in the normal header search path. Assuming a Linux-like system and gcc, something like the following will do:
g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
-isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \
-pthread -c ${GTEST_DIR}/src/gtest-all.cc
g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
-isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \
-pthread -c ${GMOCK_DIR}/src/gmock-all.cc
ar -rv libgmock.a gtest-all.o gmock-all.o
(We need -pthread as Google Test and Google Mock use threads.)
Next, you should compile your test source file with ${GTEST_DIR}/include and ${GMOCK_DIR}/include in the header search path, and link it with gmock and any other necessary libraries:
g++ -isystem ${GTEST_DIR}/include -isystem ${GMOCK_DIR}/include \
-pthread path/to/your_test.cc libgmock.a -o your_test
As an example, the make/ directory contains a Makefile that you can use to build Google Mock on systems where GNU make is available (e.g. Linux, Mac OS X, and Cygwin). It doesn't try to build Google Mock's own tests. Instead, it just builds the Google Mock library and a sample test. You can use it as a starting point for your own build script.
If the default settings are correct for your environment, the following commands should succeed:
cd ${GMOCK_DIR}/make
make
./gmock_test
If you see errors, try to tweak the contents of make/Makefile to make them go away.
Windows
The msvc/2005 directory contains VC++ 2005 projects and the msvc/2010 directory contains VC++ 2010 projects for building Google Mock and selected tests.
Change to the appropriate directory and run "msbuild gmock.sln" to
build the library and tests (or open the gmock.sln in the MSVC IDE).
If you want to create your own project to use with Google Mock, you'll
have to configure it to use the gmock_config
propety sheet. For that:
- Open the Property Manager window (View | Other Windows | Property Manager)
- Right-click on your project and select "Add Existing Property Sheet..."
- Navigate to
gmock_config.vsprops
orgmock_config.props
and select it. - In Project Properties | Configuration Properties | General | Additional Include Directories, type /include.
Tweaking Google Mock
Google Mock can be used in diverse environments. The default
configuration may not work (or may not work well) out of the box in
some environments. However, you can easily tweak Google Mock by
defining control macros on the compiler command line. Generally,
these macros are named like GTEST_XYZ
and you define them to either 1
or 0 to enable or disable a certain feature.
We list the most frequently used macros below. For a complete list, see file ${GTEST_DIR}/include/gtest/internal/gtest-port.h.
Choosing a TR1 Tuple Library
Google Mock uses the C++ Technical Report 1 (TR1) tuple library heavily. Unfortunately TR1 tuple is not yet widely available with all compilers. The good news is that Google Test 1.4.0+ implements a subset of TR1 tuple that's enough for Google Mock's need. Google Mock will automatically use that implementation when the compiler doesn't provide TR1 tuple.
Usually you don't need to care about which tuple library Google Test and Google Mock use. However, if your project already uses TR1 tuple, you need to tell Google Test and Google Mock to use the same TR1 tuple library the rest of your project uses, or the two tuple implementations will clash. To do that, add
-DGTEST_USE_OWN_TR1_TUPLE=0
to the compiler flags while compiling Google Test, Google Mock, and your tests. If you want to force Google Test and Google Mock to use their own tuple library, just add
-DGTEST_USE_OWN_TR1_TUPLE=1
to the compiler flags instead.
If you want to use Boost's TR1 tuple library with Google Mock, please refer to the Boost website (http://www.boost.org/) for how to obtain it and set it up.
As a Shared Library (DLL)
Google Mock is compact, so most users can build and link it as a static library for the simplicity. Google Mock can be used as a DLL, but the same DLL must contain Google Test as well. See Google Test's README for instructions on how to set up necessary compiler settings.
Tweaking Google Mock
Most of Google Test's control macros apply to Google Mock as well. Please see Google Test's README for how to tweak them.
Upgrading from an Earlier Version
We strive to keep Google Mock releases backward compatible. Sometimes, though, we have to make some breaking changes for the users' long-term benefits. This section describes what you'll need to do if you are upgrading from an earlier version of Google Mock.
Upgrading from 1.1.0 or Earlier
You may need to explicitly enable or disable Google Test's own TR1 tuple library. See the instructions in section "Choosing a TR1 Tuple Library".
Upgrading from 1.4.0 or Earlier
On platforms where the pthread library is available, Google Test and Google Mock use it in order to be thread-safe. For this to work, you may need to tweak your compiler and/or linker flags. Please see the "Multi-threaded Tests" section in file Google Test's README for what you may need to do.
If you have custom matchers defined using MatcherInterface
or
MakePolymorphicMatcher()
, you'll need to update their definitions to
use the new matcher API (
monomorphic,
polymorphic).
Matchers defined using MATCHER()
or MATCHER_P*()
aren't affected.
Happy testing!