diff --git a/Lib/importlib/test/import_/test_path.py b/Lib/importlib/test/import_/test_path.py
index b008b09..3eb22c9 100644
--- a/Lib/importlib/test/import_/test_path.py
+++ b/Lib/importlib/test/import_/test_path.py
@@ -1,3 +1,4 @@
+from importlib import machinery
 from .. import util
 from . import util as import_util
 from contextlib import nested
@@ -149,9 +150,64 @@
             self.path_argument_test(name)
 
 
+class FinderTests(unittest.TestCase):
+
+    """Tests for SysPathImporter."""
+
+    def test_failure(self):
+        # Test None returned upon not finding a suitable finder.
+        def mock_implicit_hooks():
+            return []
+        # XXX Not blackbox.
+        original_hooks = machinery.PathFinder._implicit_hooks
+        machinery.PathFinder._implicit_hooks = staticmethod(mock_implicit_hooks)
+        try:
+            with util.import_state():
+                self.assert_(machinery.PathFinder.find_module('XXX') is None)
+        finally:
+            machinery.PathFinder._implicit_hooks = original_hooks
+
+    def test_sys_path(self):
+        # Test that sys.path is used when 'path' is None.
+        # Implicitly tests that sys.path_importer_cache is used.
+        module = '<test module>'
+        path = '<test path>'
+        importer = util.mock_modules(module)
+        with util.import_state(path_importer_cache={path: importer},
+                               path=[path]):
+            loader = machinery.PathFinder.find_module(module)
+            self.assert_(loader is importer)
+
+    def test_path(self):
+        # Test that 'path' is used when set.
+        # Implicitly tests that sys.path_importer_cache is used.
+        module = '<test module>'
+        path = '<test path>'
+        importer = util.mock_modules(module)
+        with util.import_state(path_importer_cache={path: importer}):
+            loader = machinery.PathFinder.find_module(module, [path])
+            self.assert_(loader is importer)
+
+    def test_path_importer_cache_has_None(self):
+        # Test that the default hook is used when sys.path_importer_cache
+        # contains None for a path.
+        # TODO(brett.cannon) implement
+        pass
+
+    def test_path_hooks(self):
+        # Test that sys.path_hooks is used.
+        # TODO(brett.cannon) implement
+        pass
+
+    def test_implicit_hooks(self):
+        # Test that the implicit path hooks are used.
+        # TODO(brett.cannon) implement
+        pass
+
+
 def test_main():
     from test.support import run_unittest
-    run_unittest(PathTests, __path__Tests)
+    run_unittest(PathTests, __path__Tests, FinderTests)
 
 if __name__ == '__main__':
     test_main()
