[Python-checkins] bpo-33748: fix tests altering sys.path and sys.modules (GH-7433) (GH-7603)

Ned Deily webhook-mailer at python.org
Sun Jun 10 17:45:54 EDT 2018


https://github.com/python/cpython/commit/040d4a7b5899b9635c6997c5ecb91f8299f0b352
commit: 040d4a7b5899b9635c6997c5ecb91f8299f0b352
branch: 3.6
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: Ned Deily <nad at python.org>
date: 2018年06月10日T17:45:51-04:00
summary:
bpo-33748: fix tests altering sys.path and sys.modules (GH-7433) (GH-7603)
(cherry picked from commit 4ab4695388fb9ec03a14d93e90ce50d832a920ec)
Co-authored-by: Tal Einat <taleinat+github at gmail.com>
files:
M Lib/unittest/test/test_discovery.py
diff --git a/Lib/unittest/test/test_discovery.py b/Lib/unittest/test/test_discovery.py
index 227b44a47026..204043b493b5 100644
--- a/Lib/unittest/test/test_discovery.py
+++ b/Lib/unittest/test/test_discovery.py
@@ -4,10 +4,11 @@
 import sys
 import types
 import pickle
-import builtins
 from test import support
+import test.test_importlib.util
 
 import unittest
+import unittest.mock
 import unittest.test
 
 
@@ -820,7 +821,6 @@ def restore():
 def test_discovery_from_dotted_namespace_packages(self):
 loader = unittest.TestLoader()
 
- orig_import = __import__
 package = types.ModuleType('package')
 package.__path__ = ['/a', '/b']
 package.__spec__ = types.SimpleNamespace(
@@ -832,11 +832,6 @@ def _import(packagename, *args, **kwargs):
 sys.modules[packagename] = package
 return package
 
- def cleanup():
- builtins.__import__ = orig_import
- self.addCleanup(cleanup)
- builtins.__import__ = _import
-
 _find_tests_args = []
 def _find_tests(start_dir, pattern, namespace=None):
 _find_tests_args.append((start_dir, pattern))
@@ -844,28 +839,34 @@ def _find_tests(start_dir, pattern, namespace=None):
 
 loader._find_tests = _find_tests
 loader.suiteClass = list
- suite = loader.discover('package')
+
+ with unittest.mock.patch('builtins.__import__', _import):
+ # Since loader.discover() can modify sys.path, restore it when done.
+ with support.DirsOnSysPath():
+ # Make sure to remove 'package' from sys.modules when done.
+ with test.test_importlib.util.uncache('package'):
+ suite = loader.discover('package')
+
 self.assertEqual(suite, ['/a/tests', '/b/tests'])
 
 def test_discovery_failed_discovery(self):
 loader = unittest.TestLoader()
 package = types.ModuleType('package')
- orig_import = __import__
 
 def _import(packagename, *args, **kwargs):
 sys.modules[packagename] = package
 return package
 
- def cleanup():
- builtins.__import__ = orig_import
- self.addCleanup(cleanup)
- builtins.__import__ = _import
-
- with self.assertRaises(TypeError) as cm:
- loader.discover('package')
- self.assertEqual(str(cm.exception),
- 'don\'t know how to discover from {!r}'
- .format(package))
+ with unittest.mock.patch('builtins.__import__', _import):
+ # Since loader.discover() can modify sys.path, restore it when done.
+ with support.DirsOnSysPath():
+ # Make sure to remove 'package' from sys.modules when done.
+ with test.test_importlib.util.uncache('package'):
+ with self.assertRaises(TypeError) as cm:
+ loader.discover('package')
+ self.assertEqual(str(cm.exception),
+ 'don\'t know how to discover from {!r}'
+ .format(package))
 
 
 if __name__ == '__main__':


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /