mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	bpo-35047, unittest.mock: Better error messages on assert_called_xxx failures (GH-10090)
unittest.mock now includes mock calls in exception messages if assert_not_called, assert_called_once, or assert_called_once_with fails.
This commit is contained in:
		
							parent
							
								
									18032632ab
								
							
						
					
					
						commit
						47d94241a3
					
				
					 4 changed files with 62 additions and 8 deletions
				
			
		|  | @ -30,6 +30,7 @@ | |||
| import sys | ||||
| import builtins | ||||
| from types import ModuleType | ||||
| from unittest.util import safe_repr | ||||
| from functools import wraps, partial | ||||
| 
 | ||||
| 
 | ||||
|  | @ -778,8 +779,10 @@ def assert_not_called(_mock_self): | |||
|         """ | ||||
|         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): | ||||
|  | @ -796,8 +799,10 @@ def assert_called_once(_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): | ||||
|  | @ -825,8 +830,10 @@ def assert_called_once_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) | ||||
| 
 | ||||
|  | @ -847,8 +854,8 @@ def assert_has_calls(self, calls, any_order=False): | |||
|         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 | ||||
| 
 | ||||
|  | @ -909,6 +916,19 @@ def _get_child_mock(self, **kw): | |||
|         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: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Petter Strandmark
						Petter Strandmark