diff options
Diffstat (limited to 'Lib/unittest/mock.py')
| -rw-r--r-- | Lib/unittest/mock.py | 25 | 
1 files changed, 22 insertions, 3 deletions
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index 5555774..d001976 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -27,9 +27,13 @@ __version__ = '1.0'  import inspect  import pprint  import sys +import builtins +from types import ModuleType  from functools import wraps, partial +_builtins = {name for name in dir(builtins) if not name.startswith('_')} +  BaseExceptions = (BaseException,)  if 'java' in sys.platform:      # jython @@ -375,7 +379,7 @@ class NonCallableMock(Base):      def __init__(              self, spec=None, wraps=None, name=None, spec_set=None,              parent=None, _spec_state=None, _new_name='', _new_parent=None, -            _spec_as_instance=False, _eat_self=None, **kwargs +            _spec_as_instance=False, _eat_self=None, unsafe=False, **kwargs          ):          if _new_parent is None:              _new_parent = parent @@ -405,6 +409,7 @@ class NonCallableMock(Base):          __dict__['_mock_mock_calls'] = _CallList()          __dict__['method_calls'] = _CallList() +        __dict__['_mock_unsafe'] = unsafe          if kwargs:              self.configure_mock(**kwargs) @@ -561,13 +566,16 @@ class NonCallableMock(Base):      def __getattr__(self, name): -        if name == '_mock_methods': +        if name in {'_mock_methods', '_mock_unsafe'}:              raise AttributeError(name)          elif self._mock_methods is not None:              if name not in self._mock_methods or name in _all_magics:                  raise AttributeError("Mock object has no attribute %r" % name)          elif _is_magic(name):              raise AttributeError(name) +        if not self._mock_unsafe: +            if name.startswith(('assert', 'assret')): +                raise AttributeError(name)          result = self._mock_children.get(name)          if result is _deleted: @@ -750,6 +758,14 @@ class NonCallableMock(Base):          else:              return _call +    def assert_not_called(_mock_self): +        """assert that the mock was never called. +        """ +        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)) +            raise AssertionError(msg)      def assert_called_with(_mock_self, *args, **kwargs):          """assert that the mock was called with the specified arguments. @@ -1166,6 +1182,9 @@ class _patch(object):          else:              local = True +        if name in _builtins and isinstance(target, ModuleType): +            self.create = True +          if not self.create and original is DEFAULT:              raise AttributeError(                  "%s does not have the attribute %r" % (target, name) @@ -1875,7 +1894,7 @@ def _format_call_signature(name, args, kwargs):      formatted_args = ''      args_string = ', '.join([repr(arg) for arg in args])      kwargs_string = ', '.join([ -        '%s=%r' % (key, value) for key, value in kwargs.items() +        '%s=%r' % (key, value) for key, value in sorted(kwargs.items())      ])      if args_string:          formatted_args = args_string  | 
