from unittest import mock
m = mock.Mock()
m.foo()
m.mock_calls
[call.foo()]
m = mock.Mock()
m.spam(1, a=5)
m.mock_calls
[call.spam(1, a=5)]
m = mock.Mock()
m.spam(1)
m.spam(2)
m.spam(3)
m.mock_calls
[call.spam(1), call.spam(2), call.spam(3)]
m.spam(100).next()
m.spam(200).next()
m.mock_calls
[call.spam(1), call.spam(2), call.spam(3), call.spam(100), call.spam().next(), call.spam(200), call.spam().next()]
def someones_function(obj):
...
obj.open_connection('http://their.secret.url/data')
...
return obj.read()
m = mock.Mock()
someones_function(m)
m.mock_calls
[call.open_connection('http://their.secret.url/data'), call.read()]
m = mock.Mock()
len(m)
m.mock_calls
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-8-d4977dfc2171> in <module>() 1 m = mock.Mock() ----> 2 len(m) 3 m.mock_calls TypeError: object of type 'Mock' has no len()
m = mock.MagicMock()
len(m)
m.mock_calls
[call.__len__()]
m = mock.MagicMock()
print('len:', m.__len__())
print('int:', m.__int__())
print('float:', m.__float__())
print('item:', m[22])
len: 0 int: 1 float: 1.0 item: <MagicMock name='mock.__getitem__()' id='4437378608'>
m.__len__()
0
m = mock.MagicMock()
m.__foo__()
m.mock_calls
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-12-4fd0e5ed4252> in <module>() 1 m = mock.MagicMock() ----> 2 m.__foo__() 3 m.mock_calls /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/unittest/mock.py in __getattr__(self, name) 578 raise AttributeError("Mock object has no attribute %r" % name) 579 elif _is_magic(name): --> 580 raise AttributeError(name) 581 if not self._mock_unsafe: 582 if name.startswith(('assert', 'assret')): AttributeError: __foo__
m = mock.MagicMock()
m._foo__()
m.mock_calls
[call._foo__()]
m = mock.MagicMock()
"%f" % m
m.mock_calls
[call.__float__()]
m = mock.MagicMock()
"%d %s %E" % (m, m, m)
m.mock_calls
[call.__int__(), call.__str__(), call.__float__()]
class Foo:
def __div__(self, v):
pass
foo = Foo()
x = foo / 4
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-17-217e9d918646> in <module>() 1 foo = Foo() ----> 2 x = foo / 4 TypeError: unsupported operand type(s) for /: 'Foo' and 'int'
m = mock.MagicMock()
m / 2
m.mock_calls
[call.__truediv__(2)]
m = mock.MagicMock()
m // 2
m.mock_calls
[call.__floordiv__(2)]
m = mock.MagicMock()
2 / m
m // 2
m % 2
m * 2
m ** 2
m.mock_calls
[call.__rtruediv__(2), call.__floordiv__(2), call.__mod__(2), call.__mul__(2), call.__pow__(2)]
m = mock.MagicMock()
m.__iadd__.return_value = m
print(id(m))
m + 2
m += 2
print(id(m))
m.mock_calls
4437662744 4437662744
[call.__add__(2), call.__iadd__(2)]
l, t, s = mock.MagicMock(), mock.MagicMock(), mock.MagicMock()
list(l)
tuple(t)
set(s);
l.mock_calls
[call.__iter__(), call.__len__()]
t.mock_calls
[call.__iter__(), call.__len__()]
s.mock_calls
[call.__iter__()]
m = mock.MagicMock()
range(m)
m.mock_calls
[call.__index__()]
m = mock.MagicMock()
[x for x in m]
m.mock_calls
[call.__iter__()]
import numpy as np
m = mock.MagicMock()
np.array(m)
m.mock_calls
[call.__len__(), call.__iter__(), call.__len__(), call.__iter__(), call.__len__(), call.__iter__()]
__getattr__
and __repr__
__repr__
is always used the same - no big dealimport numpy as np
m = mock.MagicMock()
np.shape(m)
m.mock_calls
[]
m = mock.MagicMock()
default_attrs = set(dir(m))
default_attrs
{'assert_any_call', 'assert_called_once_with', 'assert_called_with', 'assert_has_calls', 'assert_not_called', 'attach_mock', 'call_args', 'call_args_list', 'call_count', 'called', 'configure_mock', 'method_calls', 'mock_add_spec', 'mock_calls', 'reset_mock', 'return_value', 'side_effect'}
np.shape(m)
set(dir(m)) - default_attrs
{'shape'}