diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java
index 51b829c..2b8f8c2 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java
@@ -79,23 +79,6 @@
     }
 
     @Test
-    public void testFileCacheEmptyAfterVFSClose() throws FileSystemException {
-        final FileSystemManager manager = VFS.getManager();
-        Assert.assertNotNull(manager);
-        try (final FileObject fileObject = manager
-            .resolveFile(Paths.get("src/test/resources/test-data/read-tests/file1.txt").toUri())) {
-            Assert.assertTrue(fileObject.exists());
-            final FilesCache filesCache = manager.getFilesCache();
-            final FileName name = fileObject.getName();
-            // Make sure we have file object in the cache.
-            Assert.assertNotNull(filesCache.getFile(fileObject.getFileSystem(), name));
-            VFS.close();
-            // Cache MUST now be empty.
-            Assert.assertNull(filesCache.getFile(fileObject.getFileSystem(), name));
-        }
-    }
-
-    @Test
     public void testFileCacheEmptyAfterManagerClose() throws FileSystemException {
         final FileSystemManager manager = VFS.getManager();
         Assert.assertNotNull(manager);
@@ -115,6 +98,23 @@
         }
     }
 
+    @Test
+    public void testFileCacheEmptyAfterVFSClose() throws FileSystemException {
+        final FileSystemManager manager = VFS.getManager();
+        Assert.assertNotNull(manager);
+        try (final FileObject fileObject = manager
+            .resolveFile(Paths.get("src/test/resources/test-data/read-tests/file1.txt").toUri())) {
+            Assert.assertTrue(fileObject.exists());
+            final FilesCache filesCache = manager.getFilesCache();
+            final FileName name = fileObject.getName();
+            // Make sure we have file object in the cache.
+            Assert.assertNotNull(filesCache.getFile(fileObject.getFileSystem(), name));
+            VFS.close();
+            // Cache MUST now be empty.
+            Assert.assertNull(filesCache.getFile(fileObject.getFileSystem(), name));
+        }
+    }
+
     /**
      * Even if the file name is absolute, the base file must be given. This is an inconsistency in the API, but it is
      * documented as such.
