forked from kaste/mockito-python
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES.txt
166 lines (106 loc) · 6.23 KB
/
CHANGES.txt
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
MOCKITO CHANGE LOG
==================
Release 1.0.7 - 1.0.10 (January 31 - February 2, 2017)
------------------------------------------------------
- ``verifyZeroInteractions`` implemented. This is actually a *breaking change*, because ``verifyZeroInteractions`` was an alias for ``verifyNoMoreInteractions`` (sic!). If you used it, just call the other function.
- ``verifyStubbedInvocationsAreUsed`` implemented. This is meant to be called right before an ``unstub`` and should improve long time maintenance. It doesn't help during design time. Note that `pytest-mockito` automatically calls this for you.
- All `verify*` functions now warn you if you pass in an object which was never stubbed.
Release 1.0.0 - 1.0.5 (January 24 - 27, 2017)
---------------------------------------------
This is a major update; mostly because of internal code reorganization (`imports`) it cannot be guaranteed that this will not break for you. Though if you just used the public API you should be fine. None of the vintage old tests have been removed and they at least pass.
In general unclassified imports (``from mocktio import *``) are not recommended. But if you did, we do not export `Mock` anymore. `Mock` has been deprecated long ago and is now for internal use only. You must use `mock`.
Another important change is, that *mockito*'s strict mode is far more strict than before. We now generally try to match the signature of the target method
with your usage. Usually this should help you find bugs in your code, because
it will make it easier to spot changing interfaces.
- ``mock``, ``when``, ``verify`` return mostly empty objects. It is unlikely to have a method_name clash.
- Specced mocks ``instance = mock(Class)`` will pass isinstance tests like ``isinstance(instance, Class)``
- For ``when`` and ``verify`` the function signature or argument matchers can be greatly simplified. E.g. ``when(requests).get(...).thenReturn('OK')`` will match any argument you pass in. There are ``args`` and ``kwargs`` matchers as well. So ``when(requests).get('https://...', **kwargs).thenReturn(...)`` will make an exact match on the first argument, the url, and ignore all the headers and other stuff.
- Mocks can be preconfigured: ``mock({'text': 'OK'})``. For specced mocks this would be e.g. ``mock({'text': 'OK'}, spec=requests.Response)``.
- If you mock or patch an object, the function signatures will be matched. So::
def foo(a, b=1): ...
when(main).foo(12) # will pass
when(main).foo(c=13) # will raise immediately
- Mock Dummies are now callable::
m = mock()
m(1, 2)
verify(m).__call__(...)
- ``Mock()`` is now an implementation detail; it is **not** exported anymore. Use ``mock()``.
- You can unstub individual patched objects ``unstub(obj)``. (Before it was all or nothing.)
- Added basic context manager support when using ``when``. Note that ``verify`` has to be called within the with context.
::
with when(rex).waggle().thenReturn('Yup'):
assert rex.waggle() == 'Yup'
verify(rex).waggle()
- Aliased ``any_`` to ``ANY``, ``args`` to ``ARGS`` and ``kwargs`` to ``KWARGS``. You can use python's builtin ``any`` as a stand in for ``ANY``.
- As a convenience you can use our ``any_`` matcher like a type instead of ``any_()``::
dummy(1)
verify(dummy).__call__(ANY)
- Added ``when2``, ``expect``, ``spy2``
- Make the mocked function (replacement) more inspectable. Copy `__doc__`, `__name__` etc.
- You can configure magic methods on mocks::
dummy = mock()
when(dummy).__getitem__(1).thenReturn(2)
assert dummy[1] == 2
Release 0.7.1 (December 27, 2016)
---------------------------------
- Fix: Allow ``verifyNoMoreInteractions`` call for real (stubbed) objects
Release 0.7.0 (July 15, 2016)
-----------------------------
- Added a ton of new argument matchers. Namely::
'and_', 'or_', 'not_', 'eq', 'neq', 'lt', 'lte', 'gt', 'gte',
'arg_that', 'matches', 'captor'
- Aliases ``any`` matcher to ``any_`` because it's a builtin.
- Fixes an issue where mockito could not correctly verify your function invocations, if you grabbed a method from its object and used it ('detached') as a plain function::
m = mock()
f = m.foo # detach
f(1, 2) # pass it around and use it like a function
f(2, 3)
verify(m).foo(...) # finally verify interactions
Thank you @maximkulkin
Release 0.6.1 (May 20, 2016)
----------------------------
- Added ``thenAnswer(callable)``. The callable will be called to compute the answer the stubbed method will return. For that it will receive the arguments of the caller::
m = mock()
when(m).do_times(any(), any()).thenAnswer(lambda one, two: one * two)
self.assertEquals(20, m.do_times(5, 4))
Thank you @stubbsd
Release 0.6.0 (April 25, 2016)
------------------------------
- Print keyword arguments nicely.
- Be very forgiving about return values and assume None as default. T.i. ``when(Dog).bark('Miau').thenReturn()`` is enough to return None.
- Make keyword argument order unimportant.
- BREAKING CHANGE: Throw early when calling not expected methods in strict mode.
Release 0.5.3 (April 23, 2016)
------------------------------
- Remove hard coded distribute setup files.
Release 0.5.1 (August 4, 2010)
------------------------------
BUG Fixes:
- Fixed issue #9 [http://bitbucket.org/szczepiq/mockito-python/issue/9] : Generating stubs from classes caused method to be replaced in original classes.
Release 0.5.0 (July 26, 2010)
-----------------------------
API Changes:
- Added possibility to spy on real objects.
- Added "never" syntactic sugar for verifications.
BUG Fixes:
- Fixed issue with named arguments matching.
Other Changes:
- Python 2.7 support
- Deprecated APIs now generate deprecation warnings.
Release 0.4.0 (July 2, 2010)
----------------------------
API Changes:
- Added possibility to verify invocations in order.
BUG Fixes:
- Fixed issue with installing mockito from egg without distribute installed.
Release 0.3.1
-------------
Bug-fix release.
Bug Fixes:
- Fixed annoying issue #8 [http://bitbucket.org/szczepiq/mockito-python/issue/8]
Release 0.3.0
-------------
API Changes:
- Renamed mock creation method from "Mock" (upper "M") to "mock". Old name stays for compatibility until 1.0 release.
Other Changes:
- Official Python3 support via distutils + 2to3.