From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- python/mock-1.0.0/html/changelog.html | 839 ++++++++++++++++++++++++++++++++++ 1 file changed, 839 insertions(+) create mode 100644 python/mock-1.0.0/html/changelog.html (limited to 'python/mock-1.0.0/html/changelog.html') diff --git a/python/mock-1.0.0/html/changelog.html b/python/mock-1.0.0/html/changelog.html new file mode 100644 index 000000000..c4b935d2c --- /dev/null +++ b/python/mock-1.0.0/html/changelog.html @@ -0,0 +1,839 @@ + + + + + + + + + CHANGELOG — Mock 1.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

CHANGELOG

+
+

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 +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 sentinel objects
  • +
  • ANY can be used for comparisons against 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 mock_calls list for all calls (including magic +methods and chained calls)
  • +
  • patch() and patch.object() now create a MagicMock +instead of a Mock by default
  • +
  • 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
  • +
  • New mock assert methods assert_any_call() and +assert_has_calls()
  • +
  • Implemented Autospeccing (recursive, lazy speccing of mocks with +mocked signatures for functions/methods), as the autospec argument to +patch
  • +
  • Added the create_autospec() function for manually creating +‘auto-specced’ mocks
  • +
  • patch.multiple() for doing multiple patches in a single call, using +keyword arguments
  • +
  • Setting 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 NonCallableMock and NonCallableMagicMock, mocks +without a __call__ method
  • +
  • Addition of mock_add_spec() method for adding (or changing) a +spec on an existing mock
  • +
  • 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
  • +
  • Addition of attach_mock() method
  • +
  • Added ANY for ignoring arguments in assert_called_with() +calls
  • +
  • Addition of call helper object
  • +
  • Improved repr for mocks
  • +
  • Improved repr for Mock.call_args and entries in +Mock.call_args_list, Mock.method_calls and +Mock.mock_calls
  • +
  • Improved repr for 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 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 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 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 +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)
  • +
+
+
+

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.

+

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

+
    +
  • 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 mocksignature()
  • +
  • Ability to mock magic methods
  • +
  • Ability to use patch and patch.object as class decorators
  • +
  • Renamed patch_object to patch.object() (patch_object is +deprecated)
  • +
  • Addition of 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 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 +to run
  • +
  • Konrad Delong 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:

+
+
+

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.

+
+ + +
+
+
+ +
+
+ + + + \ No newline at end of file -- cgit v1.2.3