[TIP] mock 0.7.0 final release

Michael Foord michael at voidspace.org.uk
Mon Mar 21 18:19:49 PDT 2011


Hey all,

Yay for conference driven development, I got the final release of mock 
0.7.0 done in time for PyCon. No api changes since the release 
candidate. The only changes are documentation improvements (double yay!)

At PyCon I gave a talk on mock. It was an intro talk on how to use mock 
and why you should use it, but also covered some of the shiny new 
features in 0.7.0. The video of the talk is up (thanks to the PyCon 
video team):

* PyCon Video: Testing with mock https://blip.tv/file/4881513

(Whilst we're on the topic of PyCon, a big thank you to Terry Peppers 
and Titus brown for the TiP bof which was great fun. I think I owe Kumar 
an apology for my rude comments about Fudge, but you should still use 
mock anyway.)

Here's the release announcement for mock 0.7.0 final.

mock is a Python library for simple mocking and patching (replacing
objects with mocks during test runs). The "headline features" in 0.7.0
are Python 3 support and the ability to mock magic methods. You can
now mock objects that behave like containers or are used as context
managers. mock is designed for use with unittest, based on the "action
-> assertion" pattern rather than "record -> replay". People are
happily using mock with Python test frameworks like nose and py.test.
0.7.0 is a major new release with a bunch of other new features and
bugfixes as well.

* http://pypi.python.org/pypi/mock/ (download)
* http://www.voidspace.org.uk/python/mock/ (documentation)
* https://code.google.com/p/mock/ (repo and issue tracker)

The big change since 0.7.0 rc 1 is documentation changes including a stylish
new Sphinx theme. https://github.com/coordt/ADCtheme/

Three new pages particularly worth looking at are:

* Mocking Magic Methods 
http://www.voidspace.org.uk/python/mock/magicmock.html
* Further examples of mock 
http://www.voidspace.org.uk/python/mock/examples.html
* Comparison with other mock frameworks 
http://www.voidspace.org.uk/python/mock/compare.html

The full set of changes since 0.6.0 are:

http://www.voidspace.org.uk/python/mock/changelog.html#version-0-7-0

* 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

-- 
http://www.voidspace.org.uk/

May you do good and not evil
May you find forgiveness for yourself and forgive others
May you share freely, never taking more than you give.
-- the sqlite blessing http://www.sqlite.org/different.html




More information about the testing-in-python mailing list