blob: 4b3efd822a2bdf4bbf76f9ae2007525c536804e1 [file] [log] [blame]
shiqiane35fdd92008-12-10 05:08:54 +00001Google C++ Mocking Framework
2============================
3http://code.google.com/p/googlemock/
4
5Overview
6--------
7Google's framework for writing and using C++ mock classes on Linux,
8Mac OS X, and Windows. Inspired by jMock, EasyMock, and Hamcrest, and
9designed with C++'s specifics in mind, it can help you derive better
10designs of your system and write better tests.
11
12Google Mock:
13
14- provides a declarative syntax for defining mocks,
15- can easily define partial (hybrid) mocks, which are a cross of real
16 and mock objects,
17- handles functions of arbitrary types and overloaded functions,
18- comes with a rich set of matchers for validating function arguments,
19- uses an intuitive syntax for controlling the behavior of a mock,
20- does automatic verification of expectations (no record-and-replay
21 needed),
22- allows arbitrary (partial) ordering constraints on
23 function calls to be expressed,
24- lets a user extend it by defining new matchers and actions.
25- does not use exceptions, and
26- is easy to learn and use.
27
28Please see the project page above for more information as well as mailing lists
29for questions, discussions, and development. There is also an IRC channel on
30OFTC (irc.oftc.net) #gtest available. Please join us!
31
32Please note that code under scripts/generator/ is from the cppclean
33project (http://code.google.com/p/cppclean/) and under the Apache
shiqianc50af1a2008-12-11 05:22:15 +000034License, which is different from Google Mock's license.
shiqiane35fdd92008-12-10 05:08:54 +000035
36Requirements
37------------
38Google Mock is not a testing framework itself. Instead, it needs a
zhanyong.wan62417be2009-03-19 18:39:41 +000039testing framework for writing tests. It works with Google Test
40(http://code.google.com/p/googletest/) out of the box. You can use
41either the copy of Google Test that comes with Google Mock, or a
shiqian281b1d22008-12-11 00:13:55 +000042compatible version you already have. This version of Google Mock
zhanyong.wan90c90f92009-06-17 22:11:04 +000043requires Google Test 1.4.0.
shiqiane35fdd92008-12-10 05:08:54 +000044
zhanyong.wan62417be2009-03-19 18:39:41 +000045You can also easily configure Google Mock to work with another testing
46framework of your choice; although it will still need Google Test as
47an internal dependency. Please read
48http://code.google.com/p/googlemock/wiki/ForDummies#Using_Google_Mock_with_Any_Testing_Framework
49for how to do it.
50
shiqiane35fdd92008-12-10 05:08:54 +000051Google Mock depends on advanced C++ features and thus requires a more
52modern compiler. The following are needed to use Google Mock:
53
54### Linux Requirements ###
55These are the base requirements to build and use Google Mock from a source
56package (as described below):
57 * GNU-compatible Make or "gmake"
58 * POSIX-standard shell
59 * POSIX(-2) Regular Expressions (regex.h)
zhanyong.wan90c90f92009-06-17 22:11:04 +000060 * gcc 3.4 or newer.
shiqiane35fdd92008-12-10 05:08:54 +000061
62Furthermore, if you are building Google Mock from a VCS Checkout (also
63described below), there are further requirements:
64 * Automake version 1.9 or newer
65 * Autoconf version 2.59 or newer
66 * Libtool / Libtoolize
67 * Python version 2.3 or newer
68
69### Windows Requirements ###
70 * Microsoft Visual C++ 8.0 SP1 or newer
shiqiane35fdd92008-12-10 05:08:54 +000071
72### Mac OS X Requirements ###
73 * Mac OS X 10.4 Tiger or newer
74 * Developer Tools Installed
75
76Getting the Source
77------------------
78There are two primary ways of getting Google Mock's source code: you can
79download a source release in your preferred archive format, or directly check
80out the source from a Version Control System (VCS, we use Google Code's
81Subversion hosting). The VCS checkout requires a few extra steps and some extra
82software packages on your system, but lets you track development, and make
83patches to contribute much more easily, so we highly encourage it.
84
85### VCS Checkout: ###
86The first step is to select whether you want to check out the main line of
87development on Google Mock, or one of the released branches. The former will be
88much more active and have the latest features, but the latter provides much
89more stability and predictability. Choose whichever fits your needs best, and
90proceed with the following Subversion commands:
91
shiqianc50af1a2008-12-11 05:22:15 +000092 svn checkout http://googlemock.googlecode.com/svn/trunk/ gmock-svn
shiqiane35fdd92008-12-10 05:08:54 +000093
94or for a release version X.Y.*'s branch:
95
shiqianc50af1a2008-12-11 05:22:15 +000096 svn checkout http://googlemock.googlecode.com/svn/branches/release-X.Y/ \
shiqiane35fdd92008-12-10 05:08:54 +000097 gmock-X.Y-svn
98
99Next you will need to prepare the GNU Autotools build system, if you
100are using Linux or Mac OS X. Enter the target directory of the
101checkout command you used ('gmock-svn' or 'gmock-X.Y-svn' above) and
shiqian281b1d22008-12-11 00:13:55 +0000102proceed with the following command:
shiqiane35fdd92008-12-10 05:08:54 +0000103
shiqianc50af1a2008-12-11 05:22:15 +0000104 autoreconf -fvi
shiqiane35fdd92008-12-10 05:08:54 +0000105
shiqianc50af1a2008-12-11 05:22:15 +0000106Once you have completed this step, you are ready to build the library. Note
107that you should only need to complete this step once. The subsequent `make'
108invocations will automatically re-generate the bits of the build system that
109need to be changed.
shiqiane35fdd92008-12-10 05:08:54 +0000110
shiqian281b1d22008-12-11 00:13:55 +0000111If your system uses older versions of the autotools, the above command will
shiqianc50af1a2008-12-11 05:22:15 +0000112fail. You may need to explicitly specify a version to use. For instance, if you
113have both GNU Automake 1.4 and 1.9 installed and `automake' would invoke the
1141.4, use instead:
shiqian281b1d22008-12-11 00:13:55 +0000115
shiqianc50af1a2008-12-11 05:22:15 +0000116 AUTOMAKE=automake-1.9 ACLOCAL=aclocal-1.9 autoreconf -fvi
shiqian281b1d22008-12-11 00:13:55 +0000117
118Make sure you're using the same version of automake and aclocal.
shiqiane35fdd92008-12-10 05:08:54 +0000119
120### Source Package: ###
121Google Mock is also released in source packages which can be downloaded from
122its Google Code download page[1]. Several different archive formats are
shiqianc50af1a2008-12-11 05:22:15 +0000123provided, but the only difference is the tools needed to extract their
124contents, and the size of the resulting file. Download whichever you are most
125comfortable with.
shiqiane35fdd92008-12-10 05:08:54 +0000126
127 [1] Google Mock Downloads: http://code.google.com/p/googlemock/downloads/list
128
129Once downloaded expand the archive using whichever tools you prefer for that
130type. This will always result in a new directory with the name "gmock-X.Y.Z"
131which contains all of the source code. Here are some examples in Linux:
132
shiqianc50af1a2008-12-11 05:22:15 +0000133 tar -xvzf gmock-X.Y.Z.tar.gz
134 tar -xvjf gmock-X.Y.Z.tar.bz2
135 unzip gmock-X.Y.Z.zip
shiqiane35fdd92008-12-10 05:08:54 +0000136
zhanyong.wan90c90f92009-06-17 22:11:04 +0000137Choosing a TR1 Tuple Library
138----------------------------
139Google Mock uses the C++ Technical Report 1 (TR1) tuple library
140heavily. Unfortunately TR1 tuple is not yet widely available with all
141compilers. The good news is that Google Test 1.4.0+ implements a
142subset of TR1 tuple that's enough for Google Mock's need. Google Mock
143will automatically use that implementation when the compiler doesn't
144provide TR1 tuple.
145
146Usually you don't need to care about which tuple library Google Test
147and Google Mock use. However, if your project already uses TR1 tuple,
148you need to tell Google Test and Google Mock to use the same TR1 tuple
149library the rest of your project uses (this requirement is new in
150Google Test 1.4.0 and Google Mock 1.2.0, so you may need to take care
151of it when upgrading from an earlier version), or the two tuple
152implementations will clash. To do that, add
153
154 -DGTEST_USE_OWN_TR1_TUPLE=0
155
156to the compiler flags while compiling Google Test, Google Mock, and
157your tests.
158
159If you want to use Boost's TR1 tuple library with Google Mock, please
160refer to the Boost website (http://www.boost.org/) for how to obtain
161it and set it up.
162
shiqiane35fdd92008-12-10 05:08:54 +0000163Building the Source
164-------------------
165### Linux and Mac OS X (without Xcode) ###
166There are two primary options for building the source at this point: build it
167inside the source code tree, or in a separate directory. We recommend building
168in a separate directory as that tends to produce both more consistent results
169and be easier to clean up should anything go wrong, but both patterns are
170supported. The only hard restriction is that while the build directory can be
171a subdirectory of the source directory, the opposite is not possible and will
172result in errors. Once you have selected where you wish to build Google Mock,
173create the directory if necessary, and enter it. The following steps apply for
174either approach by simply substituting the shell variable SRCDIR with "." for
175building inside the source directory, and the relative path to the source
176directory otherwise.
177
shiqianc50af1a2008-12-11 05:22:15 +0000178 ${SRCDIR}/configure # Standard GNU configure script, --help for more info
179
shiqianc50af1a2008-12-11 05:22:15 +0000180Once you have successfully configured Google Mock, the build steps are standard
181for GNU-style OSS packages.
182
183 make # Standard makefile following GNU conventions
184 make check # Builds and runs all tests - all should pass
shiqiane35fdd92008-12-10 05:08:54 +0000185
shiqianc50af1a2008-12-11 05:22:15 +0000186Note that when building your project against Google Mock, you are building
187against Google Test as well. There is no need to configure Google Test
188separately.
shiqiane35fdd92008-12-10 05:08:54 +0000189
190### Windows ###
shiqian44a8cf12008-12-22 23:06:35 +0000191The msvc/ directory contains VC++ 2005 projects for building Google
zhanyong.wan90c90f92009-06-17 22:11:04 +0000192Mock and selected tests.
shiqianc6cece72008-12-10 07:50:41 +0000193
194If you want to use a version of Google Test other then the one bundled with
195Google Mock, change the value of the GTestDir macro in gmock_config.vsprop
196to point to the new location.
197
zhanyong.wan90c90f92009-06-17 22:11:04 +0000198Open msvc/gmock.sln and build the library and tests. If you want to
199create your own project to use with Google Mock, you'll have to
200configure it to use the gmock_config propety sheet. For that:
shiqianc50af1a2008-12-11 05:22:15 +0000201 * Open the Property Manager window (View | Other Windows | Property Manager)
shiqianc6cece72008-12-10 07:50:41 +0000202 * Right-click on your project and select "Add Existing Property Sheet..."
203 * Navigate to gmock_config.vsprops and select it.
shiqianc50af1a2008-12-11 05:22:15 +0000204 * In Project Properties | Configuration Properties | General | Additional
205 Include Directories, type <path to Google Mock>/include.
206
207TODO(wan@google.com): update the .vsprops and .vcproj files such that the
208last step is unnecessary.
shiqiane35fdd92008-12-10 05:08:54 +0000209
210### Using GNU Make ###
211The make/ directory contains a Makefile that you can use to build
212Google Mock on systems where GNU make is available (e.g. Linux and Mac
213OS X). It doesn't try to build Google Mock's own tests. Instead, it
214just builds the Google Mock libraries and some sample tests. You can
215use it as a starting point for your own Makefile.
216
217If the default settings are correct for your environment, the
218following commands should succeed:
219
shiqianc50af1a2008-12-11 05:22:15 +0000220 cd ${SRCDIR}/make
221 make
222 ./gmock_test
shiqiane35fdd92008-12-10 05:08:54 +0000223
224If you see errors, try to tweak the contents of make/Makefile to make
225them go away. There are instructions in make/Makefile on how to do
226it.
227
228### Using Your Own Build System ###
229If none of the build solutions we provide works for you, or if you
230prefer your own build system, you just need to compile
231${GTEST_SRCDIR}/src/gtest-all.cc (where GTEST_SRCDIR is the root of
232the Google Test source tree) and src/gmock-all.cc into a library and
233link your tests with it. Assuming a Linux-like system and gcc,
234something like the following will do:
235
shiqianc50af1a2008-12-11 05:22:15 +0000236 cd ${SRCDIR}
237 g++ -I. -I./include -I${GTEST_SRCDIR} -I${GTEST_SRCDIR}/include \
shiqiane35fdd92008-12-10 05:08:54 +0000238 -c {GTEST_SRCDIR}/src/gtest-all.cc
shiqianc50af1a2008-12-11 05:22:15 +0000239 g++ -I. -I./include -I${GTEST_SRCDIR} -I${GTEST_SRCDIR}/include \
shiqiane35fdd92008-12-10 05:08:54 +0000240 -c src/gmock-all.cc
shiqianc50af1a2008-12-11 05:22:15 +0000241 ar -rv libgmock.a gtest-all.o gmock-all.o
242 g++ -I. -I./include -I${GTEST_SRCDIR} -I${GTEST_SRCDIR}/include \
shiqiane35fdd92008-12-10 05:08:54 +0000243 path/to/your_test.cc libgmock.a -o your_test
244
shiqiane35fdd92008-12-10 05:08:54 +0000245Regenerating Source Files
246-------------------------
247Some of Google Mock's source files are generated from templates (not
248in the C++ sense) using a script. A template file is named FOO.pump,
249where FOO is the name of the file it will generate. For example, the
250file include/gmock/gmock-generated-actions.h.pump is used to generate
251gmock-generated-actions.h in the same directory.
252
253Normally you don't need to worry about regenerating the source files,
254unless you need to modify them (e.g. if you are working on a patch for
255Google Mock). In that case, you should modify the corresponding .pump
256files instead and run the 'pump' script (for Pump is Useful for Meta
257Programming) to regenerate them. We are still working on releasing
258the script and its documentation. If you need it now, please email
259googlemock@googlegroups.com such that we know to make it happen
260sooner.
261
262Happy testing!