cpython: 98f061402fcf (original) (raw)

Mercurial > cpython

changeset 106095:98f061402fcf

Issue #20804: The unittest.mock.sentinel attributes now preserve their identity when they are copied or pickled. [#20804]

Serhiy Storchaka storchaka@gmail.com
date Wed, 11 Jan 2017 20:13:03 +0200
parents a76eed0baa0f
children 2b7b203e3909
files Doc/library/unittest.mock.rst Doc/whatsnew/3.7.rst Lib/unittest/mock.py Lib/unittest/test/testmock/testsentinel.py Misc/NEWS
diffstat 5 files changed, 33 insertions(+), 0 deletions(-)[+] [-] Doc/library/unittest.mock.rst 4 Doc/whatsnew/3.7.rst 7 Lib/unittest/mock.py 6 Lib/unittest/test/testmock/testsentinel.py 13 Misc/NEWS 3

line wrap: on

line diff

--- a/Doc/library/unittest.mock.rst +++ b/Doc/library/unittest.mock.rst @@ -1831,6 +1831,10 @@ sentinel the same attribute will always return the same object. The objects returned have a sensible repr so that test failure messages are readable.

+ Sometimes when testing you need to test that a specific object is passed as an argument to another method, or returned. It can be common to create named sentinel objects to test this. :data:sentinel provides a convenient way of

--- a/Doc/whatsnew/3.7.rst +++ b/Doc/whatsnew/3.7.rst @@ -93,6 +93,13 @@ New Modules Improved Modules ================ +unittest.mock +------------- + +The :const:~unittest.mock.sentinel attributes now preserve their identity +when they are :mod:copied <copy> or :mod:pickled <pickle>. +(Contributed by Serhiy Storchaka in :issue:20804.) + Optimizations =============

--- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -238,6 +238,9 @@ class _SentinelObject(object): def repr(self): return 'sentinel.%s' % self.name

+ class _Sentinel(object): """Access attributes to return a named object, usable as a sentinel.""" @@ -250,6 +253,9 @@ class _Sentinel(object): raise AttributeError return self._sentinels.setdefault(name, _SentinelObject(name))

+ sentinel = _Sentinel()

--- a/Lib/unittest/test/testmock/testsentinel.py +++ b/Lib/unittest/test/testmock/testsentinel.py @@ -1,4 +1,6 @@ import unittest +import copy +import pickle from unittest.mock import sentinel, DEFAULT @@ -23,6 +25,17 @@ class SentinelTest(unittest.TestCase): # If this doesn't raise an AttributeError then help(mock) is broken self.assertRaises(AttributeError, lambda: sentinel.bases)

+

+ if name == 'main': unittest.main()

--- a/Misc/NEWS +++ b/Misc/NEWS @@ -212,6 +212,9 @@ Core and Builtins Library ------- +- Issue #20804: The unittest.mock.sentinel attributes now preserve their