mirror of https://github.com/python/cpython
merge with 3.3
This commit is contained in:
commit
cd50108341
|
@ -432,14 +432,14 @@ decorator indvidually to every method whose name starts with "test".
|
|||
.. _further-examples:
|
||||
|
||||
Further Examples
|
||||
================
|
||||
----------------
|
||||
|
||||
|
||||
Here are some more examples for some slightly more advanced scenarios.
|
||||
|
||||
|
||||
Mocking chained calls
|
||||
---------------------
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Mocking chained calls is actually straightforward with mock once you
|
||||
understand the :attr:`~Mock.return_value` attribute. When a mock is called for
|
||||
|
@ -510,7 +510,7 @@ this list of calls for us:
|
|||
|
||||
|
||||
Partial mocking
|
||||
---------------
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
In some tests I wanted to mock out a call to `datetime.date.today()
|
||||
<http://docs.python.org/library/datetime.html#datetime.date.today>`_ to return
|
||||
|
@ -554,7 +554,7 @@ is discussed in `this blog entry
|
|||
|
||||
|
||||
Mocking a Generator Method
|
||||
--------------------------
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
A Python generator is a function or method that uses the `yield statement
|
||||
<http://docs.python.org/reference/simple_stmts.html#the-yield-statement>`_ to
|
||||
|
@ -596,7 +596,7 @@ To configure the values returned from the iteration (implicit in the call to
|
|||
|
||||
|
||||
Applying the same patch to every test method
|
||||
--------------------------------------------
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If you want several patches in place for multiple test methods the obvious way
|
||||
is to apply the patch decorators to every method. This can feel like unnecessary
|
||||
|
@ -656,7 +656,7 @@ exception is raised in the setUp then tearDown is not called.
|
|||
|
||||
|
||||
Mocking Unbound Methods
|
||||
-----------------------
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Whilst writing tests today I needed to patch an *unbound method* (patching the
|
||||
method on the class rather than on the instance). I needed self to be passed
|
||||
|
@ -695,7 +695,7 @@ with a Mock instance instead, and isn't called with `self`.
|
|||
|
||||
|
||||
Checking multiple calls with mock
|
||||
---------------------------------
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
mock has a nice API for making assertions about how your mock objects are used.
|
||||
|
||||
|
@ -737,7 +737,7 @@ looks remarkably similar to the repr of the `call_args_list`:
|
|||
|
||||
|
||||
Coping with mutable arguments
|
||||
-----------------------------
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Another situation is rare, but can bite you, is when your mock is called with
|
||||
mutable arguments. `call_args` and `call_args_list` store *references* to the
|
||||
|
@ -853,7 +853,7 @@ children of a `CopyingMock` will also have the type `CopyingMock`.
|
|||
|
||||
|
||||
Nesting Patches
|
||||
---------------
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Using patch as a context manager is nice, but if you do multiple patches you
|
||||
can end up with nested with statements indenting further and further to the
|
||||
|
@ -901,7 +901,7 @@ for us:
|
|||
|
||||
|
||||
Mocking a dictionary with MagicMock
|
||||
-----------------------------------
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You may want to mock a dictionary, or other container object, recording all
|
||||
access to it whilst having it still behave like a dictionary.
|
||||
|
@ -976,7 +976,7 @@ mock methods and attributes:
|
|||
|
||||
|
||||
Mock subclasses and their attributes
|
||||
------------------------------------
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
There are various reasons why you might want to subclass `Mock`. One reason
|
||||
might be to add helper methods. Here's a silly example:
|
||||
|
@ -1039,7 +1039,7 @@ onto the mock constructor:
|
|||
|
||||
|
||||
Mocking imports with patch.dict
|
||||
-------------------------------
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
One situation where mocking can be hard is where you have a local import inside
|
||||
a function. These are harder to mock because they aren't using an object from
|
||||
|
@ -1102,7 +1102,7 @@ With slightly more work you can also mock package imports:
|
|||
|
||||
|
||||
Tracking order of calls and less verbose call assertions
|
||||
--------------------------------------------------------
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The :class:`Mock` class allows you to track the *order* of method calls on
|
||||
your mock objects through the :attr:`~Mock.method_calls` attribute. This
|
||||
|
@ -1182,7 +1182,7 @@ order. In this case you can pass `any_order=True` to `assert_has_calls`:
|
|||
|
||||
|
||||
More complex argument matching
|
||||
------------------------------
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Using the same basic concept as :data:`ANY` we can implement matchers to do more
|
||||
complex assertions on objects used as arguments to mocks.
|
||||
|
|
Loading…
Reference in New Issue