| Metadata-Version: 1.0 | |
| Name: mock | |
| Version: 1.0.0 | |
| Summary: A Python Mocking and Patching Library for Testing | |
| Home-page: http://www.voidspace.org.uk/python/mock/ | |
| Author: Michael Foord | |
| Author-email: michael@voidspace.org.uk | |
| License: UNKNOWN | |
| Description: mock is a library for testing in Python. It allows you to replace parts of | |
| your system under test with mock objects and make assertions about how they | |
| have been used. | |
| mock is now part of the Python standard library, available as `unittest.mock < | |
| http://docs.python.org/py3k/library/unittest.mock.html#module-unittest.mock>`_ | |
| in Python 3.3 onwards. | |
| mock provides a core `MagicMock` class removing the need to create a host of | |
| stubs throughout your test suite. After performing an action, you can make | |
| assertions about which methods / attributes were used and arguments they were | |
| called with. You can also specify return values and set needed attributes in | |
| the normal way. | |
| mock is tested on Python versions 2.4-2.7 and Python 3. mock is also tested | |
| with the latest versions of Jython and pypy. | |
| The mock module also provides utility functions / objects to assist with | |
| testing, particularly monkey patching. | |
| * `PDF documentation for 1.0 beta 1 | |
| <http://www.voidspace.org.uk/downloads/mock-1.0.0.pdf>`_ | |
| * `mock on google code (repository and issue tracker) | |
| <http://code.google.com/p/mock/>`_ | |
| * `mock documentation | |
| <http://www.voidspace.org.uk/python/mock/>`_ | |
| * `mock on PyPI <http://pypi.python.org/pypi/mock/>`_ | |
| * `Mailing list (testing-in-python@lists.idyll.org) | |
| <http://lists.idyll.org/listinfo/testing-in-python>`_ | |
| Mock is very easy to use and is designed for use with | |
| `unittest <http://pypi.python.org/pypi/unittest2>`_. Mock is based on | |
| the 'action -> assertion' pattern instead of 'record -> replay' used by many | |
| mocking frameworks. See the `mock documentation`_ for full details. | |
| Mock objects create all attributes and methods as you access them and store | |
| details of how they have been used. You can configure them, to specify return | |
| values or limit what attributes are available, and then make assertions about | |
| how they have been used:: | |
| >>> from mock import Mock | |
| >>> real = ProductionClass() | |
| >>> real.method = Mock(return_value=3) | |
| >>> real.method(3, 4, 5, key='value') | |
| 3 | |
| >>> real.method.assert_called_with(3, 4, 5, key='value') | |
| `side_effect` allows you to perform side effects, return different values or | |
| raise an exception when a mock is called:: | |
| >>> mock = Mock(side_effect=KeyError('foo')) | |
| >>> mock() | |
| Traceback (most recent call last): | |
| ... | |
| KeyError: 'foo' | |
| >>> values = {'a': 1, 'b': 2, 'c': 3} | |
| >>> def side_effect(arg): | |
| ... return values[arg] | |
| ... | |
| >>> mock.side_effect = side_effect | |
| >>> mock('a'), mock('b'), mock('c') | |
| (3, 2, 1) | |
| >>> mock.side_effect = [5, 4, 3, 2, 1] | |
| >>> mock(), mock(), mock() | |
| (5, 4, 3) | |
| Mock has many other ways you can configure it and control its behaviour. For | |
| example the `spec` argument configures the mock to take its specification from | |
| another object. Attempting to access attributes or methods on the mock that | |
| don't exist on the spec will fail with an `AttributeError`. | |
| The `patch` decorator / context manager makes it easy to mock classes or | |
| objects in a module under test. The object you specify will be replaced with a | |
| mock (or other object) during the test and restored when the test ends:: | |
| >>> from mock import patch | |
| >>> @patch('test_module.ClassName1') | |
| ... @patch('test_module.ClassName2') | |
| ... def test(MockClass2, MockClass1): | |
| ... test_module.ClassName1() | |
| ... test_module.ClassName2() | |
| ... assert MockClass1.called | |
| ... assert MockClass2.called | |
| ... | |
| >>> test() | |
| .. note:: | |
| When you nest patch decorators the mocks are passed in to the decorated | |
| function in the same order they applied (the normal *python* order that | |
| decorators are applied). This means from the bottom up, so in the example | |
| above the mock for `test_module.ClassName2` is passed in first. | |
| With `patch` it matters that you patch objects in the namespace where they | |
| are looked up. This is normally straightforward, but for a quick guide | |
| read `where to patch | |
| <http://www.voidspace.org.uk/python/mock/patch.html#where-to-patch>`_. | |
| As well as a decorator `patch` can be used as a context manager in a with | |
| statement:: | |
| >>> with patch.object(ProductionClass, 'method') as mock_method: | |
| ... mock_method.return_value = None | |
| ... real = ProductionClass() | |
| ... real.method(1, 2, 3) | |
| ... | |
| >>> mock_method.assert_called_once_with(1, 2, 3) | |
| There is also `patch.dict` for setting values in a dictionary just during the | |
| scope of a test and restoring the dictionary to its original state when the | |
| test ends:: | |
| >>> foo = {'key': 'value'} | |
| >>> original = foo.copy() | |
| >>> with patch.dict(foo, {'newkey': 'newvalue'}, clear=True): | |
| ... assert foo == {'newkey': 'newvalue'} | |
| ... | |
| >>> assert foo == original | |
| Mock supports the mocking of Python magic methods. The easiest way of | |
| using magic methods is with the `MagicMock` class. It allows you to do | |
| things like:: | |
| >>> from mock import MagicMock | |
| >>> mock = MagicMock() | |
| >>> mock.__str__.return_value = 'foobarbaz' | |
| >>> str(mock) | |
| 'foobarbaz' | |
| >>> mock.__str__.assert_called_once_with() | |
| Mock allows you to assign functions (or other Mock instances) to magic methods | |
| and they will be called appropriately. The MagicMock class is just a Mock | |
| variant that has all of the magic methods pre-created for you (well - all the | |
| useful ones anyway). | |
| The following is an example of using magic methods with the ordinary Mock | |
| class:: | |
| >>> from mock import Mock | |
| >>> mock = Mock() | |
| >>> mock.__str__ = Mock(return_value = 'wheeeeee') | |
| >>> str(mock) | |
| 'wheeeeee' | |
| For ensuring that the mock objects your tests use have the same api as the | |
| objects they are replacing, you can use "auto-speccing". Auto-speccing can | |
| be done through the `autospec` argument to patch, or the `create_autospec` | |
| function. Auto-speccing creates mock objects that have the same attributes | |
| and methods as the objects they are replacing, and any functions and methods | |
| (including constructors) have the same call signature as the real object. | |
| This ensures that your mocks will fail in the same way as your production | |
| code if they are used incorrectly:: | |
| >>> from mock import create_autospec | |
| >>> def function(a, b, c): | |
| ... pass | |
| ... | |
| >>> mock_function = create_autospec(function, return_value='fishy') | |
| >>> mock_function(1, 2, 3) | |
| 'fishy' | |
| >>> mock_function.assert_called_once_with(1, 2, 3) | |
| >>> mock_function('wrong arguments') | |
| Traceback (most recent call last): | |
| ... | |
| TypeError: <lambda>() takes exactly 3 arguments (1 given) | |
| `create_autospec` can also be used on classes, where it copies the signature of | |
| the `__init__` method, and on callable objects where it copies the signature of | |
| the `__call__` method. | |
| The distribution contains tests and documentation. The tests require | |
| `unittest2 <http://pypi.python.org/pypi/unittest2>`_ to run. | |
| Docs from the in-development version of `mock` can be found at | |
| `mock.readthedocs.org <http://mock.readthedocs.org>`_. | |
| Keywords: testing,test,mock,mocking,unittest,patching,stubs,fakes,doubles | |
| Platform: UNKNOWN | |
| Classifier: Development Status :: 5 - Production/Stable | |
| Classifier: Environment :: Console | |
| Classifier: Intended Audience :: Developers | |
| Classifier: License :: OSI Approved :: BSD License | |
| Classifier: Programming Language :: Python | |
| Classifier: Programming Language :: Python :: 2 | |
| Classifier: Programming Language :: Python :: 3 | |
| Classifier: Programming Language :: Python :: 2.4 | |
| Classifier: Programming Language :: Python :: 2.5 | |
| Classifier: Programming Language :: Python :: 2.6 | |
| Classifier: Programming Language :: Python :: 2.7 | |
| Classifier: Programming Language :: Python :: 3.1 | |
| Classifier: Programming Language :: Python :: 3.2 | |
| Classifier: Programming Language :: Python :: Implementation :: CPython | |
| Classifier: Programming Language :: Python :: Implementation :: PyPy | |
| Classifier: Programming Language :: Python :: Implementation :: Jython | |
| Classifier: Operating System :: OS Independent | |
| Classifier: Topic :: Software Development :: Libraries | |
| Classifier: Topic :: Software Development :: Libraries :: Python Modules | |
| Classifier: Topic :: Software Development :: Testing |