Home | History | Annotate | only in /external/googletest/googlemock
Up to higher level directory
NameDateSize
Android.bp06-Dec-20172.2K
Android.mk06-Dec-20173.3K
build-aux/06-Dec-2017
CHANGES06-Dec-20175.4K
CMakeLists.txt06-Dec-20177.8K
configure.ac06-Dec-20176.1K
CONTRIBUTORS06-Dec-20171.3K
docs/06-Dec-2017
include/06-Dec-2017
LICENSE06-Dec-20171.4K
make/06-Dec-2017
Makefile.am06-Dec-20177.4K
MODULE_LICENSE_BSD_LIKE06-Dec-20170
msvc/06-Dec-2017
NOTICE06-Dec-20171.4K
README.md06-Dec-201713.1K
scripts/06-Dec-2017
src/06-Dec-2017
test/06-Dec-2017

README.md

      1 ## Google Mock ##
      2 
      3 The Google C++ mocking framework.
      4 
      5 ### Overview ###
      6 
      7 Google's framework for writing and using C++ mock classes.
      8 It can help you derive better designs of your system and write better tests.
      9 
     10 It is inspired by:
     11 
     12   * [jMock](http://www.jmock.org/),
     13   * [EasyMock](http://www.easymock.org/), and
     14   * [Hamcrest](http://code.google.com/p/hamcrest/),
     15 
     16 and designed with C++'s specifics in mind.
     17 
     18 Google mock:
     19 
     20   * lets you create mock classes trivially using simple macros.
     21   * supports a rich set of matchers and actions.
     22   * handles unordered, partially ordered, or completely ordered expectations.
     23   * is extensible by users.
     24 
     25 We hope you find it useful!
     26 
     27 ### Features ###
     28 
     29   * Provides a declarative syntax for defining mocks.
     30   * Can easily define partial (hybrid) mocks, which are a cross of real
     31     and mock objects.
     32   * Handles functions of arbitrary types and overloaded functions.
     33   * Comes with a rich set of matchers for validating function arguments.
     34   * Uses an intuitive syntax for controlling the behavior of a mock.
     35   * Does automatic verification of expectations (no record-and-replay needed).
     36   * Allows arbitrary (partial) ordering constraints on
     37     function calls to be expressed,.
     38   * Lets a user extend it by defining new matchers and actions.
     39   * Does not use exceptions.
     40   * Is easy to learn and use.
     41 
     42 Please see the project page above for more information as well as the
     43 mailing list for questions, discussions, and development.  There is
     44 also an IRC channel on OFTC (irc.oftc.net) #gtest available.  Please
     45 join us!
     46 
     47 Please note that code under [scripts/generator](scripts/generator/) is
     48 from [cppclean](http://code.google.com/p/cppclean/) and released under
     49 the Apache License, which is different from Google Mock's license.
     50 
     51 ## Getting Started ##
     52 
     53 If you are new to the project, we suggest that you read the user
     54 documentation in the following order:
     55 
     56   * Learn the [basics](../../master/googletest/docs/Primer.md) of
     57     Google Test, if you choose to use Google Mock with it (recommended).
     58   * Read [Google Mock for Dummies](../../master/googlemock/docs/ForDummies.md).
     59   * Read the instructions below on how to build Google Mock.
     60 
     61 You can also watch Zhanyong's [talk](http://www.youtube.com/watch?v=sYpCyLI47rM) on Google Mock's usage and implementation.
     62 
     63 Once you understand the basics, check out the rest of the docs:
     64 
     65   * [CheatSheet](../../master/googlemock/docs/CheatSheet.md) - all the commonly used stuff
     66     at a glance.
     67   * [CookBook](../../master/googlemock/docs/CookBook.md) - recipes for getting things done,
     68     including advanced techniques.
     69 
     70 If you need help, please check the
     71 [KnownIssues](docs/KnownIssues.md) and
     72 [FrequentlyAskedQuestions](docs/FrequentlyAskedQuestions.md) before
     73 posting a question on the
     74 [discussion group](http://groups.google.com/group/googlemock).
     75 
     76 
     77 ### Using Google Mock Without Google Test ###
     78 
     79 Google Mock is not a testing framework itself.  Instead, it needs a
     80 testing framework for writing tests.  Google Mock works seamlessly
     81 with [Google Test](http://code.google.com/p/googletest/), but
     82 you can also use it with [any C++ testing framework](../../master/googlemock/docs/ForDummies.md#using-google-mock-with-any-testing-framework).
     83 
     84 ### Requirements for End Users ###
     85 
     86 Google Mock is implemented on top of [Google Test](
     87 http://github.com/google/googletest/), and depends on it.
     88 You must use the bundled version of Google Test when using Google Mock.
     89 
     90 You can also easily configure Google Mock to work with another testing
     91 framework, although it will still need Google Test.  Please read
     92 ["Using_Google_Mock_with_Any_Testing_Framework"](
     93     ../../master/googlemock/docs/ForDummies.md#using-google-mock-with-any-testing-framework)
     94 for instructions.
     95 
     96 Google Mock depends on advanced C++ features and thus requires a more
     97 modern compiler. The following are needed to use Google Mock:
     98 
     99 #### Linux Requirements ####
    100 
    101   * GNU-compatible Make or "gmake"
    102   * POSIX-standard shell
    103   * POSIX(-2) Regular Expressions (regex.h)
    104   * C++98-standard-compliant compiler (e.g. GCC 3.4 or newer)
    105 
    106 #### Windows Requirements ####
    107 
    108   * Microsoft Visual C++ 8.0 SP1 or newer
    109 
    110 #### Mac OS X Requirements ####
    111 
    112   * Mac OS X 10.4 Tiger or newer
    113   * Developer Tools Installed
    114 
    115 ### Requirements for Contributors ###
    116 
    117 We welcome patches. If you plan to contribute a patch, you need to
    118 build Google Mock and its tests, which has further requirements:
    119 
    120   * Automake version 1.9 or newer
    121   * Autoconf version 2.59 or newer
    122   * Libtool / Libtoolize
    123   * Python version 2.3 or newer (for running some of the tests and
    124     re-generating certain source files from templates)
    125 
    126 ### Building Google Mock ###
    127 
    128 If you have CMake available, it is recommended that you follow the
    129 [build instructions][gtest_cmakebuild]
    130 as described for Google Test. If are using Google Mock with an
    131 existing CMake project, the section
    132 [Incorporating Into An Existing CMake Project][gtest_incorpcmake]
    133 may be of particular interest. Otherwise, the following sections
    134 detail how to build Google Mock without CMake.
    135 
    136 #### Preparing to Build (Unix only) ####
    137 
    138 If you are using a Unix system and plan to use the GNU Autotools build
    139 system to build Google Mock (described below), you'll need to
    140 configure it now.
    141 
    142 To prepare the Autotools build system:
    143 
    144     cd googlemock
    145     autoreconf -fvi
    146 
    147 To build Google Mock and your tests that use it, you need to tell your
    148 build system where to find its headers and source files.  The exact
    149 way to do it depends on which build system you use, and is usually
    150 straightforward.
    151 
    152 This section shows how you can integrate Google Mock into your
    153 existing build system.
    154 
    155 Suppose you put Google Mock in directory `${GMOCK_DIR}` and Google Test
    156 in `${GTEST_DIR}` (the latter is `${GMOCK_DIR}/gtest` by default).  To
    157 build Google Mock, create a library build target (or a project as
    158 called by Visual Studio and Xcode) to compile
    159 
    160     ${GTEST_DIR}/src/gtest-all.cc and ${GMOCK_DIR}/src/gmock-all.cc
    161 
    162 with
    163 
    164     ${GTEST_DIR}/include and ${GMOCK_DIR}/include
    165 
    166 in the system header search path, and
    167 
    168     ${GTEST_DIR} and ${GMOCK_DIR}
    169 
    170 in the normal header search path.  Assuming a Linux-like system and gcc,
    171 something like the following will do:
    172 
    173     g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
    174         -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \
    175         -pthread -c ${GTEST_DIR}/src/gtest-all.cc
    176     g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
    177         -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \
    178         -pthread -c ${GMOCK_DIR}/src/gmock-all.cc
    179     ar -rv libgmock.a gtest-all.o gmock-all.o
    180 
    181 (We need -pthread as Google Test and Google Mock use threads.)
    182 
    183 Next, you should compile your test source file with
    184 ${GTEST\_DIR}/include and ${GMOCK\_DIR}/include in the header search
    185 path, and link it with gmock and any other necessary libraries:
    186 
    187     g++ -isystem ${GTEST_DIR}/include -isystem ${GMOCK_DIR}/include \
    188         -pthread path/to/your_test.cc libgmock.a -o your_test
    189 
    190 As an example, the make/ directory contains a Makefile that you can
    191 use to build Google Mock on systems where GNU make is available
    192 (e.g. Linux, Mac OS X, and Cygwin).  It doesn't try to build Google
    193 Mock's own tests.  Instead, it just builds the Google Mock library and
    194 a sample test.  You can use it as a starting point for your own build
    195 script.
    196 
    197 If the default settings are correct for your environment, the
    198 following commands should succeed:
    199 
    200     cd ${GMOCK_DIR}/make
    201     make
    202     ./gmock_test
    203 
    204 If you see errors, try to tweak the contents of
    205 [make/Makefile](make/Makefile) to make them go away.
    206 
    207 ### Windows ###
    208 
    209 The msvc/2005 directory contains VC++ 2005 projects and the msvc/2010
    210 directory contains VC++ 2010 projects for building Google Mock and
    211 selected tests.
    212 
    213 Change to the appropriate directory and run "msbuild gmock.sln" to
    214 build the library and tests (or open the gmock.sln in the MSVC IDE).
    215 If you want to create your own project to use with Google Mock, you'll
    216 have to configure it to use the `gmock_config` propety sheet.  For that:
    217 
    218  * Open the Property Manager window (View | Other Windows | Property Manager)
    219  * Right-click on your project and select "Add Existing Property Sheet..."
    220  * Navigate to `gmock_config.vsprops` or `gmock_config.props` and select it.
    221  * In Project Properties | Configuration Properties | General | Additional
    222    Include Directories, type <path to Google Mock>/include.
    223 
    224 ### Tweaking Google Mock ###
    225 
    226 Google Mock can be used in diverse environments.  The default
    227 configuration may not work (or may not work well) out of the box in
    228 some environments.  However, you can easily tweak Google Mock by
    229 defining control macros on the compiler command line.  Generally,
    230 these macros are named like `GTEST_XYZ` and you define them to either 1
    231 or 0 to enable or disable a certain feature.
    232 
    233 We list the most frequently used macros below.  For a complete list,
    234 see file [${GTEST\_DIR}/include/gtest/internal/gtest-port.h](
    235 ../googletest/include/gtest/internal/gtest-port.h).
    236 
    237 ### Choosing a TR1 Tuple Library ###
    238 
    239 Google Mock uses the C++ Technical Report 1 (TR1) tuple library
    240 heavily.  Unfortunately TR1 tuple is not yet widely available with all
    241 compilers.  The good news is that Google Test 1.4.0+ implements a
    242 subset of TR1 tuple that's enough for Google Mock's need.  Google Mock
    243 will automatically use that implementation when the compiler doesn't
    244 provide TR1 tuple.
    245 
    246 Usually you don't need to care about which tuple library Google Test
    247 and Google Mock use.  However, if your project already uses TR1 tuple,
    248 you need to tell Google Test and Google Mock to use the same TR1 tuple
    249 library the rest of your project uses, or the two tuple
    250 implementations will clash.  To do that, add
    251 
    252     -DGTEST_USE_OWN_TR1_TUPLE=0
    253 
    254 to the compiler flags while compiling Google Test, Google Mock, and
    255 your tests.  If you want to force Google Test and Google Mock to use
    256 their own tuple library, just add
    257 
    258     -DGTEST_USE_OWN_TR1_TUPLE=1
    259 
    260 to the compiler flags instead.
    261 
    262 If you want to use Boost's TR1 tuple library with Google Mock, please
    263 refer to the Boost website (http://www.boost.org/) for how to obtain
    264 it and set it up.
    265 
    266 ### As a Shared Library (DLL) ###
    267 
    268 Google Mock is compact, so most users can build and link it as a static
    269 library for the simplicity.  Google Mock can be used as a DLL, but the
    270 same DLL must contain Google Test as well.  See
    271 [Google Test's README][gtest_readme]
    272 for instructions on how to set up necessary compiler settings.
    273 
    274 ### Tweaking Google Mock ###
    275 
    276 Most of Google Test's control macros apply to Google Mock as well.
    277 Please see [Google Test's README][gtest_readme] for how to tweak them.
    278 
    279 ### Upgrading from an Earlier Version ###
    280 
    281 We strive to keep Google Mock releases backward compatible.
    282 Sometimes, though, we have to make some breaking changes for the
    283 users' long-term benefits.  This section describes what you'll need to
    284 do if you are upgrading from an earlier version of Google Mock.
    285 
    286 #### Upgrading from 1.1.0 or Earlier ####
    287 
    288 You may need to explicitly enable or disable Google Test's own TR1
    289 tuple library.  See the instructions in section "[Choosing a TR1 Tuple
    290 Library](../googletest/#choosing-a-tr1-tuple-library)".
    291 
    292 #### Upgrading from 1.4.0 or Earlier ####
    293 
    294 On platforms where the pthread library is available, Google Test and
    295 Google Mock use it in order to be thread-safe.  For this to work, you
    296 may need to tweak your compiler and/or linker flags.  Please see the
    297 "[Multi-threaded Tests](../googletest#multi-threaded-tests
    298 )" section in file Google Test's README for what you may need to do.
    299 
    300 If you have custom matchers defined using `MatcherInterface` or
    301 `MakePolymorphicMatcher()`, you'll need to update their definitions to
    302 use the new matcher API (
    303 [monomorphic](http://code.google.com/p/googlemock/wiki/CookBook#Writing_New_Monomorphic_Matchers),
    304 [polymorphic](http://code.google.com/p/googlemock/wiki/CookBook#Writing_New_Polymorphic_Matchers)).
    305 Matchers defined using `MATCHER()` or `MATCHER_P*()` aren't affected.
    306 
    307 ### Developing Google Mock ###
    308 
    309 This section discusses how to make your own changes to Google Mock.
    310 
    311 #### Testing Google Mock Itself ####
    312 
    313 To make sure your changes work as intended and don't break existing
    314 functionality, you'll want to compile and run Google Test's own tests.
    315 For that you'll need Autotools.  First, make sure you have followed
    316 the instructions above to configure Google Mock.
    317 Then, create a build output directory and enter it.  Next,
    318 
    319     ${GMOCK_DIR}/configure  # try --help for more info
    320 
    321 Once you have successfully configured Google Mock, the build steps are
    322 standard for GNU-style OSS packages.
    323 
    324     make        # Standard makefile following GNU conventions
    325     make check  # Builds and runs all tests - all should pass.
    326 
    327 Note that when building your project against Google Mock, you are building
    328 against Google Test as well.  There is no need to configure Google Test
    329 separately.
    330 
    331 #### Contributing a Patch ####
    332 
    333 We welcome patches.
    334 Please read the [Developer's Guide](docs/DevGuide.md)
    335 for how you can contribute. In particular, make sure you have signed
    336 the Contributor License Agreement, or we won't be able to accept the
    337 patch.
    338 
    339 Happy testing!
    340 
    341 [gtest_readme]: ../googletest/README.md "googletest"
    342 [gtest_cmakebuild]:  ../googletest/README.md#using-cmake "Using CMake"
    343 [gtest_incorpcmake]: ../googletest/README.md#incorporating-into-an-existing-cmake-project "Incorporating Into An Existing CMake Project"
    344