mirror of
https://github.com/python/cpython.git
synced 2025-12-04 00:30:19 +00:00
merge with 3.3
This commit is contained in:
commit
cd50108341
1 changed files with 14 additions and 14 deletions
|
|
@ -432,14 +432,14 @@ decorator indvidually to every method whose name starts with "test".
|
||||||
.. _further-examples:
|
.. _further-examples:
|
||||||
|
|
||||||
Further Examples
|
Further Examples
|
||||||
================
|
----------------
|
||||||
|
|
||||||
|
|
||||||
Here are some more examples for some slightly more advanced scenarios.
|
Here are some more examples for some slightly more advanced scenarios.
|
||||||
|
|
||||||
|
|
||||||
Mocking chained calls
|
Mocking chained calls
|
||||||
---------------------
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Mocking chained calls is actually straightforward with mock once you
|
Mocking chained calls is actually straightforward with mock once you
|
||||||
understand the :attr:`~Mock.return_value` attribute. When a mock is called for
|
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
|
Partial mocking
|
||||||
---------------
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
In some tests I wanted to mock out a call to `datetime.date.today()
|
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
|
<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
|
Mocking a Generator Method
|
||||||
--------------------------
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
A Python generator is a function or method that uses the `yield statement
|
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
|
<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
|
Applying the same patch to every test method
|
||||||
--------------------------------------------
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
If you want several patches in place for multiple test methods the obvious way
|
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
|
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
|
Mocking Unbound Methods
|
||||||
-----------------------
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Whilst writing tests today I needed to patch an *unbound method* (patching the
|
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
|
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
|
Checking multiple calls with mock
|
||||||
---------------------------------
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
mock has a nice API for making assertions about how your mock objects are used.
|
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
|
Coping with mutable arguments
|
||||||
-----------------------------
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Another situation is rare, but can bite you, is when your mock is called with
|
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
|
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
|
Nesting Patches
|
||||||
---------------
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Using patch as a context manager is nice, but if you do multiple patches you
|
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
|
can end up with nested with statements indenting further and further to the
|
||||||
|
|
@ -901,7 +901,7 @@ for us:
|
||||||
|
|
||||||
|
|
||||||
Mocking a dictionary with MagicMock
|
Mocking a dictionary with MagicMock
|
||||||
-----------------------------------
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
You may want to mock a dictionary, or other container object, recording all
|
You may want to mock a dictionary, or other container object, recording all
|
||||||
access to it whilst having it still behave like a dictionary.
|
access to it whilst having it still behave like a dictionary.
|
||||||
|
|
@ -976,7 +976,7 @@ mock methods and attributes:
|
||||||
|
|
||||||
|
|
||||||
Mock subclasses and their attributes
|
Mock subclasses and their attributes
|
||||||
------------------------------------
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
There are various reasons why you might want to subclass `Mock`. One reason
|
There are various reasons why you might want to subclass `Mock`. One reason
|
||||||
might be to add helper methods. Here's a silly example:
|
might be to add helper methods. Here's a silly example:
|
||||||
|
|
@ -1039,7 +1039,7 @@ onto the mock constructor:
|
||||||
|
|
||||||
|
|
||||||
Mocking imports with patch.dict
|
Mocking imports with patch.dict
|
||||||
-------------------------------
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
One situation where mocking can be hard is where you have a local import inside
|
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
|
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
|
Tracking order of calls and less verbose call assertions
|
||||||
--------------------------------------------------------
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The :class:`Mock` class allows you to track the *order* of method calls on
|
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
|
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
|
More complex argument matching
|
||||||
------------------------------
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Using the same basic concept as :data:`ANY` we can implement matchers to do more
|
Using the same basic concept as :data:`ANY` we can implement matchers to do more
|
||||||
complex assertions on objects used as arguments to mocks.
|
complex assertions on objects used as arguments to mocks.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue