Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(478)

Side by Side Diff: third_party/gmock/README

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/gmock/COPYING ('k') | third_party/gmock/build.scons » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 Google C++ Mocking Framework
2 ============================
3 http://code.google.com/p/googlemock/
4
5 Overview
6 --------
7 Google's framework for writing and using C++ mock classes on Linux,
8 Mac OS X, and Windows. Inspired by jMock, EasyMock, and Hamcrest, and
9 designed with C++'s specifics in mind, it can help you derive better
10 designs of your system and write better tests.
11
12 Google 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
28 Please see the project page above for more information as well as mailing lists
29 for questions, discussions, and development. There is also an IRC channel on
30 OFTC (irc.oftc.net) #gtest available. Please join us!
31
32 Please note that code under scripts/generator/ is from the cppclean
33 project (http://code.google.com/p/cppclean/) and under the Apache
34 License, which is different from Google Mock's license.
35
36 Requirements
37 ------------
38 Google Mock is not a testing framework itself. Instead, it needs a
39 testing framework for writing tests. It works with Google Test
40 (http://code.google.com/p/googletest/) out of the box. You can use
41 either the copy of Google Test that comes with Google Mock, or a
42 compatible version you already have. This version of Google Mock
43 requires Google Test 1.4.0.
44
45 You can also easily configure Google Mock to work with another testing
46 framework of your choice; although it will still need Google Test as
47 an internal dependency. Please read
48 http://code.google.com/p/googlemock/wiki/ForDummies#Using_Google_Mock_with_Any_T esting_Framework
49 for how to do it.
50
51 Google Mock depends on advanced C++ features and thus requires a more
52 modern compiler. The following are needed to use Google Mock:
53
54 ### Linux Requirements ###
55 These are the base requirements to build and use Google Mock from a source
56 package (as described below):
57 * GNU-compatible Make or "gmake"
58 * POSIX-standard shell
59 * POSIX(-2) Regular Expressions (regex.h)
60 * gcc 3.4 or newer.
61
62 Furthermore, if you are building Google Mock from a VCS Checkout (also
63 described 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
71
72 ### Mac OS X Requirements ###
73 * Mac OS X 10.4 Tiger or newer
74 * Developer Tools Installed
75
76 Getting the Source
77 ------------------
78 There are two primary ways of getting Google Mock's source code: you can
79 download a source release in your preferred archive format, or directly check
80 out the source from a Version Control System (VCS, we use Google Code's
81 Subversion hosting). The VCS checkout requires a few extra steps and some extra
82 software packages on your system, but lets you track development, and make
83 patches to contribute much more easily, so we highly encourage it.
84
85 ### VCS Checkout: ###
86 The first step is to select whether you want to check out the main line of
87 development on Google Mock, or one of the released branches. The former will be
88 much more active and have the latest features, but the latter provides much
89 more stability and predictability. Choose whichever fits your needs best, and
90 proceed with the following Subversion commands:
91
92 svn checkout http://googlemock.googlecode.com/svn/trunk/ gmock-svn
93
94 or for a release version X.Y.*'s branch:
95
96 svn checkout http://googlemock.googlecode.com/svn/branches/release-X.Y/ \
97 gmock-X.Y-svn
98
99 Next you will need to prepare the GNU Autotools build system, if you
100 are using Linux or Mac OS X. Enter the target directory of the
101 checkout command you used ('gmock-svn' or 'gmock-X.Y-svn' above) and
102 proceed with the following command:
103
104 autoreconf -fvi
105
106 Once you have completed this step, you are ready to build the library. Note
107 that you should only need to complete this step once. The subsequent `make'
108 invocations will automatically re-generate the bits of the build system that
109 need to be changed.
110
111 If your system uses older versions of the autotools, the above command will
112 fail. You may need to explicitly specify a version to use. For instance, if you
113 have both GNU Automake 1.4 and 1.9 installed and `automake' would invoke the
114 1.4, use instead:
115
116 AUTOMAKE=automake-1.9 ACLOCAL=aclocal-1.9 autoreconf -fvi
117
118 Make sure you're using the same version of automake and aclocal.
119
120 ### Source Package: ###
121 Google Mock is also released in source packages which can be downloaded from
122 its Google Code download page[1]. Several different archive formats are
123 provided, but the only difference is the tools needed to extract their
124 contents, and the size of the resulting file. Download whichever you are most
125 comfortable with.
126
127 [1] Google Mock Downloads: http://code.google.com/p/googlemock/downloads/list
128
129 Once downloaded expand the archive using whichever tools you prefer for that
130 type. This will always result in a new directory with the name "gmock-X.Y.Z"
131 which contains all of the source code. Here are some examples in Linux:
132
133 tar -xvzf gmock-X.Y.Z.tar.gz
134 tar -xvjf gmock-X.Y.Z.tar.bz2
135 unzip gmock-X.Y.Z.zip
136
137 Choosing a TR1 Tuple Library
138 ----------------------------
139 Google Mock uses the C++ Technical Report 1 (TR1) tuple library
140 heavily. Unfortunately TR1 tuple is not yet widely available with all
141 compilers. The good news is that Google Test 1.4.0+ implements a
142 subset of TR1 tuple that's enough for Google Mock's need. Google Mock
143 will automatically use that implementation when the compiler doesn't
144 provide TR1 tuple.
145
146 Usually you don't need to care about which tuple library Google Test
147 and Google Mock use. However, if your project already uses TR1 tuple,
148 you need to tell Google Test and Google Mock to use the same TR1 tuple
149 library the rest of your project uses (this requirement is new in
150 Google Test 1.4.0 and Google Mock 1.2.0, so you may need to take care
151 of it when upgrading from an earlier version), or the two tuple
152 implementations will clash. To do that, add
153
154 -DGTEST_USE_OWN_TR1_TUPLE=0
155
156 to the compiler flags while compiling Google Test, Google Mock, and
157 your tests.
158
159 If you want to use Boost's TR1 tuple library with Google Mock, please
160 refer to the Boost website (http://www.boost.org/) for how to obtain
161 it and set it up.
162
163 Building the Source
164 -------------------
165 ### Linux and Mac OS X (without Xcode) ###
166 There are two primary options for building the source at this point: build it
167 inside the source code tree, or in a separate directory. We recommend building
168 in a separate directory as that tends to produce both more consistent results
169 and be easier to clean up should anything go wrong, but both patterns are
170 supported. The only hard restriction is that while the build directory can be
171 a subdirectory of the source directory, the opposite is not possible and will
172 result in errors. Once you have selected where you wish to build Google Mock,
173 create the directory if necessary, and enter it. The following steps apply for
174 either approach by simply substituting the shell variable SRCDIR with "." for
175 building inside the source directory, and the relative path to the source
176 directory otherwise.
177
178 ${SRCDIR}/configure # Standard GNU configure script, --help for more info
179
180 The default behavior of the configure script with respect to locating and using
181 Google Test is to first search for a 'gtest-config' in the system path, and
182 lacking this, build an internal copy of Google Test. You may optionally specify
183 a custom Google Test you wish to build Google Mock against, provided it is
184 a new enough version.
185
186 # Configure against an installation in '/opt' with '/opt/bin/gtest-config'.
187 ${SRCDIR}/configure --with-gtest=/opt
188
189 This can also be used to specify a Google Test which hasn't yet been installed.
190 However, it must have been configured and built as described in the Google Test
191 README before you configure Google Mock. To enable this feature, simply pass
192 the directory where you configured and built Google Test (which is not
193 necessarily its source directory) to Google Mock's configure script.
194
195 # Configure against a build of Google Test in an arbitrary directory.
196 ${SRCDIR}/configure --with-gtest=../../my_gtest_build
197
198 Finally, if you have a version of Google Test installed but for some reason
199 wish to forcibly prevent it from being used, we provide a special option.
200 Typically this is not needed as we fall back to the internal Google Test
201 packaged with Google Mock if an installed version is either unavailable or too
202 old to build Google Mock. When using the internally packaged Google Test, the
203 user does *not* need to configure or build it, that is automatically handled by
204 Google Mock's build system.
205
206 # Force the use of the internally packaged Google Test, despite
207 # 'gtest-config' being in your PATH.
208 ${SRCDIR}/configure --disable-external-gtest
209
210 Once you have successfully configured Google Mock, the build steps are standard
211 for GNU-style OSS packages.
212
213 make # Standard makefile following GNU conventions
214 make check # Builds and runs all tests - all should pass
215
216 Other programs will only be able to use Google Mock's functionality if you
217 install it in a location which they can access, in Linux this is typically
218 under '/usr/local'. The following command will install all of the Google Mock
219 libraries, public headers, and utilities necessary for other programs and
220 libraries to leverage it. Note that if Google Mock was unable to find an
221 external Google Test to build against, it will also install the internally
222 packaged Google Test in order to allow the installed Google Mock to function
223 properly. This Google Test install will be fully functional, and if installed
224 will also be uninstalled by uninstalling Google Mock.
225
226 sudo make install # Not necessary, but allows use by other programs
227
228 Should you need to remove Google Mock from your system after having installed
229 it, run the following command, and it will back out its changes. However, note
230 carefully that you must run this command on the *same* Google Mock build that
231 you ran the install from, or the results are not predictable. If you install
232 Google Mock on your system, and are working from a VCS checkout, make sure you
233 run this *before* updating your checkout of the source in order to uninstall
234 the same version which you installed.
235
236 sudo make uninstall # Must be run against the exact same build as "install"
237
238 Your project can build against Google Mock and Google Test simply by leveraging
239 the 'gmock-config' script. This script can be invoked directly out of the
240 'scripts' subdirectory of the build tree, and it will be installed in the
241 binary directory specified during the 'configure'. Here are some examples of
242 its use, see 'gmock-config --help' for more detailed information.
243
244 gmock-config --min-version=1.0 || echo "Insufficient Google Mock version."
245
246 g++ $(gmock-config --cppflags --cxxflags) -o foo.o -c foo.cpp
247 g++ $(gmock-config --ldflags --libs) -o foo foo.o
248
249 # When using a built but not installed Google Mock:
250 g++ $(../../my_gmock_build/scripts/gmock-config ...) ...
251
252 Note that when building your project against Google Mock, you are building
253 against Google Test as well. There is no need to configure Google Test
254 separately.
255
256 ### Windows ###
257 The msvc/ directory contains VC++ 2005 projects for building Google
258 Mock and selected tests.
259
260 If you want to use a version of Google Test other then the one bundled with
261 Google Mock, change the value of the GTestDir macro in gmock_config.vsprop
262 to point to the new location.
263
264 Open msvc/gmock.sln and build the library and tests. If you want to
265 create your own project to use with Google Mock, you'll have to
266 configure it to use the gmock_config propety sheet. For that:
267 * Open the Property Manager window (View | Other Windows | Property Manager)
268 * Right-click on your project and select "Add Existing Property Sheet..."
269 * Navigate to gmock_config.vsprops and select it.
270 * In Project Properties | Configuration Properties | General | Additional
271 Include Directories, type <path to Google Mock>/include.
272
273 TODO(wan@google.com): update the .vsprops and .vcproj files such that the
274 last step is unnecessary.
275
276 ### Using GNU Make ###
277 The make/ directory contains a Makefile that you can use to build
278 Google Mock on systems where GNU make is available (e.g. Linux and Mac
279 OS X). It doesn't try to build Google Mock's own tests. Instead, it
280 just builds the Google Mock libraries and some sample tests. You can
281 use it as a starting point for your own Makefile.
282
283 If the default settings are correct for your environment, the
284 following commands should succeed:
285
286 cd ${SRCDIR}/make
287 make
288 ./gmock_test
289
290 If you see errors, try to tweak the contents of make/Makefile to make
291 them go away. There are instructions in make/Makefile on how to do
292 it.
293
294 ### Using Your Own Build System ###
295 If none of the build solutions we provide works for you, or if you
296 prefer your own build system, you just need to compile
297 ${GTEST_SRCDIR}/src/gtest-all.cc (where GTEST_SRCDIR is the root of
298 the Google Test source tree) and src/gmock-all.cc into a library and
299 link your tests with it. Assuming a Linux-like system and gcc,
300 something like the following will do:
301
302 cd ${SRCDIR}
303 g++ -I. -I./include -I${GTEST_SRCDIR} -I${GTEST_SRCDIR}/include \
304 -c {GTEST_SRCDIR}/src/gtest-all.cc
305 g++ -I. -I./include -I${GTEST_SRCDIR} -I${GTEST_SRCDIR}/include \
306 -c src/gmock-all.cc
307 ar -rv libgmock.a gtest-all.o gmock-all.o
308 g++ -I. -I./include -I${GTEST_SRCDIR} -I${GTEST_SRCDIR}/include \
309 path/to/your_test.cc libgmock.a -o your_test
310
311 Regenerating Source Files
312 -------------------------
313 Some of Google Mock's source files are generated from templates (not
314 in the C++ sense) using a script. A template file is named FOO.pump,
315 where FOO is the name of the file it will generate. For example, the
316 file include/gmock/gmock-generated-actions.h.pump is used to generate
317 gmock-generated-actions.h in the same directory.
318
319 Normally you don't need to worry about regenerating the source files,
320 unless you need to modify them (e.g. if you are working on a patch for
321 Google Mock). In that case, you should modify the corresponding .pump
322 files instead and run the 'pump' script (for Pump is Useful for Meta
323 Programming) to regenerate them. We are still working on releasing
324 the script and its documentation. If you need it now, please email
325 googlemock@googlegroups.com such that we know to make it happen
326 sooner.
327
328 Happy testing!
OLDNEW
« no previous file with comments | « third_party/gmock/COPYING ('k') | third_party/gmock/build.scons » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698