Kaydet (Commit) 2c2a4e63 authored tarafından Victor Stinner's avatar Victor Stinner

Add Mock.assert_called()

Issue #26323: Add assert_called() and assert_called_once() methods to
unittest.mock.Mock.
üst 82442b70
...@@ -259,6 +259,34 @@ the *new_callable* argument to :func:`patch`. ...@@ -259,6 +259,34 @@ the *new_callable* argument to :func:`patch`.
used to set attributes on the mock after it is created. See the used to set attributes on the mock after it is created. See the
:meth:`configure_mock` method for details. :meth:`configure_mock` method for details.
.. method:: assert_called(*args, **kwargs)
Assert that the mock was called at least once.
>>> mock = Mock()
>>> mock.method()
<Mock name='mock.method()' id='...'>
>>> mock.method.assert_called()
.. versionadded:: 3.6
.. method:: assert_called_once(*args, **kwargs)
Assert that the mock was called exactly once.
>>> mock = Mock()
>>> mock.method()
<Mock name='mock.method()' id='...'>
>>> mock.method.assert_called_once()
>>> mock.method()
<Mock name='mock.method()' id='...'>
>>> mock.method.assert_called_once()
Traceback (most recent call last):
...
AssertionError: Expected 'method' to have been called once. Called 2 times.
.. versionadded:: 3.6
.. method:: assert_called_with(*args, **kwargs) .. method:: assert_called_with(*args, **kwargs)
......
...@@ -161,6 +161,18 @@ telnetlib ...@@ -161,6 +161,18 @@ telnetlib
Stéphane Wirtel in :issue:`25485`). Stéphane Wirtel in :issue:`25485`).
unittest.mock
-------------
The :class:`~unittest.mock.Mock` class has the following improvements:
* Two new methods, :meth:`Mock.assert_called()
<unittest.mock.Mock.assert_called>` and :meth:`Mock.assert_called_once()
<unittest.mock.Mock.assert_called_once>` to check if the mock object
was called.
(Contributed by Amit Saha in :issue:`26323`.)
urllib.robotparser urllib.robotparser
------------------ ------------------
......
...@@ -772,6 +772,24 @@ class NonCallableMock(Base): ...@@ -772,6 +772,24 @@ class NonCallableMock(Base):
(self._mock_name or 'mock', self.call_count)) (self._mock_name or 'mock', self.call_count))
raise AssertionError(msg) raise AssertionError(msg)
def assert_called(_mock_self):
"""assert that the mock was called at least once
"""
self = _mock_self
if self.call_count == 0:
msg = ("Expected '%s' to have been called." %
self._mock_name or 'mock')
raise AssertionError(msg)
def assert_called_once(_mock_self):
"""assert that the mock was called only once.
"""
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))
raise AssertionError(msg)
def assert_called_with(_mock_self, *args, **kwargs): def assert_called_with(_mock_self, *args, **kwargs):
"""assert that the mock was called with the specified arguments. """assert that the mock was called with the specified arguments.
......
...@@ -1222,6 +1222,27 @@ class MockTest(unittest.TestCase): ...@@ -1222,6 +1222,27 @@ class MockTest(unittest.TestCase):
with self.assertRaises(AssertionError): with self.assertRaises(AssertionError):
m.hello.assert_not_called() m.hello.assert_not_called()
def test_assert_called(self):
m = Mock()
with self.assertRaises(AssertionError):
m.hello.assert_called()
m.hello()
m.hello.assert_called()
m.hello()
m.hello.assert_called()
def test_assert_called_once(self):
m = Mock()
with self.assertRaises(AssertionError):
m.hello.assert_called_once()
m.hello()
m.hello.assert_called_once()
m.hello()
with self.assertRaises(AssertionError):
m.hello.assert_called_once()
#Issue21256 printout of keyword args should be in deterministic order #Issue21256 printout of keyword args should be in deterministic order
def test_sorted_call_signature(self): def test_sorted_call_signature(self):
m = Mock() m = Mock()
......
...@@ -1267,6 +1267,7 @@ Bernt Røskar Brenna ...@@ -1267,6 +1267,7 @@ Bernt Røskar Brenna
Constantina S. Constantina S.
Patrick Sabin Patrick Sabin
Sébastien Sablé Sébastien Sablé
Amit Saha
Suman Saha Suman Saha
Hajime Saitou Hajime Saitou
George Sakkis George Sakkis
......
...@@ -201,6 +201,9 @@ Core and Builtins ...@@ -201,6 +201,9 @@ Core and Builtins
Library Library
------- -------
- Issue #26323: Add Mock.assert_called() and Mock.assert_called_once()
methods to unittest.mock. Patch written by Amit Saha.
- Issue #20589: Invoking Path.owner() and Path.group() on Windows now raise - Issue #20589: Invoking Path.owner() and Path.group() on Windows now raise
NotImplementedError instead of ImportError. NotImplementedError instead of ImportError.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment