skip to navigation
skip to content

Python Wiki

Python Insider Blog

Python 2 or 3?

Help Fund Python

[Python resources in languages other than English]

Non-English Resources

Add an event to this calendar.

Times are shown in UTC/GMT.

Add an event to this calendar.

PEP:417
Title:Including mock in the Standard Library
Version:eba6bcdb19eb
Last-Modified:2012-05-01 23:37:34 +1000 (Tue, 01 May 2012)
Author:Michael Foord <michael at python.org>
Status:Final
Type:Standards Track
Content-Type:text/x-rst
Created:12-Mar-2012
Python-Version:3.3
Post-History:12-Mar-2012
Resolution:http://mail.python.org/pipermail/python-dev/2012-March/117507.html

Abstract

This PEP proposes adding the mock [1] testing library to the Python standard library as unittest.mock.

Rationale

Creating mock objects for testing is a common need in Python. Many developers create ad-hoc mocks, as needed, in their test suites. This is currently what we do in the Python test suite, where a standardised mock object library would be helpful.

There are many mock object libraries available for Python [2]. Of these, mock is overwhelmingly the most popular, with as many downloads on PyPI as the other mocking libraries combined.

An advantage of mock is that it is a mocking library and not a framework. It provides a configurable and flexible mock object, without being opinionated about how you write your tests. The mock api is now well battle-tested and stable.

mock also handles safely monkeypatching and unmonkeypatching objects during the scope of a test. This is hard to do safely and many developers / projects mimic this functionality (often incorrectly). A standardised way to do this, handling the complexity of patching in the presence of the descriptor protocol (etc) is useful. People are asking for a "patch" [3] feature to unittest. Doing this via mock.patch is preferable to re-implementing part of this functionality in unittest.

Background

Addition of mock to the Python standard library was discussed and agreed to at the Python Language Summit 2012.

Open Issues

As of release 0.8, which is current at the time of writing, mock is compatible with Python 2.4-3.2. Moving into the Python standard library will allow for the removal of some Python 2 specific "compatibility hacks".

mock 0.8 introduced a new feature, "auto-speccing", obsoletes an older mock feature called "mocksignature". The "mocksignature" functionality can be removed from mock altogether prior to inclusion.