ANN: mock 0.8 beta 3
Fuzzyman
fuzzyman at gmail.com
Thu Aug 18 01:21:36 CEST 2011
I've released mock 0.8 beta 3. You can download it it or install it
with:
pip install -U mock==dev
* http://www.voidspace.org.uk/python/mock
* http://www.voidspace.org.uk/downloads/mock-0.8.0beta3.tar.gz
mock is a library for testing in Python. It allows you to replace
parts of your system under test with mock objects. The latest stable
release is 0.7.2, which you can download from pypi.
* http://pypi.python.org/pypi/mock
mock 0.8 beta 3 is now feature complete, and is hopefully the code
that will be released as mock 0.8 final. All that is left is
documentation work, so now is the ideal time to try the beta!
mock 0.8 is a big release with lots of improvements. You can read a
summary of the new features in the following blog entries:
* http://www.voidspace.org.uk/python/weblog/arch_d7_2011_08_13.shtml#e1224
* http://www.voidspace.org.uk/python/weblog/arch_d7_2011_07_30.shtml#e1223
* http://www.voidspace.org.uk/python/weblog/arch_d7_2011_07_16.shtml#e1220
* http://www.voidspace.org.uk/python/weblog/arch_d7_2011_06_11.shtml#e1219
The important new features in 0.8 include:
* 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 assert methods `assert_any_call` and `assert_has_calls`
* `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
* Added `ANY` for ignoring arguments in `assert_called_with` calls
* Addition of `call` helper object
* Implemented auto-speccing (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
* Improved repr for mocks
* Improved repr for `Mock.call_args` and entries in
`Mock.call_args_list`,
`Mock.method_calls` and `Mock.mock_calls`
Other changes include:
* New mock method `configure_mock` for setting attributes and return
values /
side effects on the mock and its attributes
* 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
* 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.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`
* 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
* 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
Please try out the new beta and report any issues or give feedback on
the new features.
All the best,
Michael Foord
More information about the Python-announce-list
mailing list