mirror of
https://github.com/python/cpython.git
synced 2025-08-03 08:34:29 +00:00
Issue #17015: When it has a spec, a Mock object now inspects its signature when matching calls, so that arguments can be matched positionally or by name.
This commit is contained in:
parent
18b30ee88e
commit
5c64df70b5
6 changed files with 313 additions and 87 deletions
|
@ -277,6 +277,20 @@ instantiate the class in those tests.
|
|||
...
|
||||
AttributeError: object has no attribute 'old_method'
|
||||
|
||||
Using a specification also enables a smarter matching of calls made to the
|
||||
mock, regardless of whether some parameters were passed as positional or
|
||||
named arguments::
|
||||
|
||||
>>> def f(a, b, c): pass
|
||||
...
|
||||
>>> mock = Mock(spec=f)
|
||||
>>> mock(1, 2, 3)
|
||||
<Mock name='mock()' id='140161580456576'>
|
||||
>>> mock.assert_called_with(a=1, b=2, c=3)
|
||||
|
||||
If you want this smarter matching to also work with method calls on the mock,
|
||||
you can use :ref:`auto-speccing <auto-speccing>`.
|
||||
|
||||
If you want a stronger form of specification that prevents the setting
|
||||
of arbitrary attributes as well as the getting of them then you can use
|
||||
`spec_set` instead of `spec`.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue