1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
|
1.1 (2010-09-18)
================
- mocker.call() now supports a with_object argument. If True, the called
function will receive the patched or proxied object so that its state
may be used or verified in checks.
- assertRaises() in MockerTestCase can now be used like Python 2.7 and 3.2,
as a context manager. This enables contructs such as:
with self.assertRaises(Error):
raising_logic()
- Added assertRaisesRegexp() to MockerTestCase. It works similarly to
the version in Python 2.7 and 3.2, except it will also return the error
found. It also works as a context manager for with: statements.
- Added assertIsInstance() and assertNotIsInstance().
- Fixed bug #634566, reported by Mark Hammond, where throw(Error) effects
might make the recorded action be accepted multiple times.
1.0 (2010-06-20)
=================
- Changed license to BSD, since the PSF license only applies to Python
itself (#583335).
- Unwrap bound methods on replace() and proxy(), as suggested
by James Henstridge (#270782).
- MockerTestCase.assertRaises() will now return the exception raised,
allowing further inspection of the raised exception (implemented by
Thomas Hervé) (#299930).
- Fixed support for Python 2.6. Mocking of iterators was broken in
certain cases because, even though that's *not* documented, Python
tries to use __length_hint__ in some cases.
- Fixed support for MockerTestCase.addCleanup() in Python 2.3,
by Anders F Björklund (#528657).
- Implemented Expect helper, which allows creating a new expect()
"function" with an explicitly provided Mocker instance. This
helps in cases where the expression can't result in a Mock
instance (e.g. expect(iter(mock))) (#196388, #179072).
- __nonzero__ should necessarily return a boolean value, so transform Mock
results into True (#380024).
- Applied change suggested by David Glick to avoid reimporting modules
(#529675).
- When setting the temporary __mocker_mock__ attribute, use Mocker.patch()
so that by the end of the mocking it's properly removed (by Thomas Herve).
- Prevent the MockerTestCase base from leaving the mocker in replay mode
while the base class run() method runs, since this might have additional
logic which touches mocked content (time.time() was one case). Thanks
to Thomas Herve for the initial debugging.
- Ensure that the raised AttributeError exception on a patched object
exposes the real problem rather than a mocker error (by Duncan McGreggor).
- When cleaning up on MockerTestCase, use reset() rather than restore(),
so that the same test case instance may be run more than once (like
Trial does).
- Some tweaks to prepare for Python 3.
- Added MockerTestCase to __all__.
0.10.1 (2007-12-11)
===================
- Fixed patching of objects which define __getattr__.
0.10 (2007-12-09)
=================
- Greatly improved error messages and logic for expression ordering!
- Implemented MockerTestCase.addCleanup(). It allows one to
register cleanup functions to be called after the test is
complete.
- MockerTestCase now verifies if the mocker is put in replay
mode in cases where events were recorded.
- New MATCH() argument matcher, which allows using a function
to match an argument generically. E.g. MATCH(lambda x: x > 10)
- New 'path' option to MockerTestCase.makeFile() and makeDir(),
which allows setting the full target path with a single option.
- Now when a spec is provided (or with proxy/replace/patch) the
existence of the real method is checked even if the mocked
method doesn't execute. This is useful to detect API expectation
errors even if count(0) is used (a negative assertion).
- Implemented in MockerTestCase support for Deferred results as
understood by Twisted Trial's TestCase, so that coexistence by
multiple inheritance is possible and trivial.
- MockerTestCase.makeFile() with content=None (the default) now
consistently returns an unexistent temporary filename which
is properly cleaned up if created.
- Fixed problem when requesting order on similar expressions. The
second expression might not be accepted.
- When the expression executed isn't exactly the same as the
recorded events (e.g. when parameter matchers are used), show in
the error message the real expression run, to aid in debugging.
0.9.3 (2007-11-24)
==================
- Added support for Python 2.3 (patch by Phillip J. Eby).
- Added MockerTestCase.assert{True,False} aliases, so that they're
available even in Python 2.3.
- Introduced automatic test coverage verification as part of
the test suite, based on the 'coverage' module by Ned Batchelder,
to ensure that it continues to have 100% of statement coverage.
0.9.2 (2007-11-22)
==================
- In recording mode, mock.__class__ will now return Mock, and not
record the action. This allows Mocker to be used in interactive
environments which inspect the result's type, such as in iPython
(reported by Alex Dante).
- Now Mocker.mock()/proxy()/replace() accept a 'count' keyword
parameter, which if set to False, the default behavior of allowing
expressions just once is disabled.
0.9.1 (2007-11-18)
==================
- Fixed setup.py to install mocker.py properly.
0.9 (2007-11-17)
================
- Added MockerTestCase.makeFile() and .makeDir() helpers. They offer
easy creation of temporary files/directories, and ensure that they
get removed after each test method runs.
- Added MockerTestCase.assertMethodsMatch(). It will verify if all
public methods found in the class passed as the first argument are
also present in the class passed as the second argument, and that
they accept the same arguments. This is useful to verify if a fake
or stub class has the same API as the real class being simulated.
- Added MockerTestCase.assert[Not]{Starts,Ends}With().
- If the replay() method is called twice, expectations will be fully
reset so that several similar tests may be performed in a row by
just calling replay() again.
- Mocker.on_restore() removed. Restore isn't performed if replay()
isn't called, and that may not be obvious, so a hook won't be
exposed for now.
- When using a non-existent import path for Mocker.proxy(), raise an
ImportError on the base module, rather than using the actual
string as the object (#162315).
0.8 (2007-11-11)
================
Released!
|