Upstream changes:
2012/11/5 Version 1.0.1
Functions decorated with patch variants have a __wrapped__ attribute pointing to the original function. This brings compatibility with the default behaviour in Python 3.3 (due to a new feature in functools.wraps).
Note that due to changes in tox, mock is no longer tested with Python 2.4. The compatibility code has not been removed so it probably still works, but tests are no longer run.
2012/10/07 Version 1.0.0
No changes since 1.0.0 beta 1. This version has feature parity with unittest.mock in Python 3.3.
Full list of changes since 0.8:
mocksignature, along with the mocksignature argument to patch, removed
Support for deleting attributes (accessing deleted attributes will raise an AttributeError)
Added the mock_open helper function for mocking the builtin open
__class__ is assignable, so a mock can pass an isinstance check without requiring a spec
Addition of PropertyMock, for mocking properties
MagicMocks made unorderable by default (in Python 3). The comparison methods (other than equality and inequality) now return NotImplemented
Propagate traceback info to support subclassing of _patch by other libraries
create_autospec works with attributes present in results of dir that cant be fetched from the objects class. Contributed by Konstantine Rybnikov
Any exceptions in an iterable side_effect will be raised instead of returned
In Python 3, create_autospec now supports keyword only arguments
Added patch.stopall method to stop all active patches created by start
BUGFIX: calling MagicMock.reset_mock wouldnt reset magic method mocks
BUGFIX: calling reset_mock on a MagicMock created with autospec could raise an exception
BUGFIX: passing multiple spec arguments to patchers (spec , spec_set and autospec) had unpredictable results, now it is an error
BUGFIX: using spec=True and create=True as arguments to patchers could result in using DEFAULT as the spec. Now it is an error instead
BUGFIX: using spec or autospec arguments to patchers, along with spec_set=True did not work correctly
BUGFIX: using an object that evaluates to False as a spec could be ignored
BUGFIX: a list as the spec argument to a patcher would always result in a non-callable mock. Now if __call__ is in the spec the mock is callable
Changelog:
2012/02/13 Version 0.8.0
------------------------
The only changes since 0.8rc2 are:
* Improved repr of :data:`sentinel` objects
* :data:`ANY` can be used for comparisons against :data:`call` objects
* The return value of the :class:`MagicMock` `__iter__` method can be set to
any iterable and isn't required to be an iterator
Full List of changes since 0.7:
mock 0.8.0 is the last version that will support Python 2.4.
* Addition of :attr:`~Mock.mock_calls` list for *all* calls (including magic
methods and chained calls)
* :func:`patch` and :func:`patch.object` now create a :class:`MagicMock`
instead of a :class:`Mock` by default
* The patchers (`patch`, `patch.object` and `patch.dict`), plus `Mock` and
`MagicMock`, take arbitrary keyword arguments for configuration
* New mock method :meth:`~Mock.configure_mock` for setting attributes and
return values / side effects on the mock and its attributes
* New mock assert methods :meth:`~Mock.assert_any_call` and
:meth:`~Mock.assert_has_calls`
* Implemented :ref:`auto-speccing` (recursive, lazy speccing of mocks with
mocked signatures for functions/methods), as the `autospec` argument to
`patch`
* Added the :func:`create_autospec` function for manually creating
'auto-specced' mocks
* :func:`patch.multiple` for doing multiple patches in a single call, using
keyword arguments
* Setting :attr:`~Mock.side_effect` to an iterable will cause calls to the mock
to return the next value from the iterable
* New `new_callable` argument to `patch` and `patch.object` allowing you to
pass in a class or callable object (instead of `MagicMock`) that will be
called to replace the object being patched
* Addition of :class:`NonCallableMock` and :class:`NonCallableMagicMock`, mocks
without a `__call__` method
* Addition of :meth:`~Mock.mock_add_spec` method for adding (or changing) a
spec on an existing mock
* Protocol methods on :class:`MagicMock` are magic mocks, and are created
lazily on first lookup. This means the result of calling a protocol method is
a `MagicMock` instead of a `Mock` as it was previously
* Addition of :meth:`~Mock.attach_mock` method
* Added :data:`ANY` for ignoring arguments in :meth:`~Mock.assert_called_with`
calls
* Addition of :data:`call` helper object
* Improved repr for mocks
* Improved repr for :attr:`Mock.call_args` and entries in
:attr:`Mock.call_args_list`, :attr:`Mock.method_calls` and
:attr:`Mock.mock_calls`
* Improved repr for :data:`sentinel` objects
* `patch` lookup is done at use time not at decoration time
* In Python 2.6 or more recent, `dir` on a mock will report all the dynamically
created attributes (or the full list of attributes if there is a spec) as
well as all the mock methods and attributes.
* Module level :data:`FILTER_DIR` added to control whether `dir(mock)` filters
private attributes. `True` by default.
* `patch.TEST_PREFIX` for controlling how patchers recognise test methods when
used to decorate a class
* Support for using Java exceptions as a :attr:`~Mock.side_effect` on Jython
* `Mock` call lists (`call_args_list`, `method_calls` & `mock_calls`) are now
custom list objects that allow membership tests for "sub lists" and have
a nicer representation if you `str` or `print` them
* Mocks attached as attributes or return values to other mocks have calls
recorded in `method_calls` and `mock_calls` of the parent (unless a name is
already set on the child)
* Improved failure messages for `assert_called_with` and
`assert_called_once_with`
* The return value of the :class:`MagicMock` `__iter__` method can be set to
any iterable and isn't required to be an iterator
* Added the Mock API (`assert_called_with` etc) to functions created by
:func:`mocksignature`
* Tuples as well as lists can be used to specify allowed methods for `spec` &
`spec_set` arguments
* Calling `stop` on an unstarted patcher fails with a more meaningful error
message
* Renamed the internal classes `Sentinel` and `SentinelObject` to prevent abuse
* BUGFIX: an error creating a patch, with nested patch decorators, won't leave
patches in place
* BUGFIX: `__truediv__` and `__rtruediv__` not available as magic methods on
mocks in Python 3
* BUGFIX: `assert_called_with` / `assert_called_once_with` can be used with
`self` as a keyword argument
* BUGFIX: when patching a class with an explicit spec / spec_set (not a
boolean) it applies "spec inheritance" to the return value of the created
mock (the "instance")
* BUGFIX: remove the `__unittest` marker causing traceback truncation
* Removal of deprecated `patch_object`
* Private attributes `_name`, `_methods`, '_children', `_wraps` and `_parent`
(etc) renamed to reduce likelihood of clash with user attributes.
* Added license file to the distribution
mock is a Python module that provides a core Mock class. It removes
the need to create a host of stubs throughout your test suite. After
performing an action, you can make assertions about which methods /
attributes were used and arguments they were called with. You can
also specify return values and set needed attributes in the normal
way.