README.md 7.63 KB
Newer Older
Billy Donahue's avatar
Billy Donahue committed
1
## Google Mock ##
2

Billy Donahue's avatar
Billy Donahue committed
3
The Google C++ mocking framework.
4

Billy Donahue's avatar
Billy Donahue committed
5
### Overview ###
6

Billy Donahue's avatar
Billy Donahue committed
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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:

  * [jMock](http://www.jmock.org/),
  * [EasyMock](http://www.easymock.org/), and
  * [Hamcrest](http://code.google.com/p/hamcrest/),

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!
26

Billy Donahue's avatar
Billy Donahue committed
27
28
29
30
31
32
33
34
35
36
37
### 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,.
38
  * Lets a user extend it by defining new matchers and actions.
Billy Donahue's avatar
Billy Donahue committed
39
40
  * Does not use exceptions.
  * Is easy to learn and use.
41

42
43
44
45
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!
46

Billy Donahue's avatar
Billy Donahue committed
47
48
49
Please note that code under [scripts/generator](scripts/generator/) is
from [cppclean](http://code.google.com/p/cppclean/) and released under
the Apache License, which is different from Google Mock's license.
50

Billy Donahue's avatar
Billy Donahue committed
51
52
53
54
55
## Getting Started ##

If you are new to the project, we suggest that you read the user
documentation in the following order:

Arkady Shapkin's avatar
Arkady Shapkin committed
56
  * Learn the [basics](../googletest/docs/primer.md) of
Billy Donahue's avatar
Billy Donahue committed
57
    Google Test, if you choose to use Google Mock with it (recommended).
58
  * Read [Google Mock for Dummies](../googlemock/docs/for_dummies.md).
Billy Donahue's avatar
Billy Donahue committed
59
60
61
62
63
64
  * Read the instructions below on how to build Google Mock.

You can also watch Zhanyong's [talk](http://www.youtube.com/watch?v=sYpCyLI47rM) on Google Mock's usage and implementation.

Once you understand the basics, check out the rest of the docs:

65
  * [CheatSheet](../googlemock/docs/cheat_sheet.md) - all the commonly used stuff
Billy Donahue's avatar
Billy Donahue committed
66
    at a glance.
Gennadiy Civil's avatar
 
Gennadiy Civil committed
67
  * [CookBook](../googlemock/docs/cook_book.md) - recipes for getting things done,
Billy Donahue's avatar
Billy Donahue committed
68
69
70
    including advanced techniques.

If you need help, please check the
71
[KnownIssues](docs/known_issues.md) and
72
[FrequentlyAskedQuestions](docs/frequently_asked_questions.md) before
Billy Donahue's avatar
Billy Donahue committed
73
74
75
76
77
78
79
80
posting a question on the
[discussion group](http://groups.google.com/group/googlemock).


### 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
81
with [Google Test](https://github.com/google/googletest), but
82
you can also use it with [any C++ testing framework](../googlemock/docs/for_dummies.md#using-google-mock-with-any-testing-framework).
Billy Donahue's avatar
Billy Donahue committed
83

Billy Donahue's avatar
Billy Donahue committed
84
### Requirements for End Users ###
85

Billy Donahue's avatar
Billy Donahue committed
86
Google Mock is implemented on top of [Google Test](
Billy Donahue's avatar
Billy Donahue committed
87
http://github.com/google/googletest/), and depends on it.
Billy Donahue's avatar
Billy Donahue committed
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
Billy Donahue's avatar
Billy Donahue committed
91
92
framework, although it will still need Google Test.  Please read
["Using_Google_Mock_with_Any_Testing_Framework"](
93
    ../googlemock/docs/for_dummies.md#using-google-mock-with-any-testing-framework)
Billy Donahue's avatar
Billy Donahue committed
94
for instructions.
95

96
Google Mock depends on advanced C++ features and thus requires a more
Billy Donahue's avatar
Billy Donahue committed
97
modern compiler. The following are needed to use Google Mock:
98

Billy Donahue's avatar
Billy Donahue committed
99
#### Linux Requirements ####
100

101
102
103
  * GNU-compatible Make or "gmake"
  * POSIX-standard shell
  * POSIX(-2) Regular Expressions (regex.h)
104
  * C++98-standard-compliant compiler (e.g. GCC 3.4 or newer)
105

Billy Donahue's avatar
Billy Donahue committed
106
#### Windows Requirements ####
107

108
109
  * Microsoft Visual C++ 8.0 SP1 or newer

Billy Donahue's avatar
Billy Donahue committed
110
#### Mac OS X Requirements ####
111

112
113
114
  * Mac OS X 10.4 Tiger or newer
  * Developer Tools Installed

Billy Donahue's avatar
Billy Donahue committed
115
### Requirements for Contributors ###
116

Billy Donahue's avatar
Billy Donahue committed
117
118
We welcome patches. If you plan to contribute a patch, you need to
build Google Mock and its tests, which has further requirements:
119
120
121
122
123
124
125

  * 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)

Billy Donahue's avatar
Billy Donahue committed
126
### Building Google Mock ###
127

danilcha's avatar
danilcha committed
128
129
#### Using CMake ####

130
131
If you have CMake available, it is recommended that you follow the
[build instructions][gtest_cmakebuild]
132
as described for Google Test.
danilcha's avatar
danilcha committed
133
134

If are using Google Mock with an
135
136
existing CMake project, the section
[Incorporating Into An Existing CMake Project][gtest_incorpcmake]
137
138
may be of particular interest.
To make it work for Google Mock you will need to change
danilcha's avatar
danilcha committed
139
140
141

    target_link_libraries(example gtest_main)

142
to
danilcha's avatar
danilcha committed
143

danilcha's avatar
danilcha committed
144
    target_link_libraries(example gmock_main)
145

danilcha's avatar
danilcha committed
146
This works because `gmock_main` library is compiled with Google Test.
147

148

Billy Donahue's avatar
Billy Donahue committed
149
### Tweaking Google Mock ###
150
151
152
153
154

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,
Billy Donahue's avatar
Billy Donahue committed
155
these macros are named like `GTEST_XYZ` and you define them to either 1
156
157
158
or 0 to enable or disable a certain feature.

We list the most frequently used macros below.  For a complete list,
Billy Donahue's avatar
Billy Donahue committed
159
160
see file [${GTEST\_DIR}/include/gtest/internal/gtest-port.h](
../googletest/include/gtest/internal/gtest-port.h).
161

162
163
164
165
### 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
Billy Donahue's avatar
Billy Donahue committed
166
167
168
same DLL must contain Google Test as well.  See
[Google Test's README][gtest_readme]
for instructions on how to set up necessary compiler settings.
169
170

### Tweaking Google Mock ###
171

172
Most of Google Test's control macros apply to Google Mock as well.
Billy Donahue's avatar
Billy Donahue committed
173
Please see [Google Test's README][gtest_readme] for how to tweak them.
174

Billy Donahue's avatar
Billy Donahue committed
175
### Upgrading from an Earlier Version ###
176

177
178
179
180
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.
181

Billy Donahue's avatar
Billy Donahue committed
182
#### Upgrading from 1.1.0 or Earlier ####
shiqian's avatar
shiqian committed
183

184
You may need to explicitly enable or disable Google Test's own TR1
Billy Donahue's avatar
Billy Donahue committed
185
tuple library.  See the instructions in section "[Choosing a TR1 Tuple
Arkady Shapkin's avatar
Arkady Shapkin committed
186
Library](#choosing-a-tr1-tuple-library)".
187

Billy Donahue's avatar
Billy Donahue committed
188
#### Upgrading from 1.4.0 or Earlier ####
189

190
191
192
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
Arkady Shapkin's avatar
Arkady Shapkin committed
193
"[Multi-threaded Tests](../googletest/README.md#multi-threaded-tests)" section in file Google Test's README for what you may need to do.
194

Billy Donahue's avatar
Billy Donahue committed
195
196
197
If you have custom matchers defined using `MatcherInterface` or
`MakePolymorphicMatcher()`, you'll need to update their definitions to
use the new matcher API (
Gennadiy Civil's avatar
 
Gennadiy Civil committed
198
199
[monomorphic](./docs/cook_book.md#writing-new-monomorphic-matchers),
[polymorphic](./docs/cook_book.md#writing-new-polymorphic-matchers)).
Billy Donahue's avatar
Billy Donahue committed
200
Matchers defined using `MATCHER()` or `MATCHER_P*()` aren't affected.
201
202

Happy testing!
Billy Donahue's avatar
Billy Donahue committed
203

Billy Donahue's avatar
Billy Donahue committed
204
[gtest_readme]: ../googletest/README.md "googletest"
205
206
[gtest_cmakebuild]:  ../googletest/README.md#using-cmake "Using CMake"
[gtest_incorpcmake]: ../googletest/README.md#incorporating-into-an-existing-cmake-project "Incorporating Into An Existing CMake Project"