123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- # Copyright (C) 2007-2012 Michael Foord & the mock team
- # E-mail: fuzzyman AT voidspace DOT org DOT uk
- # http://www.voidspace.org.uk/python/mock/
- import unittest
- from unittest.test.testmock.support import is_instance, X, SomeClass
- from unittest.mock import (
- Mock, MagicMock, NonCallableMagicMock,
- NonCallableMock, patch, create_autospec,
- CallableMixin
- )
- class TestCallable(unittest.TestCase):
- def assertNotCallable(self, mock):
- self.assertTrue(is_instance(mock, NonCallableMagicMock))
- self.assertFalse(is_instance(mock, CallableMixin))
- def test_non_callable(self):
- for mock in NonCallableMagicMock(), NonCallableMock():
- self.assertRaises(TypeError, mock)
- self.assertFalse(hasattr(mock, '__call__'))
- self.assertIn(mock.__class__.__name__, repr(mock))
- def test_hierarchy(self):
- self.assertTrue(issubclass(MagicMock, Mock))
- self.assertTrue(issubclass(NonCallableMagicMock, NonCallableMock))
- def test_attributes(self):
- one = NonCallableMock()
- self.assertTrue(issubclass(type(one.one), Mock))
- two = NonCallableMagicMock()
- self.assertTrue(issubclass(type(two.two), MagicMock))
- def test_subclasses(self):
- class MockSub(Mock):
- pass
- one = MockSub()
- self.assertTrue(issubclass(type(one.one), MockSub))
- class MagicSub(MagicMock):
- pass
- two = MagicSub()
- self.assertTrue(issubclass(type(two.two), MagicSub))
- def test_patch_spec(self):
- patcher = patch('%s.X' % __name__, spec=True)
- mock = patcher.start()
- self.addCleanup(patcher.stop)
- instance = mock()
- mock.assert_called_once_with()
- self.assertNotCallable(instance)
- self.assertRaises(TypeError, instance)
- def test_patch_spec_set(self):
- patcher = patch('%s.X' % __name__, spec_set=True)
- mock = patcher.start()
- self.addCleanup(patcher.stop)
- instance = mock()
- mock.assert_called_once_with()
- self.assertNotCallable(instance)
- self.assertRaises(TypeError, instance)
- def test_patch_spec_instance(self):
- patcher = patch('%s.X' % __name__, spec=X())
- mock = patcher.start()
- self.addCleanup(patcher.stop)
- self.assertNotCallable(mock)
- self.assertRaises(TypeError, mock)
- def test_patch_spec_set_instance(self):
- patcher = patch('%s.X' % __name__, spec_set=X())
- mock = patcher.start()
- self.addCleanup(patcher.stop)
- self.assertNotCallable(mock)
- self.assertRaises(TypeError, mock)
- def test_patch_spec_callable_class(self):
- class CallableX(X):
- def __call__(self): pass
- class Sub(CallableX):
- pass
- class Multi(SomeClass, Sub):
- pass
- for arg in 'spec', 'spec_set':
- for Klass in CallableX, Sub, Multi:
- with patch('%s.X' % __name__, **{arg: Klass}) as mock:
- instance = mock()
- mock.assert_called_once_with()
- self.assertTrue(is_instance(instance, MagicMock))
- # inherited spec
- self.assertRaises(AttributeError, getattr, instance,
- 'foobarbaz')
- result = instance()
- # instance is callable, result has no spec
- instance.assert_called_once_with()
- result(3, 2, 1)
- result.assert_called_once_with(3, 2, 1)
- result.foo(3, 2, 1)
- result.foo.assert_called_once_with(3, 2, 1)
- def test_create_autospec(self):
- mock = create_autospec(X)
- instance = mock()
- self.assertRaises(TypeError, instance)
- mock = create_autospec(X())
- self.assertRaises(TypeError, mock)
- def test_create_autospec_instance(self):
- mock = create_autospec(SomeClass, instance=True)
- self.assertRaises(TypeError, mock)
- mock.wibble()
- mock.wibble.assert_called_once_with()
- self.assertRaises(TypeError, mock.wibble, 'some', 'args')
- if __name__ == "__main__":
- unittest.main()
|