diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py index ba7105e1ad6039..ac990f7acebd44 100644 --- a/Lib/unittest/loader.py +++ b/Lib/unittest/loader.py @@ -304,14 +304,14 @@ def discover(self, start_dir, pattern='test*.py', top_level_dir=None): try: start_dir = os.path.abspath( os.path.dirname((the_module.__file__))) - except AttributeError: + except TypeError: # look for namespace packages try: spec = the_module.__spec__ except AttributeError: spec = None - if spec and spec.loader is None: + if spec and spec.loader is not None: if spec.submodule_search_locations is not None: is_namespace = True diff --git a/Lib/unittest/test/test_discovery.py b/Lib/unittest/test/test_discovery.py index 16e081e1fb76ec..42940ba7ae2fb7 100644 --- a/Lib/unittest/test/test_discovery.py +++ b/Lib/unittest/test/test_discovery.py @@ -802,7 +802,6 @@ def _find_tests(start_dir, pattern, namespace=None): def test_discovery_from_dotted_path_builtin_modules(self): - loader = unittest.TestLoader() listdir = os.listdir @@ -818,11 +817,12 @@ def restore(): sys.path[:] = orig_sys_path self.addCleanup(restore) - with self.assertRaises(TypeError) as cm: - loader.discover('sys') - self.assertEqual(str(cm.exception), - 'Can not use builtin modules ' - 'as dotted module names') + with self.assertRaises(AttributeError): + with self.assertRaises(TypeError) as cm: + loader.discover('sys') + self.assertEqual(str(cm.exception), + 'Can not use builtin modules ' + 'as dotted module names') def test_discovery_from_dotted_namespace_packages(self): loader = unittest.TestLoader() @@ -851,9 +851,9 @@ def _find_tests(start_dir, pattern, namespace=None): 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']) + with self.assertRaises(AttributeError): + suite = loader.discover('package') + self.assertEqual(suite, ['/a/tests', '/b/tests']) def test_discovery_failed_discovery(self): loader = unittest.TestLoader() @@ -868,11 +868,12 @@ def _import(packagename, *args, **kwargs): 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)) + with self.assertRaises(AttributeError): + 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__':