class unittest.mock.Mock(spec=None, side_effect=None, return_value=DEFAULT, wraps=None, name=None, spec_set=None, unsafe=False, **kwargs)
Create a new Mock
object. Mock
takes several optional arguments that specify the behaviour of the Mock object:
-
spec: This can be either a list of strings or an existing object (a class or instance) that acts as the specification for the mock object. If you pass in an object then a list of strings is formed by calling dir on the object (excluding unsupported magic attributes and methods). Accessing any attribute not in this list will raise an
AttributeError
.If spec is an object (rather than a list of strings) then
__class__
returns the class of the spec object. This allows mocks to passisinstance()
tests. -
spec_set: A stricter variant of spec. If used, attempting to set or get an attribute on the mock that isn’t on the object passed as spec_set will raise an
AttributeError
. -
side_effect: A function to be called whenever the Mock is called. See the
side_effect
attribute. Useful for raising exceptions or dynamically changing return values. The function is called with the same arguments as the mock, and unless it returnsDEFAULT
, the return value of this function is used as the return value.Alternatively side_effect can be an exception class or instance. In this case the exception will be raised when the mock is called.
If side_effect is an iterable then each call to the mock will return the next value from the iterable.
A side_effect can be cleared by setting it to
None
. -
return_value: The value returned when the mock is called. By default this is a new Mock (created on first access). See the
return_value
attribute. -
unsafe: By default if any attribute starts with assert or assret will raise an
AttributeError
. Passingunsafe=True
will allow access to these attributes.New in version 3.5.
-
wraps: Item for the mock object to wrap. If wraps is not None then calling the Mock will pass the call through to the wrapped object (returning the real result). Attribute access on the mock will return a Mock object that wraps the corresponding attribute of the wrapped object (so attempting to access an attribute that doesn’t exist will raise an
AttributeError
).If the mock has an explicit return_value set then calls are not passed to the wrapped object and the return_value is returned instead.
- name: If the mock has a name then it will be used in the repr of the mock. This can be useful for debugging. The name is propagated to child mocks.
Mocks can also be called with arbitrary keyword arguments. These will be used to set attributes on the mock after it is created. See the configure_mock()
method for details.
-
assert_called_with(*args, **kwargs)
-
This method is a convenient way of asserting that calls are made in a particular way:
>>> mock = Mock() >>> mock.method(1, 2, 3, test='wow') <Mock name='mock.method()' id='...'> >>> mock.method.assert_called_with(1, 2, 3, test='wow')
-
assert_called_once_with(*args, **kwargs)
-
Assert that the mock was called exactly once and with the specified arguments.
>>> mock = Mock(return_value=None) >>> mock('foo', bar='baz') >>> mock.assert_called_once_with('foo', bar='baz') >>> mock('foo', bar='baz') >>> mock.assert_called_once_with('foo', bar='baz') Traceback (most recent call last): ... AssertionError: Expected 'mock' to be called once. Called 2 times.
-
assert_any_call(*args, **kwargs)
-
assert the mock has been called with the specified arguments.
The assert passes if the mock has ever been called, unlike
assert_called_with()
andassert_called_once_with()
that only pass if the call is the most recent one.>>> mock = Mock(return_value=None) >>> mock(1, 2, arg='thing') >>> mock('some', 'thing', 'else') >>> mock.assert_any_call(1, 2, arg='thing')
-
assert_has_calls(calls, any_order=False)
-
assert the mock has been called with the specified calls. The
mock_calls
list is checked for the calls.If any_order is false (the default) then the calls must be sequential. There can be extra calls before or after the specified calls.
If any_order is true then the calls can be in any order, but they must all appear in
mock_calls
.>>> mock = Mock(return_value=None) >>> mock(1) >>> mock(2) >>> mock(3) >>> mock(4) >>> calls = [call(2), call(3)] >>> mock.assert_has_calls(calls) >>> calls = [call(4), call(2), call(3)] >>> mock.assert_has_calls(calls, any_order=True)
-
assert_not_called()
-
Assert the mock was never called.
>>> m = Mock() >>> m.hello.assert_not_called() >>> obj = m.hello() >>> m.hello.assert_not_called() Traceback (most recent call last): ... AssertionError: Expected 'hello' to not have been called. Called 1 times.
New in version 3.5.
-
reset_mock()
-
The reset_mock method resets all the call attributes on a mock object:
>>> mock = Mock(return_value=None) >>> mock('hello') >>> mock.called True >>> mock.reset_mock() >>> mock.called False
This can be useful where you want to make a series of assertions that reuse the same object. Note that
reset_mock()
doesn’t clear the return value,side_effect
or any child attributes you have set using normal assignment. Child mocks and the return value mock (if any) are reset as well.
-
mock_add_spec(spec, spec_set=False)
-
Add a spec to a mock. spec can either be an object or a list of strings. Only attributes on the spec can be fetched as attributes from the mock.
If spec_set is true then only attributes on the spec can be set.
-
attach_mock(mock, attribute)
-
Attach a mock as an attribute of this one, replacing its name and parent. Calls to the attached mock will be recorded in the
method_calls
andmock_calls
attributes of this one.
-
configure_mock(**kwargs)
-
Set attributes on the mock through keyword arguments.
Attributes plus return values and side effects can be set on child mocks using standard dot notation and unpacking a dictionary in the method call:
>>> mock = Mock() >>> attrs = {'method.return_value': 3, 'other.side_effect': KeyError} >>> mock.configure_mock(**attrs) >>> mock.method() 3 >>> mock.other() Traceback (most recent call last): ... KeyError
The same thing can be achieved in the constructor call to mocks:
>>> attrs = {'method.return_value': 3, 'other.side_effect': KeyError} >>> mock = Mock(some_attribute='eggs', **attrs) >>> mock.some_attribute 'eggs' >>> mock.method() 3 >>> mock.other() Traceback (most recent call last): ... KeyError
configure_mock()
exists to make it easier to do configuration after the mock has been created.
-
__dir__()
-
Mock
objects limit the results ofdir(some_mock)
to useful results. For mocks with a spec this includes all the permitted attributes for the mock.See
FILTER_DIR
for what this filtering does, and how to switch it off.
-
_get_child_mock(**kw)
-
Create the child mocks for attributes and return value. By default child mocks will be the same type as the parent. Subclasses of Mock may want to override this to customize the way child mocks are made.
For non-callable mocks the callable variant will be used (rather than any custom subclass).
-
called
-
A boolean representing whether or not the mock object has been called:
>>> mock = Mock(return_value=None) >>> mock.called False >>> mock() >>> mock.called True
-
call_count
-
An integer telling you how many times the mock object has been called:
>>> mock = Mock(return_value=None) >>> mock.call_count 0 >>> mock() >>> mock() >>> mock.call_count 2
-
return_value
-
Set this to configure the value returned by calling the mock:
>>> mock = Mock() >>> mock.return_value = 'fish' >>> mock() 'fish'
The default return value is a mock object and you can configure it in the normal way:
>>> mock = Mock() >>> mock.return_value.attribute = sentinel.Attribute >>> mock.return_value() <Mock name='mock()()' id='...'> >>> mock.return_value.assert_called_with()
return_value
can also be set in the constructor:>>> mock = Mock(return_value=3) >>> mock.return_value 3 >>> mock() 3
-
side_effect
-
This can either be a function to be called when the mock is called, an iterable or an exception (class or instance) to be raised.
If you pass in a function it will be called with same arguments as the mock and unless the function returns the
DEFAULT
singleton the call to the mock will then return whatever the function returns. If the function returnsDEFAULT
then the mock will return its normal value (from thereturn_value
).If you pass in an iterable, it is used to retrieve an iterator which must yield a value on every call. This value can either be an exception instance to be raised, or a value to be returned from the call to the mock (
DEFAULT
handling is identical to the function case).An example of a mock that raises an exception (to test exception handling of an API):
>>> mock = Mock() >>> mock.side_effect = Exception('Boom!') >>> mock() Traceback (most recent call last): ... Exception: Boom!
Using
side_effect
to return a sequence of values:>>> mock = Mock() >>> mock.side_effect = [3, 2, 1] >>> mock(), mock(), mock() (3, 2, 1)
Using a callable:
>>> mock = Mock(return_value=3) >>> def side_effect(*args, **kwargs): ... return DEFAULT ... >>> mock.side_effect = side_effect >>> mock() 3
side_effect
can be set in the constructor. Here’s an example that adds one to the value the mock is called with and returns it:>>> side_effect = lambda value: value + 1 >>> mock = Mock(side_effect=side_effect) >>> mock(3) 4 >>> mock(-8) -7
Setting
side_effect
toNone
clears it:>>> m = Mock(side_effect=KeyError, return_value=3) >>> m() Traceback (most recent call last): ... KeyError >>> m.side_effect = None >>> m() 3
-
call_args
-
This is either
None
(if the mock hasn’t been called), or the arguments that the mock was last called with. This will be in the form of a tuple: the first member is any ordered arguments the mock was called with (or an empty tuple) and the second member is any keyword arguments (or an empty dictionary).>>> mock = Mock(return_value=None) >>> print(mock.call_args) None >>> mock() >>> mock.call_args call() >>> mock.call_args == () True >>> mock(3, 4) >>> mock.call_args call(3, 4) >>> mock.call_args == ((3, 4),) True >>> mock(3, 4, 5, key='fish', next='w00t!') >>> mock.call_args call(3, 4, 5, key='fish', next='w00t!')
call_args
, along with members of the listscall_args_list
,method_calls
andmock_calls
arecall
objects. These are tuples, so they can be unpacked to get at the individual arguments and make more complex assertions. See calls as tuples.
-
call_args_list
-
This is a list of all the calls made to the mock object in sequence (so the length of the list is the number of times it has been called). Before any calls have been made it is an empty list. The
call
object can be used for conveniently constructing lists of calls to compare withcall_args_list
.>>> mock = Mock(return_value=None) >>> mock() >>> mock(3, 4) >>> mock(key='fish', next='w00t!') >>> mock.call_args_list [call(), call(3, 4), call(key='fish', next='w00t!')] >>> expected = [(), ((3, 4),), ({'key': 'fish', 'next': 'w00t!'},)] >>> mock.call_args_list == expected True
Members of
call_args_list
arecall
objects. These can be unpacked as tuples to get at the individual arguments. See calls as tuples.
-
method_calls
-
As well as tracking calls to themselves, mocks also track calls to methods and attributes, and their methods and attributes:
>>> mock = Mock() >>> mock.method() <Mock name='mock.method()' id='...'> >>> mock.property.method.attribute() <Mock name='mock.property.method.attribute()' id='...'> >>> mock.method_calls [call.method(), call.property.method.attribute()]
Members of
method_calls
arecall
objects. These can be unpacked as tuples to get at the individual arguments. See calls as tuples.
-
mock_calls
-
mock_calls
records all calls to the mock object, its methods, magic methods and return value mocks.>>> mock = MagicMock() >>> result = mock(1, 2, 3) >>> mock.first(a=3) <MagicMock name='mock.first()' id='...'> >>> mock.second() <MagicMock name='mock.second()' id='...'> >>> int(mock) 1 >>> result(1) <MagicMock name='mock()()' id='...'> >>> expected = [call(1, 2, 3), call.first(a=3), call.second(), ... call.__int__(), call()(1)] >>> mock.mock_calls == expected True
Members of
mock_calls
arecall
objects. These can be unpacked as tuples to get at the individual arguments. See calls as tuples.
-
__class__
-
Normally the
__class__
attribute of an object will return its type. For a mock object with aspec
,__class__
returns the spec class instead. This allows mock objects to passisinstance()
tests for the object they are replacing / masquerading as:>>> mock = Mock(spec=3) >>> isinstance(mock, int) True
__class__
is assignable to, this allows a mock to pass anisinstance()
check without forcing you to use a spec:>>> mock = Mock() >>> mock.__class__ = dict >>> isinstance(mock, dict) True
Please login to continue.