[9021] | 1 | Google C++ Mocking Framework |
---|
| 2 | ============================ |
---|
| 3 | |
---|
| 4 | http://code.google.com/p/googlemock/ |
---|
| 5 | |
---|
| 6 | Overview |
---|
| 7 | -------- |
---|
| 8 | |
---|
| 9 | Google's framework for writing and using C++ mock classes on a variety |
---|
| 10 | of platforms (Linux, Mac OS X, Windows, Windows CE, Symbian, etc). |
---|
| 11 | Inspired by jMock, EasyMock, and Hamcrest, and designed with C++'s |
---|
| 12 | specifics in mind, it can help you derive better designs of your |
---|
| 13 | system and write better tests. |
---|
| 14 | |
---|
| 15 | Google Mock: |
---|
| 16 | |
---|
| 17 | - provides a declarative syntax for defining mocks, |
---|
| 18 | - can easily define partial (hybrid) mocks, which are a cross of real |
---|
| 19 | and mock objects, |
---|
| 20 | - handles functions of arbitrary types and overloaded functions, |
---|
| 21 | - comes with a rich set of matchers for validating function arguments, |
---|
| 22 | - uses an intuitive syntax for controlling the behavior of a mock, |
---|
| 23 | - does automatic verification of expectations (no record-and-replay |
---|
| 24 | needed), |
---|
| 25 | - allows arbitrary (partial) ordering constraints on |
---|
| 26 | function calls to be expressed, |
---|
| 27 | - lets a user extend it by defining new matchers and actions. |
---|
| 28 | - does not use exceptions, and |
---|
| 29 | - is easy to learn and use. |
---|
| 30 | |
---|
| 31 | Please see the project page above for more information as well as the |
---|
| 32 | mailing list for questions, discussions, and development. There is |
---|
| 33 | also an IRC channel on OFTC (irc.oftc.net) #gtest available. Please |
---|
| 34 | join us! |
---|
| 35 | |
---|
| 36 | Please note that code under scripts/generator/ is from the cppclean |
---|
| 37 | project (http://code.google.com/p/cppclean/) and under the Apache |
---|
| 38 | License, which is different from Google Mock's license. |
---|
| 39 | |
---|
| 40 | Requirements for End Users |
---|
| 41 | -------------------------- |
---|
| 42 | |
---|
| 43 | Google Mock is implemented on top of the Google Test C++ testing |
---|
| 44 | framework (http://code.google.com/p/googletest/), and includes the |
---|
| 45 | latter as part of the SVN repositary and distribution package. You |
---|
| 46 | must use the bundled version of Google Test when using Google Mock, or |
---|
| 47 | you may get compiler/linker errors. |
---|
| 48 | |
---|
| 49 | You can also easily configure Google Mock to work with another testing |
---|
| 50 | framework of your choice; although it will still need Google Test as |
---|
| 51 | an internal dependency. Please read |
---|
| 52 | http://code.google.com/p/googlemock/wiki/ForDummies#Using_Google_Mock_with_Any_Testing_Framework |
---|
| 53 | for how to do it. |
---|
| 54 | |
---|
| 55 | Google Mock depends on advanced C++ features and thus requires a more |
---|
| 56 | modern compiler. The following are needed to use Google Mock: |
---|
| 57 | |
---|
| 58 | ### Linux Requirements ### |
---|
| 59 | |
---|
| 60 | These are the base requirements to build and use Google Mock from a source |
---|
| 61 | package (as described below): |
---|
| 62 | |
---|
| 63 | * GNU-compatible Make or "gmake" |
---|
| 64 | * POSIX-standard shell |
---|
| 65 | * POSIX(-2) Regular Expressions (regex.h) |
---|
| 66 | * C++98-standard-compliant compiler (e.g. GCC 3.4 or newer) |
---|
| 67 | |
---|
| 68 | ### Windows Requirements ### |
---|
| 69 | |
---|
| 70 | * Microsoft Visual C++ 8.0 SP1 or newer |
---|
| 71 | |
---|
| 72 | ### Mac OS X Requirements ### |
---|
| 73 | |
---|
| 74 | * Mac OS X 10.4 Tiger or newer |
---|
| 75 | * Developer Tools Installed |
---|
| 76 | |
---|
| 77 | Requirements for Contributors |
---|
| 78 | ----------------------------- |
---|
| 79 | |
---|
| 80 | We welcome patches. If you plan to contribute a patch, you need to |
---|
| 81 | build Google Mock and its own tests from an SVN checkout (described |
---|
| 82 | below), which has further requirements: |
---|
| 83 | |
---|
| 84 | * Automake version 1.9 or newer |
---|
| 85 | * Autoconf version 2.59 or newer |
---|
| 86 | * Libtool / Libtoolize |
---|
| 87 | * Python version 2.3 or newer (for running some of the tests and |
---|
| 88 | re-generating certain source files from templates) |
---|
| 89 | |
---|
| 90 | Getting the Source |
---|
| 91 | ------------------ |
---|
| 92 | |
---|
| 93 | There are two primary ways of getting Google Mock's source code: you |
---|
| 94 | can download a stable source release in your preferred archive format, |
---|
| 95 | or directly check out the source from our Subversion (SVN) repositary. |
---|
| 96 | The SVN checkout requires a few extra steps and some extra software |
---|
| 97 | packages on your system, but lets you track development and make |
---|
| 98 | patches much more easily, so we highly encourage it. |
---|
| 99 | |
---|
| 100 | ### Source Package ### |
---|
| 101 | |
---|
| 102 | Google Mock is released in versioned source packages which can be |
---|
| 103 | downloaded from the download page [1]. Several different archive |
---|
| 104 | formats are provided, but the only difference is the tools needed to |
---|
| 105 | extract their contents, and the size of the resulting file. Download |
---|
| 106 | whichever you are most comfortable with. |
---|
| 107 | |
---|
| 108 | [1] http://code.google.com/p/googlemock/downloads/list |
---|
| 109 | |
---|
| 110 | Once downloaded expand the archive using whichever tools you prefer |
---|
| 111 | for that type. This will always result in a new directory with the |
---|
| 112 | name "gmock-X.Y.Z" which contains all of the source code. Here are |
---|
| 113 | some examples on Linux: |
---|
| 114 | |
---|
| 115 | tar -xvzf gmock-X.Y.Z.tar.gz |
---|
| 116 | tar -xvjf gmock-X.Y.Z.tar.bz2 |
---|
| 117 | unzip gmock-X.Y.Z.zip |
---|
| 118 | |
---|
| 119 | ### SVN Checkout ### |
---|
| 120 | |
---|
| 121 | To check out the main branch (also known as the "trunk") of Google |
---|
| 122 | Mock, run the following Subversion command: |
---|
| 123 | |
---|
| 124 | svn checkout http://googlemock.googlecode.com/svn/trunk/ gmock-svn |
---|
| 125 | |
---|
| 126 | If you are using a *nix system and plan to use the GNU Autotools build |
---|
| 127 | system to build Google Mock (described below), you'll need to |
---|
| 128 | configure it now. Otherwise you are done with getting the source |
---|
| 129 | files. |
---|
| 130 | |
---|
| 131 | To prepare the Autotools build system, enter the target directory of |
---|
| 132 | the checkout command you used ('gmock-svn') and proceed with the |
---|
| 133 | following command: |
---|
| 134 | |
---|
| 135 | autoreconf -fvi |
---|
| 136 | |
---|
| 137 | Once you have completed this step, you are ready to build the library. |
---|
| 138 | Note that you should only need to complete this step once. The |
---|
| 139 | subsequent 'make' invocations will automatically re-generate the bits |
---|
| 140 | of the build system that need to be changed. |
---|
| 141 | |
---|
| 142 | If your system uses older versions of the autotools, the above command |
---|
| 143 | will fail. You may need to explicitly specify a version to use. For |
---|
| 144 | instance, if you have both GNU Automake 1.4 and 1.9 installed and |
---|
| 145 | 'automake' would invoke the 1.4, use instead: |
---|
| 146 | |
---|
| 147 | AUTOMAKE=automake-1.9 ACLOCAL=aclocal-1.9 autoreconf -fvi |
---|
| 148 | |
---|
| 149 | Make sure you're using the same version of automake and aclocal. |
---|
| 150 | |
---|
| 151 | Setting up the Build |
---|
| 152 | -------------------- |
---|
| 153 | |
---|
| 154 | To build Google Mock and your tests that use it, you need to tell your |
---|
| 155 | build system where to find its headers and source files. The exact |
---|
| 156 | way to do it depends on which build system you use, and is usually |
---|
| 157 | straightforward. |
---|
| 158 | |
---|
| 159 | ### Generic Build Instructions ### |
---|
| 160 | |
---|
| 161 | This section shows how you can integrate Google Mock into your |
---|
| 162 | existing build system. |
---|
| 163 | |
---|
| 164 | Suppose you put Google Mock in directory ${GMOCK_DIR} and Google Test |
---|
| 165 | in ${GTEST_DIR} (the latter is ${GMOCK_DIR}/gtest by default). To |
---|
| 166 | build Google Mock, create a library build target (or a project as |
---|
| 167 | called by Visual Studio and Xcode) to compile |
---|
| 168 | |
---|
| 169 | ${GTEST_DIR}/src/gtest-all.cc and ${GMOCK_DIR}/src/gmock-all.cc |
---|
| 170 | |
---|
| 171 | with |
---|
| 172 | |
---|
| 173 | ${GTEST_DIR}/include, ${GTEST_DIR}, ${GMOCK_DIR}/include, and ${GMOCK_DIR} |
---|
| 174 | |
---|
| 175 | in the header search path. Assuming a Linux-like system and gcc, |
---|
| 176 | something like the following will do: |
---|
| 177 | |
---|
| 178 | g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -I${GMOCK_DIR}/include \ |
---|
| 179 | -I${GMOCK_DIR} -c ${GTEST_DIR}/src/gtest-all.cc |
---|
| 180 | g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -I${GMOCK_DIR}/include \ |
---|
| 181 | -I${GMOCK_DIR} -c ${GMOCK_DIR}/src/gmock-all.cc |
---|
| 182 | ar -rv libgmock.a gtest-all.o gmock-all.o |
---|
| 183 | |
---|
| 184 | Next, you should compile your test source file with |
---|
| 185 | ${GTEST_DIR}/include and ${GMOCK_DIR}/include in the header search |
---|
| 186 | path, and link it with gmock and any other necessary libraries: |
---|
| 187 | |
---|
| 188 | g++ -I${GTEST_DIR}/include -I${GMOCK_DIR}/include \ |
---|
| 189 | path/to/your_test.cc libgmock.a -o your_test |
---|
| 190 | |
---|
| 191 | As an example, the make/ directory contains a Makefile that you can |
---|
| 192 | use to build Google Mock on systems where GNU make is available |
---|
| 193 | (e.g. Linux, Mac OS X, and Cygwin). It doesn't try to build Google |
---|
| 194 | Mock's own tests. Instead, it just builds the Google Mock library and |
---|
| 195 | a sample test. You can use it as a starting point for your own build |
---|
| 196 | script. |
---|
| 197 | |
---|
| 198 | If the default settings are correct for your environment, the |
---|
| 199 | following commands should succeed: |
---|
| 200 | |
---|
| 201 | cd ${GMOCK_DIR}/make |
---|
| 202 | make |
---|
| 203 | ./gmock_test |
---|
| 204 | |
---|
| 205 | If you see errors, try to tweak the contents of make/Makefile to make |
---|
| 206 | them go away. There are instructions in make/Makefile on how to do |
---|
| 207 | it. |
---|
| 208 | |
---|
| 209 | ### Windows ### |
---|
| 210 | |
---|
| 211 | The msvc/2005 directory contains VC++ 2005 projects and the msvc/2010 |
---|
| 212 | directory contains VC++ 2010 projects for building Google Mock and |
---|
| 213 | selected tests. |
---|
| 214 | |
---|
| 215 | Change to the appropriate directory and run "msbuild gmock.sln" to |
---|
| 216 | build the library and tests (or open the gmock.sln in the MSVC IDE). |
---|
| 217 | If you want to create your own project to use with Google Mock, you'll |
---|
| 218 | have to configure it to use the gmock_config propety sheet. For that: |
---|
| 219 | |
---|
| 220 | * Open the Property Manager window (View | Other Windows | Property Manager) |
---|
| 221 | * Right-click on your project and select "Add Existing Property Sheet..." |
---|
| 222 | * Navigate to gmock_config.vsprops or gmock_config.props and select it. |
---|
| 223 | * In Project Properties | Configuration Properties | General | Additional |
---|
| 224 | Include Directories, type <path to Google Mock>/include. |
---|
| 225 | |
---|
| 226 | Tweaking Google Mock |
---|
| 227 | -------------------- |
---|
| 228 | |
---|
| 229 | Google Mock can be used in diverse environments. The default |
---|
| 230 | configuration may not work (or may not work well) out of the box in |
---|
| 231 | some environments. However, you can easily tweak Google Mock by |
---|
| 232 | defining control macros on the compiler command line. Generally, |
---|
| 233 | these macros are named like GTEST_XYZ and you define them to either 1 |
---|
| 234 | or 0 to enable or disable a certain feature. |
---|
| 235 | |
---|
| 236 | We list the most frequently used macros below. For a complete list, |
---|
| 237 | see file ${GTEST_DIR}/include/gtest/internal/gtest-port.h. |
---|
| 238 | |
---|
| 239 | ### Choosing a TR1 Tuple Library ### |
---|
| 240 | |
---|
| 241 | Google Mock uses the C++ Technical Report 1 (TR1) tuple library |
---|
| 242 | heavily. Unfortunately TR1 tuple is not yet widely available with all |
---|
| 243 | compilers. The good news is that Google Test 1.4.0+ implements a |
---|
| 244 | subset of TR1 tuple that's enough for Google Mock's need. Google Mock |
---|
| 245 | will automatically use that implementation when the compiler doesn't |
---|
| 246 | provide TR1 tuple. |
---|
| 247 | |
---|
| 248 | Usually you don't need to care about which tuple library Google Test |
---|
| 249 | and Google Mock use. However, if your project already uses TR1 tuple, |
---|
| 250 | you need to tell Google Test and Google Mock to use the same TR1 tuple |
---|
| 251 | library the rest of your project uses, or the two tuple |
---|
| 252 | implementations will clash. To do that, add |
---|
| 253 | |
---|
| 254 | -DGTEST_USE_OWN_TR1_TUPLE=0 |
---|
| 255 | |
---|
| 256 | to the compiler flags while compiling Google Test, Google Mock, and |
---|
| 257 | your tests. If you want to force Google Test and Google Mock to use |
---|
| 258 | their own tuple library, just add |
---|
| 259 | |
---|
| 260 | -DGTEST_USE_OWN_TR1_TUPLE=1 |
---|
| 261 | |
---|
| 262 | to the compiler flags instead. |
---|
| 263 | |
---|
| 264 | If you want to use Boost's TR1 tuple library with Google Mock, please |
---|
| 265 | refer to the Boost website (http://www.boost.org/) for how to obtain |
---|
| 266 | it and set it up. |
---|
| 267 | |
---|
| 268 | ### Tweaking Google Test ### |
---|
| 269 | |
---|
| 270 | Most of Google Test's control macros apply to Google Mock as well. |
---|
| 271 | Please see file ${GTEST_DIR}/README for how to tweak them. |
---|
| 272 | |
---|
| 273 | Upgrading from an Earlier Version |
---|
| 274 | --------------------------------- |
---|
| 275 | |
---|
| 276 | We strive to keep Google Mock releases backward compatible. |
---|
| 277 | Sometimes, though, we have to make some breaking changes for the |
---|
| 278 | users' long-term benefits. This section describes what you'll need to |
---|
| 279 | do if you are upgrading from an earlier version of Google Mock. |
---|
| 280 | |
---|
| 281 | ### Upgrading from 1.1.0 or Earlier ### |
---|
| 282 | |
---|
| 283 | You may need to explicitly enable or disable Google Test's own TR1 |
---|
| 284 | tuple library. See the instructions in section "Choosing a TR1 Tuple |
---|
| 285 | Library". |
---|
| 286 | |
---|
| 287 | ### Upgrading from 1.4.0 or Earlier ### |
---|
| 288 | |
---|
| 289 | On platforms where the pthread library is available, Google Test and |
---|
| 290 | Google Mock use it in order to be thread-safe. For this to work, you |
---|
| 291 | may need to tweak your compiler and/or linker flags. Please see the |
---|
| 292 | "Multi-threaded Tests" section in file ${GTEST_DIR}/README for what |
---|
| 293 | you may need to do. |
---|
| 294 | |
---|
| 295 | If you have custom matchers defined using MatcherInterface or |
---|
| 296 | MakePolymorphicMatcher(), you'll need to update their definitions to |
---|
| 297 | use the new matcher API [2]. Matchers defined using MATCHER() or |
---|
| 298 | MATCHER_P*() aren't affected. |
---|
| 299 | |
---|
| 300 | [2] http://code.google.com/p/googlemock/wiki/CookBook#Writing_New_Monomorphic_Matchers, |
---|
| 301 | http://code.google.com/p/googlemock/wiki/CookBook#Writing_New_Polymorphic_Matchers |
---|
| 302 | |
---|
| 303 | Developing Google Mock |
---|
| 304 | ---------------------- |
---|
| 305 | |
---|
| 306 | This section discusses how to make your own changes to Google Mock. |
---|
| 307 | |
---|
| 308 | ### Testing Google Mock Itself ### |
---|
| 309 | |
---|
| 310 | To make sure your changes work as intended and don't break existing |
---|
| 311 | functionality, you'll want to compile and run Google Test's own tests. |
---|
| 312 | For that you'll need Autotools. First, make sure you have followed |
---|
| 313 | the instructions in section "SVN Checkout" to configure Google Mock. |
---|
| 314 | Then, create a build output directory and enter it. Next, |
---|
| 315 | |
---|
| 316 | ${GMOCK_DIR}/configure # Standard GNU configure script, --help for more info |
---|
| 317 | |
---|
| 318 | Once you have successfully configured Google Mock, the build steps are |
---|
| 319 | standard for GNU-style OSS packages. |
---|
| 320 | |
---|
| 321 | make # Standard makefile following GNU conventions |
---|
| 322 | make check # Builds and runs all tests - all should pass. |
---|
| 323 | |
---|
| 324 | Note that when building your project against Google Mock, you are building |
---|
| 325 | against Google Test as well. There is no need to configure Google Test |
---|
| 326 | separately. |
---|
| 327 | |
---|
| 328 | ### Regenerating Source Files ### |
---|
| 329 | |
---|
| 330 | Some of Google Mock's source files are generated from templates (not |
---|
| 331 | in the C++ sense) using a script. A template file is named FOO.pump, |
---|
| 332 | where FOO is the name of the file it will generate. For example, the |
---|
| 333 | file include/gmock/gmock-generated-actions.h.pump is used to generate |
---|
| 334 | gmock-generated-actions.h in the same directory. |
---|
| 335 | |
---|
| 336 | Normally you don't need to worry about regenerating the source files, |
---|
| 337 | unless you need to modify them. In that case, you should modify the |
---|
| 338 | corresponding .pump files instead and run the 'pump' script (for Pump |
---|
| 339 | is Useful for Meta Programming) to regenerate them. You can find |
---|
| 340 | pump.py in the ${GTEST_DIR}/scripts/ directory. Read the Pump manual |
---|
| 341 | [3] for how to use it. |
---|
| 342 | |
---|
| 343 | [3] http://code.google.com/p/googletest/wiki/PumpManual. |
---|
| 344 | |
---|
| 345 | ### Contributing a Patch ### |
---|
| 346 | |
---|
| 347 | We welcome patches. Please read the Google Mock developer's guide [4] |
---|
| 348 | for how you can contribute. In particular, make sure you have signed |
---|
| 349 | the Contributor License Agreement, or we won't be able to accept the |
---|
| 350 | patch. |
---|
| 351 | |
---|
| 352 | [4] http://code.google.com/p/googlemock/wiki/DevGuide |
---|
| 353 | |
---|
| 354 | Happy testing! |
---|