import sys
import builtins
from types import ModuleType
+from unittest.util import safe_repr
from functools import wraps, partial
"""
self = _mock_self
if self.call_count != 0:
- msg = ("Expected '%s' to not have been called. Called %s times." %
- (self._mock_name or 'mock', self.call_count))
+ msg = ("Expected '%s' to not have been called. Called %s times.%s"
+ % (self._mock_name or 'mock',
+ self.call_count,
+ self._calls_repr()))
raise AssertionError(msg)
def assert_called(_mock_self):
"""
self = _mock_self
if not self.call_count == 1:
- msg = ("Expected '%s' to have been called once. Called %s times." %
- (self._mock_name or 'mock', self.call_count))
+ msg = ("Expected '%s' to have been called once. Called %s times.%s"
+ % (self._mock_name or 'mock',
+ self.call_count,
+ self._calls_repr()))
raise AssertionError(msg)
def assert_called_with(_mock_self, *args, **kwargs):
with the specified arguments."""
self = _mock_self
if not self.call_count == 1:
- msg = ("Expected '%s' to be called once. Called %s times." %
- (self._mock_name or 'mock', self.call_count))
+ msg = ("Expected '%s' to be called once. Called %s times.%s"
+ % (self._mock_name or 'mock',
+ self.call_count,
+ self._calls_repr()))
raise AssertionError(msg)
return self.assert_called_with(*args, **kwargs)
if not any_order:
if expected not in all_calls:
raise AssertionError(
- 'Calls not found.\nExpected: %r\n'
- 'Actual: %r' % (_CallList(calls), self.mock_calls)
+ 'Calls not found.\nExpected: %r%s'
+ % (_CallList(calls), self._calls_repr(prefix="Actual"))
) from cause
return
return klass(**kw)
+ def _calls_repr(self, prefix="Calls"):
+ """Renders self.mock_calls as a string.
+
+ Example: "\nCalls: [call(1), call(2)]."
+
+ If self.mock_calls is empty, an empty string is returned. The
+ output will be truncated if very long.
+ """
+ if not self.mock_calls:
+ return ""
+ return f"\n{prefix}: {safe_repr(self.mock_calls)}."
+
+
def _try_iter(obj):
if obj is None:
import copy
+import re
import sys
import tempfile
lambda: mock.assert_called_once_with('bob', 'bar', baz=2)
)
+ def test_assert_called_once_with_call_list(self):
+ m = Mock()
+ m(1)
+ m(2)
+ self.assertRaisesRegex(AssertionError,
+ re.escape("Calls: [call(1), call(2)]"),
+ lambda: m.assert_called_once_with(2))
+
def test_assert_called_once_with_function_spec(self):
def f(a, b, c, d=None):
with self.assertRaises(AssertionError):
m.hello.assert_not_called()
+ def test_assert_not_called_message(self):
+ m = Mock()
+ m(1, 2)
+ self.assertRaisesRegex(AssertionError,
+ re.escape("Calls: [call(1, 2)]"),
+ m.assert_not_called)
+
def test_assert_called(self):
m = Mock()
with self.assertRaises(AssertionError):
with self.assertRaises(AssertionError):
m.hello.assert_called_once()
+ def test_assert_called_once_message(self):
+ m = Mock()
+ m(1, 2)
+ m(3)
+ self.assertRaisesRegex(AssertionError,
+ re.escape("Calls: [call(1, 2), call(3)]"),
+ m.assert_called_once)
+
+ def test_assert_called_once_message_not_called(self):
+ m = Mock()
+ with self.assertRaises(AssertionError) as e:
+ m.assert_called_once()
+ self.assertNotIn("Calls:", str(e.exception))
+
#Issue21256 printout of keyword args should be in deterministic order
def test_sorted_call_signature(self):
m = Mock()