diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py
index 1accd7e..e833b16 100644
--- a/Lib/test/test_import.py
+++ b/Lib/test/test_import.py
@@ -704,36 +704,34 @@
 
 class TestSymbolicallyLinkedPackage(unittest.TestCase):
     package_name = 'sample'
+    tagged = package_name + '-tagged'
 
     def setUp(self):
-        if os.path.exists(self.tagged):
-            shutil.rmtree(self.tagged)
-        if os.path.exists(self.package_name):
-            os.remove(self.package_name)
+        test.support.rmtree(self.tagged)
+        test.support.rmtree(self.package_name)
         self.orig_sys_path = sys.path[:]
 
         # create a sample package; imagine you have a package with a tag and
         #  you want to symbolically link it from its untagged name.
         os.mkdir(self.tagged)
+        self.addCleanup(test.support.rmtree, self.tagged)
         init_file = os.path.join(self.tagged, '__init__.py')
-        open(init_file, 'w').close()
-        self.assertEqual(os.path.exists(init_file), True)
+        test.support.create_empty_file(init_file)
+        assert os.path.exists(init_file)
 
         # now create a symlink to the tagged package
         # sample -> sample-tagged
         os.symlink(self.tagged, self.package_name)
+        self.addCleanup(test.support.unlink, self.package_name)
+        importlib.invalidate_caches()
 
         # disabled because os.isdir currently fails (see issue 15093)
         # self.assertEqual(os.path.isdir(self.package_name), True)
 
-        self.assertEqual(
-            os.path.isfile(os.path.join(self.package_name, '__init__.py')),
-            True,
-        )
+        assert os.path.isfile(os.path.join(self.package_name, '__init__.py'))
 
-    @property
-    def tagged(self):
-        return self.package_name + '-tagged'
+    def tearDown(self):
+        sys.path[:] = self.orig_sys_path
 
     # regression test for issue6727
     @unittest.skipUnless(
@@ -741,24 +739,14 @@
         or sys.getwindowsversion() >= (6, 0),
         "Windows Vista or later required")
     @test.support.skip_unless_symlink
-    @unittest.skipUnless(
-        sys.platform == 'win32',
-        "Test failing on Unix (see issue15091)"
-        )
     def test_symlinked_dir_importable(self):
         # make sure sample can only be imported from the current directory.
         sys.path[:] = ['.']
+        assert os.path.exists(self.package_name)
+        assert os.path.exists(os.path.join(self.package_name, '__init__.py'))
 
-        # and try to import the package
-        __import__(self.package_name)
-
-    def tearDown(self):
-        # now cleanup
-        if os.path.exists(self.package_name):
-            os.remove(self.package_name)
-        if os.path.exists(self.tagged):
-            shutil.rmtree(self.tagged)
-        sys.path[:] = self.orig_sys_path
+        # Try to import the package
+        importlib.import_module(self.package_name)
 
 
 @cpython_only
