|  | .. currentmodule:: mock | 
|  |  | 
|  |  | 
|  | CHANGELOG | 
|  | ========= | 
|  |  | 
|  | 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 | 
|  | <http://docs.python.org/py3k/library/unittest.mock.html#module-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 | 
|  | can't be fetched from the object's 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` wouldn't 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 | 
|  |  | 
|  |  | 
|  | 2012/07/13 Version 1.0.0 beta 1 | 
|  | -------------------------------- | 
|  |  | 
|  | * Added `patch.stopall` method to stop all active patches created by `start` | 
|  | * BUGFIX: calling `MagicMock.reset_mock` wouldn't reset magic method mocks | 
|  | * BUGFIX: calling `reset_mock` on a `MagicMock` created with autospec could | 
|  | raise an exception | 
|  |  | 
|  |  | 
|  | 2012/05/04 Version 1.0.0 alpha 2 | 
|  | -------------------------------- | 
|  |  | 
|  | * `PropertyMock` attributes are now standard `MagicMocks` | 
|  | * `create_autospec` works with attributes present in results of `dir` that | 
|  | can't be fetched from the object's 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 | 
|  |  | 
|  |  | 
|  | 2012/03/25 Version 1.0.0 alpha 1 | 
|  | -------------------------------- | 
|  |  | 
|  | The standard library version! | 
|  |  | 
|  | * `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 | 
|  | * 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 | 
|  |  | 
|  |  | 
|  | 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 `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 | 
|  |  | 
|  |  | 
|  | 2012/01/10 Version 0.8.0 release candidate 2 | 
|  | -------------------------------------------- | 
|  |  | 
|  | * Removed the `configure` keyword argument to `create_autospec` and allow | 
|  | arbitrary keyword arguments (for the `Mock` constructor) instead | 
|  | * Fixed `ANY` equality with some types in `assert_called_with` calls | 
|  | * Switched to a standard Sphinx theme (compatible with | 
|  | `readthedocs.org <http://mock.readthedocs.org>`_) | 
|  |  | 
|  |  | 
|  | 2011/12/29 Version 0.8.0 release candidate 1 | 
|  | -------------------------------------------- | 
|  |  | 
|  | * `create_autospec` on the return value of a mocked class will use `__call__` | 
|  | for the signature rather than `__init__` | 
|  | * Performance improvement instantiating `Mock` and `MagicMock` | 
|  | * Mocks used as magic methods have the same type as their parent instead of | 
|  | being hardcoded to `MagicMock` | 
|  |  | 
|  | Special thanks to Julian Berman for his help with diagnosing and improving | 
|  | performance in this release. | 
|  |  | 
|  |  | 
|  | 2011/10/09 Version 0.8.0 beta 4 | 
|  | ------------------------------- | 
|  |  | 
|  | * `patch` lookup is done at use time not at decoration time | 
|  | * When attaching a Mock to another Mock as a magic method, calls are recorded | 
|  | in mock_calls | 
|  | * Addition of `attach_mock` method | 
|  | * Renamed the internal classes `Sentinel` and `SentinelObject` to prevent abuse | 
|  | * BUGFIX: various issues around circular references with mocks (setting a mock | 
|  | return value to be itself etc) | 
|  |  | 
|  |  | 
|  | 2011/08/15 Version 0.8.0 beta 3 | 
|  | ------------------------------- | 
|  |  | 
|  | * 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) | 
|  | * Addition of `mock_add_spec` method for adding (or changing) a spec on an | 
|  | existing mock | 
|  | * Improved repr for `Mock.call_args` and entries in `Mock.call_args_list`, | 
|  | `Mock.method_calls` and `Mock.mock_calls` | 
|  | * Improved repr for mocks | 
|  | * BUGFIX: minor fixes in the way `mock_calls` is worked out, | 
|  | especially for "intermediate" mocks in a call chain | 
|  |  | 
|  |  | 
|  | 2011/08/05 Version 0.8.0 beta 2 | 
|  | ------------------------------- | 
|  |  | 
|  | * Setting `side_effect` to an iterable will cause calls to the mock to return | 
|  | the next value from the iterable | 
|  | * Added `assert_any_call` method | 
|  | * Moved `assert_has_calls` from call lists onto mocks | 
|  | * BUGFIX: `call_args` and all members of `call_args_list` are two tuples of | 
|  | `(args, kwargs)` again instead of three tuples of `(name, args, kwargs)` | 
|  |  | 
|  |  | 
|  | 2011/07/25 Version 0.8.0 beta 1 | 
|  | ------------------------------- | 
|  |  | 
|  | * `patch.TEST_PREFIX` for controlling how patchers recognise test methods when | 
|  | used to decorate a class | 
|  | * `Mock` call lists (`call_args_list`, `method_calls` & `mock_calls`) are now | 
|  | custom list objects that allow membership tests for "sub lists" and have | 
|  | an `assert_has_calls` method for unordered call checks | 
|  | * `callargs` changed to *always* be a three-tuple of `(name, args, kwargs)` | 
|  | * Addition of `mock_calls` list for *all* calls (including magic methods and | 
|  | chained calls) | 
|  | * Extension of `call` object to support chained calls and `callargs` for better | 
|  | comparisons with or without names. `call` object has a `call_list` method for | 
|  | chained calls | 
|  | * Added the public `instance` argument to `create_autospec` | 
|  | * Support for using Java exceptions as a `side_effect` on Jython | 
|  | * Improved failure messages for `assert_called_with` and | 
|  | `assert_called_once_with` | 
|  | * Tuples as well as lists can be used to specify allowed methods for `spec` & | 
|  | `spec_set` arguments | 
|  | * BUGFIX: Fixed bug in `patch.multiple` for argument passing when creating | 
|  | mocks | 
|  | * Added license file to the distribution | 
|  |  | 
|  |  | 
|  | 2011/07/16 Version 0.8.0 alpha 2 | 
|  | -------------------------------- | 
|  |  | 
|  | * `patch.multiple` for doing multiple patches in a single call, using keyword | 
|  | arguments | 
|  | * 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 `NonCallableMock` and `NonCallableMagicMock`, mocks without a | 
|  | `__call__` method | 
|  | * Mocks created by `patch` have a `MagicMock` as the `return_value` where a | 
|  | class is being patched | 
|  | * `create_autospec` can create non-callable mocks for non-callable objects. | 
|  | `return_value` mocks of classes will be non-callable unless the class has | 
|  | a `__call__` method | 
|  | * `autospec` creates a `MagicMock` without a spec for properties and slot | 
|  | descriptors, because we don't know the type of object they return | 
|  | * Removed the "inherit" argument from `create_autospec` | 
|  | * Calling `stop` on an unstarted patcher fails with  a more meaningful error | 
|  | message | 
|  | * 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: autospec for functions / methods with an argument named self that | 
|  | isn't the first argument no longer broken | 
|  | * 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 | 
|  |  | 
|  |  | 
|  | 2011/06/14 Version 0.8.0 alpha 1 | 
|  | -------------------------------- | 
|  |  | 
|  | mock 0.8.0 is the last version that will support Python 2.4. | 
|  |  | 
|  | * The patchers (`patch`, `patch.object` and `patch.dict`), plus `Mock` and | 
|  | `MagicMock`, take arbitrary keyword arguments for configuration | 
|  | * New mock method `configure_mock` for setting attributes and return values / | 
|  | side effects on the mock and its attributes | 
|  | * 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 `FILTER_DIR` added to control whether `dir(mock)` filters | 
|  | private attributes. `True` by default. Note that `vars(Mock())` can still be | 
|  | used to get all instance attributes and `dir(type(Mock())` will still return | 
|  | all the other attributes (irrespective of `FILTER_DIR`) | 
|  | * `patch` and `patch.object` now create a `MagicMock` instead of a `Mock` by | 
|  | default | 
|  | * Added `ANY` for ignoring arguments in `assert_called_with` calls | 
|  | * Addition of `call` helper object | 
|  | * Protocol methods on `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 | 
|  | * Added the Mock API (`assert_called_with` etc) to functions created by | 
|  | `mocksignature` | 
|  | * Private attributes `_name`, `_methods`, '_children', `_wraps` and `_parent` | 
|  | (etc) renamed to reduce likelihood of clash with user attributes. | 
|  | * Implemented auto-speccing (recursive, lazy speccing of mocks with mocked | 
|  | signatures for functions/methods) | 
|  |  | 
|  | Limitations: | 
|  |  | 
|  | - Doesn't mock magic methods or attributes (it creates MagicMocks, so the | 
|  | magic methods are *there*, they just don't have the signature mocked nor | 
|  | are attributes followed) | 
|  | - Doesn't mock function / method attributes | 
|  | - Uses object traversal on the objects being mocked to determine types - so | 
|  | properties etc may be triggered | 
|  | - The return value of mocked classes (the 'instance') has the same call | 
|  | signature as the class __init__ (as they share the same spec) | 
|  |  | 
|  | You create auto-specced mocks by passing `autospec=True` to `patch`. | 
|  |  | 
|  | Note that attributes that are None are special cased and mocked without a | 
|  | spec (so any attribute / method can be used). This is because None is | 
|  | typically used as a default value for attributes that may be of some other | 
|  | type, and as we don't know what type that may be we allow all access. | 
|  |  | 
|  | Note that the `autospec` option to `patch` obsoletes the `mocksignature` | 
|  | option. | 
|  |  | 
|  | * Added the `create_autospec` function for manually creating 'auto-specced' | 
|  | mocks | 
|  | * Removal of deprecated `patch_object` | 
|  |  | 
|  |  | 
|  | 2011/05/30 Version 0.7.2 | 
|  | ------------------------ | 
|  |  | 
|  | * BUGFIX: instances of list subclasses can now be used as mock specs | 
|  | * BUGFIX: MagicMock equality / inequality protocol methods changed to use the | 
|  | default equality / inequality. This is done through a `side_effect` on | 
|  | the mocks used for `__eq__` / `__ne__` | 
|  |  | 
|  |  | 
|  | 2011/05/06 Version 0.7.1 | 
|  | ------------------------ | 
|  |  | 
|  | Package fixes contributed by Michael Fladischer. No code changes. | 
|  |  | 
|  | * Include template in package | 
|  | * Use isolated binaries for the tox tests | 
|  | * Unset executable bit on docs | 
|  | * Fix DOS line endings in getting-started.txt | 
|  |  | 
|  |  | 
|  | 2011/03/05 Version 0.7.0 | 
|  | ------------------------ | 
|  |  | 
|  | No API changes since 0.7.0 rc1. Many documentation changes including a stylish | 
|  | new `Sphinx theme <https://github.com/coordt/ADCtheme/>`_. | 
|  |  | 
|  | The full set of changes since 0.6.0 are: | 
|  |  | 
|  | * Python 3 compatibility | 
|  | * Ability to mock magic methods with `Mock` and addition of `MagicMock` | 
|  | with pre-created magic methods | 
|  | * Addition of `mocksignature` and `mocksignature` argument to `patch` and | 
|  | `patch.object` | 
|  | * Addition of `patch.dict` for changing dictionaries during a test | 
|  | * Ability to use `patch`, `patch.object` and `patch.dict` as class decorators | 
|  | * Renamed ``patch_object`` to `patch.object` (``patch_object`` is | 
|  | deprecated) | 
|  | * Addition of soft comparisons: `call_args`, `call_args_list` and `method_calls` | 
|  | now return tuple-like objects which compare equal even when empty args | 
|  | or kwargs are skipped | 
|  | * patchers (`patch`, `patch.object` and `patch.dict`) have start and stop | 
|  | methods | 
|  | * Addition of `assert_called_once_with` method | 
|  | * Mocks can now be named (`name` argument to constructor) and the name is used | 
|  | in the repr | 
|  | * repr of a mock with a spec includes the class name of the spec | 
|  | * `assert_called_with` works with `python -OO` | 
|  | * New `spec_set` keyword argument to `Mock` and `patch`. If used, | 
|  | attempting to *set* an attribute on a mock not on the spec will raise an | 
|  | `AttributeError` | 
|  | * Mocks created with a spec can now pass `isinstance` tests (`__class__` | 
|  | returns the type of the spec) | 
|  | * Added docstrings to all objects | 
|  | * Improved failure message for `Mock.assert_called_with` when the mock | 
|  | has not been called at all | 
|  | * Decorated functions / methods have their docstring and `__module__` | 
|  | preserved on Python 2.4. | 
|  | * BUGFIX: `mock.patch` now works correctly with certain types of objects that | 
|  | proxy attribute access, like the django settings object | 
|  | * BUGFIX: mocks are now copyable (thanks to Ned Batchelder for reporting and | 
|  | diagnosing this) | 
|  | * BUGFIX: `spec=True` works with old style classes | 
|  | * BUGFIX: ``help(mock)`` works now (on the module). Can no longer use ``__bases__`` | 
|  | as a valid sentinel name (thanks to Stephen Emslie for reporting and | 
|  | diagnosing this) | 
|  | * BUGFIX: ``side_effect`` now works with ``BaseException`` exceptions like | 
|  | ``KeyboardInterrupt`` | 
|  | * BUGFIX: `reset_mock` caused infinite recursion when a mock is set as its own | 
|  | return value | 
|  | * BUGFIX: patching the same object twice now restores the patches correctly | 
|  | * with statement tests now skipped on Python 2.4 | 
|  | * Tests require unittest2 (or unittest2-py3k) to run | 
|  | * Tested with `tox <http://pypi.python.org/pypi/tox>`_ on Python 2.4 - 3.2, | 
|  | jython and pypy (excluding 3.0) | 
|  | * Added 'build_sphinx' command to setup.py (requires setuptools or distribute) | 
|  | Thanks to Florian Bauer | 
|  | * Switched from subversion to mercurial for source code control | 
|  | * `Konrad Delong <http://konryd.blogspot.com/>`_ added as co-maintainer | 
|  |  | 
|  |  | 
|  | 2011/02/16 Version 0.7.0 RC 1 | 
|  | ----------------------------- | 
|  |  | 
|  | Changes since beta 4: | 
|  |  | 
|  | * Tested with jython, pypy and Python 3.2 and 3.1 | 
|  | * Decorated functions / methods have their docstring and `__module__` | 
|  | preserved on Python 2.4 | 
|  | * BUGFIX: `mock.patch` now works correctly with certain types of objects that | 
|  | proxy attribute access, like the django settings object | 
|  | * BUGFIX: `reset_mock` caused infinite recursion when a mock is set as its own | 
|  | return value | 
|  |  | 
|  |  | 
|  | 2010/11/12 Version 0.7.0 beta 4 | 
|  | ------------------------------- | 
|  |  | 
|  | * patchers (`patch`, `patch.object` and `patch.dict`) have start and stop | 
|  | methods | 
|  | * Addition of `assert_called_once_with` method | 
|  | * repr of a mock with a spec includes the class name of the spec | 
|  | * `assert_called_with` works with `python -OO` | 
|  | * New `spec_set` keyword argument to `Mock` and `patch`. If used, | 
|  | attempting to *set* an attribute on a mock not on the spec will raise an | 
|  | `AttributeError` | 
|  | * Attributes and return value of a `MagicMock` are `MagicMock` objects | 
|  | * Attempting to set an unsupported magic method now raises an `AttributeError` | 
|  | * `patch.dict` works as a class decorator | 
|  | * Switched from subversion to mercurial for source code control | 
|  | * BUGFIX: mocks are now copyable (thanks to Ned Batchelder for reporting and | 
|  | diagnosing this) | 
|  | * BUGFIX: `spec=True` works with old style classes | 
|  | * BUGFIX: `mocksignature=True` can now patch instance methods via | 
|  | `patch.object` | 
|  |  | 
|  |  | 
|  | 2010/09/18 Version 0.7.0 beta 3 | 
|  | ------------------------------- | 
|  |  | 
|  | * Using spec with :class:`MagicMock` only pre-creates magic methods in the spec | 
|  | * Setting a magic method on a mock with a ``spec`` can only be done if the | 
|  | spec has that method | 
|  | * Mocks can now be named (`name` argument to constructor) and the name is used | 
|  | in the repr | 
|  | * `mocksignature` can now be used with classes (signature based on `__init__`) | 
|  | and callable objects (signature based on `__call__`) | 
|  | * Mocks created with a spec can now pass `isinstance` tests (`__class__` | 
|  | returns the type of the spec) | 
|  | * Default numeric value for MagicMock is 1 rather than zero (because the | 
|  | MagicMock bool defaults to True and 0 is False) | 
|  | * Improved failure message for :meth:`~Mock.assert_called_with` when the mock | 
|  | has not been called at all | 
|  | * Adding the following to the set of supported magic methods: | 
|  |  | 
|  | - ``__getformat__`` and ``__setformat__`` | 
|  | - pickle methods | 
|  | - ``__trunc__``, ``__ceil__`` and ``__floor__`` | 
|  | - ``__sizeof__`` | 
|  |  | 
|  | * Added 'build_sphinx' command to setup.py (requires setuptools or distribute) | 
|  | Thanks to Florian Bauer | 
|  | * with statement tests now skipped on Python 2.4 | 
|  | * Tests require unittest2 to run on Python 2.7 | 
|  | * Improved several docstrings and documentation | 
|  |  | 
|  |  | 
|  | 2010/06/23 Version 0.7.0 beta 2 | 
|  | ------------------------------- | 
|  |  | 
|  | * :func:`patch.dict` works as a context manager as well as a decorator | 
|  | * ``patch.dict`` takes a string to specify dictionary as well as a dictionary | 
|  | object. If a string is supplied the name specified is imported | 
|  | * BUGFIX: ``patch.dict`` restores dictionary even when an exception is raised | 
|  |  | 
|  |  | 
|  | 2010/06/22 Version 0.7.0 beta 1 | 
|  | ------------------------------- | 
|  |  | 
|  | * Addition of :func:`mocksignature` | 
|  | * Ability to mock magic methods | 
|  | * Ability to use ``patch`` and ``patch.object`` as class decorators | 
|  | * Renamed ``patch_object`` to :func:`patch.object` (``patch_object`` is | 
|  | deprecated) | 
|  | * Addition of :class:`MagicMock` class with all magic methods pre-created for you | 
|  | * Python 3 compatibility (tested with 3.2 but should work with 3.0 & 3.1 as | 
|  | well) | 
|  | * Addition of :func:`patch.dict` for changing dictionaries during a test | 
|  | * Addition of ``mocksignature`` argument to ``patch`` and ``patch.object`` | 
|  | * ``help(mock)`` works now (on the module). Can no longer use ``__bases__`` | 
|  | as a valid sentinel name (thanks to Stephen Emslie for reporting and | 
|  | diagnosing this) | 
|  | * Addition of soft comparisons: `call_args`, `call_args_list` and `method_calls` | 
|  | now return tuple-like objects which compare equal even when empty args | 
|  | or kwargs are skipped | 
|  | * Added docstrings. | 
|  | * BUGFIX: ``side_effect`` now works with ``BaseException`` exceptions like | 
|  | ``KeyboardInterrupt`` | 
|  | * BUGFIX: patching the same object twice now restores the patches correctly | 
|  | * The tests now require `unittest2 <http://pypi.python.org/pypi/unittest2>`_ | 
|  | to run | 
|  | * `Konrad Delong <http://konryd.blogspot.com/>`_ added as co-maintainer | 
|  |  | 
|  |  | 
|  | 2009/08/22 Version 0.6.0 | 
|  | ------------------------ | 
|  |  | 
|  | * New test layout compatible with test discovery | 
|  | * Descriptors (static methods / class methods etc) can now be patched and | 
|  | restored correctly | 
|  | * Mocks can raise exceptions when called by setting ``side_effect`` to an | 
|  | exception class or instance | 
|  | * Mocks that wrap objects will not pass on calls to the underlying object if | 
|  | an explicit return_value is set | 
|  |  | 
|  |  | 
|  | 2009/04/17 Version 0.5.0 | 
|  | ------------------------ | 
|  |  | 
|  | * Made DEFAULT part of the public api. | 
|  | * Documentation built with Sphinx. | 
|  | * ``side_effect`` is now called with the same arguments as the mock is called with and | 
|  | if returns a non-DEFAULT value that is automatically set as the ``mock.return_value``. | 
|  | * ``wraps`` keyword argument used for wrapping objects (and passing calls through to the wrapped object). | 
|  | * ``Mock.reset`` renamed to ``Mock.reset_mock``, as reset is a common API name. | 
|  | * ``patch`` / ``patch_object`` are now context managers and can be used with ``with``. | 
|  | * A new 'create' keyword argument to patch and patch_object that allows them to patch | 
|  | (and unpatch) attributes that don't exist. (Potentially unsafe to use - it can allow | 
|  | you to have tests that pass when they are testing an API that doesn't exist - use at | 
|  | your own risk!) | 
|  | * The methods keyword argument to Mock has been removed and merged with spec. The spec | 
|  | argument can now be a list of methods or an object to take the spec from. | 
|  | * Nested patches may now be applied in a different order (created mocks passed | 
|  | in the opposite order). This is actually a bugfix. | 
|  | * patch and patch_object now take a spec keyword argument. If spec is | 
|  | passed in as 'True' then the Mock created will take the object it is replacing | 
|  | as its spec object. If the object being replaced is a class, then the return | 
|  | value for the mock will also use the class as a spec. | 
|  | * A Mock created without a spec will not attempt to mock any magic methods / attributes | 
|  | (they will raise an ``AttributeError`` instead). | 
|  |  | 
|  |  | 
|  | 2008/10/12 Version 0.4.0 | 
|  | ------------------------ | 
|  |  | 
|  | * Default return value is now a new mock rather than None | 
|  | * return_value added as a keyword argument to the constructor | 
|  | * New method 'assert_called_with' | 
|  | * Added 'side_effect' attribute / keyword argument called when mock is called | 
|  | * patch decorator split into two decorators: | 
|  |  | 
|  | - ``patch_object`` which takes an object and an attribute name to patch | 
|  | (plus optionally a value to patch with which defaults to a mock object) | 
|  | - ``patch`` which takes a string specifying a target to patch; in the form | 
|  | 'package.module.Class.attribute'. (plus optionally a value to | 
|  | patch with which defaults to a mock object) | 
|  |  | 
|  | * Can now patch objects with ``None`` | 
|  | * Change to patch for nose compatibility with error reporting in wrapped functions | 
|  | * Reset no longer clears children / return value etc - it just resets | 
|  | call count and call args. It also calls reset on all children (and | 
|  | the return value if it is a mock). | 
|  |  | 
|  | Thanks to Konrad Delong, Kevin Dangoor and others for patches and suggestions. | 
|  |  | 
|  |  | 
|  | 2007/12/03  Version 0.3.1 | 
|  | ------------------------- | 
|  |  | 
|  | ``patch`` maintains the name of decorated functions for compatibility with nose | 
|  | test autodiscovery. | 
|  |  | 
|  | Tests decorated with ``patch`` that use the two argument form (implicit mock | 
|  | creation) will receive the mock(s) passed in as extra arguments. | 
|  |  | 
|  | Thanks to Kevin Dangoor for these changes. | 
|  |  | 
|  |  | 
|  | 2007/11/30  Version 0.3.0 | 
|  | ------------------------- | 
|  |  | 
|  | Removed ``patch_module``. ``patch`` can now take a string as the first | 
|  | argument for patching modules. | 
|  |  | 
|  | The third argument to ``patch`` is optional - a mock will be created by | 
|  | default if it is not passed in. | 
|  |  | 
|  |  | 
|  | 2007/11/21  Version 0.2.1 | 
|  | ------------------------- | 
|  |  | 
|  | Bug fix, allows reuse of functions decorated with ``patch`` and ``patch_module``. | 
|  |  | 
|  |  | 
|  | 2007/11/20  Version 0.2.0 | 
|  | ------------------------- | 
|  |  | 
|  | Added ``spec`` keyword argument for creating ``Mock`` objects from a | 
|  | specification object. | 
|  |  | 
|  | Added ``patch`` and ``patch_module`` monkey patching decorators. | 
|  |  | 
|  | Added ``sentinel`` for convenient access to unique objects. | 
|  |  | 
|  | Distribution includes unit tests. | 
|  |  | 
|  |  | 
|  | 2007/11/19  Version 0.1.0 | 
|  | ------------------------- | 
|  |  | 
|  | Initial release. | 
|  |  | 
|  |  | 
|  | TODO and Limitations | 
|  | ==================== | 
|  |  | 
|  | Contributions, bug reports and comments welcomed! | 
|  |  | 
|  | Feature requests and bug reports are handled on the issue tracker: | 
|  |  | 
|  | * `mock issue tracker <http://code.google.com/p/mock/issues/list>`_ | 
|  |  | 
|  | `wraps` is not integrated with magic methods. | 
|  |  | 
|  | `patch` could auto-do the patching in the constructor and unpatch in the | 
|  | destructor. This would be useful in itself, but violates TOOWTDI and would be | 
|  | unsafe for IronPython & PyPy (non-deterministic calling of destructors). | 
|  | Destructors aren't called in CPython where there are cycles, but a weak | 
|  | reference with a callback can be used to get round this. | 
|  |  | 
|  | `Mock` has several attributes. This makes it unsuitable for mocking objects | 
|  | that use these attribute names. A way round this would be to provide methods | 
|  | that *hide* these attributes when needed. In 0.8 many, but not all, of these | 
|  | attributes are renamed to gain a `_mock` prefix, making it less likely that | 
|  | they will clash. Any outstanding attributes that haven't been modified with | 
|  | the prefix should be changed. | 
|  |  | 
|  | If a patch is started using `patch.start` and then not stopped correctly then | 
|  | the unpatching is not done. Using weak references it would be possible to | 
|  | detect and fix this when the patch object itself is garbage collected. This | 
|  | would be tricky to get right though. | 
|  |  | 
|  | When a `Mock` is created by `patch`, arbitrary keywords can be used to set | 
|  | attributes. If `patch` is created with a `spec`, and is replacing a class, then | 
|  | a `return_value` mock is created. The keyword arguments are not applied to the | 
|  | child mock, but could be. | 
|  |  | 
|  | When mocking a class with `patch`, passing in `spec=True` or `autospec=True`, | 
|  | the mock class has an instance created from the same spec. Should this be the | 
|  | default behaviour for mocks anyway (mock return values inheriting the spec | 
|  | from their parent), or should it be controlled by an additional keyword | 
|  | argument (`inherit`) to the Mock constructor? `create_autospec` does this, so | 
|  | an additional keyword argument to Mock is probably unnecessary. | 
|  |  | 
|  | The `mocksignature` argument to `patch` with a non `Mock` passed into | 
|  | `new_callable` will *probably* cause an error. Should it just be invalid? | 
|  |  | 
|  | Note that `NonCallableMock` and `NonCallableMagicMock` still have the unused | 
|  | (and unusable) attributes: `return_value`, `side_effect`, `call_count`, | 
|  | `call_args` and `call_args_list`. These could be removed or raise errors on | 
|  | getting / setting. They also have the `assert_called_with` and | 
|  | `assert_called_once_with` methods. Removing these would be pointless as | 
|  | fetching them would create a mock (attribute) that could be called without | 
|  | error. | 
|  |  | 
|  | Some outstanding technical debt. The way autospeccing mocks function | 
|  | signatures was copied and modified from `mocksignature`. This could all be | 
|  | refactored into one set of functions instead of two. The way we tell if | 
|  | patchers are started and if a patcher is being used for a `patch.multiple` | 
|  | call are both horrible. There are now a host of helper functions that should | 
|  | be rationalised. (Probably time to split mock into a package instead of a | 
|  | module.) | 
|  |  | 
|  | Passing arbitrary keyword arguments to `create_autospec`, or `patch` with | 
|  | `autospec`, when mocking a *function* works fine. However, the arbitrary | 
|  | attributes are set on the created mock - but `create_autospec` returns a | 
|  | real function (which doesn't have those attributes). However, what is the use | 
|  | case for using autospec to create functions with attributes that don't exist | 
|  | on the original? | 
|  |  | 
|  | `mocksignature`, plus the `call_args_list` and `method_calls` attributes of | 
|  | `Mock` could all be deprecated. |