Skip to content

Commit

Permalink
[3.6] bpo-33747: Avoid mutating the global sys.modules dict in unitte…
Browse files Browse the repository at this point in the history
…st.mock tests (GH-8520) (GH-11032)

(cherry picked from commit 3cf7438)


Co-authored-by: Anirudha Bose <ani07nov@gmail.com>


https://bugs.python.org/issue33747
  • Loading branch information
miss-islington committed Dec 11, 2018
1 parent be6ec44 commit 7d9f219
Showing 1 changed file with 16 additions and 11 deletions.
27 changes: 16 additions & 11 deletions Lib/unittest/test/testmock/testpatch.py
Expand Up @@ -9,6 +9,7 @@
from unittest.test.testmock import support from unittest.test.testmock import support
from unittest.test.testmock.support import SomeClass, is_instance from unittest.test.testmock.support import SomeClass, is_instance


from test.test_importlib.util import uncache
from unittest.mock import ( from unittest.mock import (
NonCallableMock, CallableMixin, sentinel, NonCallableMock, CallableMixin, sentinel,
MagicMock, Mock, NonCallableMagicMock, patch, _patch, MagicMock, Mock, NonCallableMagicMock, patch, _patch,
Expand Down Expand Up @@ -1660,20 +1661,19 @@ def test_mock_calls_with_patch(self):




def test_patch_imports_lazily(self): def test_patch_imports_lazily(self):
sys.modules.pop('squizz', None)

p1 = patch('squizz.squozz') p1 = patch('squizz.squozz')
self.assertRaises(ImportError, p1.start) self.assertRaises(ImportError, p1.start)


squizz = Mock() with uncache('squizz'):
squizz.squozz = 6 squizz = Mock()
sys.modules['squizz'] = squizz sys.modules['squizz'] = squizz
p1 = patch('squizz.squozz')
squizz.squozz = 3
p1.start()
p1.stop()
self.assertEqual(squizz.squozz, 3)


squizz.squozz = 6
p1 = patch('squizz.squozz')
squizz.squozz = 3
p1.start()
p1.stop()
self.assertEqual(squizz.squozz, 3)


def test_patch_propogrates_exc_on_exit(self): def test_patch_propogrates_exc_on_exit(self):
class holder: class holder:
Expand All @@ -1696,7 +1696,12 @@ def with_custom_patch(target):
def test(mock): def test(mock):
raise RuntimeError raise RuntimeError


self.assertRaises(RuntimeError, test) with uncache('squizz'):
squizz = Mock()
sys.modules['squizz'] = squizz

self.assertRaises(RuntimeError, test)

self.assertIs(holder.exc_info[0], RuntimeError) self.assertIs(holder.exc_info[0], RuntimeError)
self.assertIsNotNone(holder.exc_info[1], self.assertIsNotNone(holder.exc_info[1],
'exception value not propgated') 'exception value not propgated')
Expand Down

0 comments on commit 7d9f219

Please sign in to comment.