You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2023/02/22 12:21:33 UTC

[shardingsphere] branch master updated: Remove ProxyContextRestorer in backend-mysql module (#24305)

This is an automated email from the ASF dual-hosted git repository.

panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 44f21086486 Remove ProxyContextRestorer in backend-mysql module (#24305)
44f21086486 is described below

commit 44f21086486ed1d5669c8b05d02304ec45fc3058
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Wed Feb 22 20:21:24 2023 +0800

    Remove ProxyContextRestorer in backend-mysql module (#24305)
    
    * Remove ProxyContextRestorer in MySQLAdminExecutorCreatorTest
    
    * Remove ProxyContextRestorer in MySQLSetVariableAdminExecutorTest
    
    * Remove ProxyContextRestorer in ShowCreateDatabaseExecutorTest
    
    * Remove ProxyContextRestorer in MySQLStatementMemoryStrictlyFetchSizeSetterTest
    
    * Remove ProxyContextRestorer in ShowProcedureStatusExecutorTest
    
    * Remove ProxyContextRestorer in SelectInformationSchemataExecutorTest
    
    * Remove ProxyContextRestorer in ShowCurrentUserExecutorTest
    
    * Remove ProxyContextRestorer in ShowDatabasesExecutorTest
    
    * Remove ProxyContextRestorer in ShowTablesExecutorTest
    
    * Remove ProxyContextRestorer in UseDatabaseExecutorTest
    
    * Remove ProxyContextRestorer in ShowProcessListExecutorTest
    
    * Remove ProxyContextRestorer
    
    * Remove ProxyContextRestorer
---
 ...StatementMemoryStrictlyFetchSizeSetterTest.java |  28 +--
 .../executor/MySQLAdminExecutorCreatorTest.java    |   3 +-
 .../MySQLSetVariableAdminExecutorTest.java         |   3 +-
 .../executor/ShowCreateDatabaseExecutorTest.java   |  48 +++---
 .../executor/ShowCurrentUserExecutorTest.java      |  39 +++--
 .../admin/executor/ShowDatabasesExecutorTest.java  | 160 ++++++++++-------
 .../executor/ShowFunctionStatusExecutorTest.java   |  33 ++--
 .../executor/ShowProcedureStatusExecutorTest.java  |  33 ++--
 .../executor/ShowProcessListExecutorTest.java      |  49 +++---
 .../admin/executor/ShowTablesExecutorTest.java     | 190 ++++++++++++---------
 .../admin/executor/UseDatabaseExecutorTest.java    |  63 +++----
 .../SelectInformationSchemataExecutorTest.java     |  92 ++++++----
 .../proxy/backend/util/ProxyContextRestorer.java   |  38 -----
 13 files changed, 418 insertions(+), 361 deletions(-)

diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/connector/jdbc/statement/MySQLStatementMemoryStrictlyFetchSizeSetterTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/connector/jdbc/statement/MySQLStatementMemoryStrictlyFetchSizeSetterTest.java
index 24022a401b3..04f0ead1786 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/connector/jdbc/statement/MySQLStatementMemoryStrictlyFetchSizeSetterTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/connector/jdbc/statement/MySQLStatementMemoryStrictlyFetchSizeSetterTest.java
@@ -20,32 +20,34 @@ package org.apache.shardingsphere.proxy.backend.mysql.connector.jdbc.statement;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
-import org.junit.Before;
 import org.junit.Test;
+import org.mockito.MockedStatic;
 
 import java.sql.SQLException;
 import java.sql.Statement;
 
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-public final class MySQLStatementMemoryStrictlyFetchSizeSetterTest extends ProxyContextRestorer {
-    
-    @Before
-    public void setUp() {
-        ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        when(contextManager.getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.PROXY_BACKEND_QUERY_FETCH_SIZE)).thenReturn(-1);
-        ProxyContext.init(contextManager);
-    }
+public final class MySQLStatementMemoryStrictlyFetchSizeSetterTest {
     
     @Test
     public void assertSetFetchSize() throws SQLException {
-        when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.PROXY_BACKEND_QUERY_FETCH_SIZE)).thenReturn(-1);
         Statement statement = mock(Statement.class);
-        new MySQLStatementMemoryStrictlyFetchSizeSetter().setFetchSize(statement);
-        verify(statement).setFetchSize(Integer.MIN_VALUE);
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            new MySQLStatementMemoryStrictlyFetchSizeSetter().setFetchSize(statement);
+            verify(statement).setFetchSize(Integer.MIN_VALUE);
+        }
+    }
+    
+    private static ContextManager mockContextManager() {
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        when(result.getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.PROXY_BACKEND_QUERY_FETCH_SIZE)).thenReturn(-1);
+        return result;
     }
 }
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLAdminExecutorCreatorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLAdminExecutorCreatorTest.java
index 44d788f10c5..52e75430a87 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLAdminExecutorCreatorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLAdminExecutorCreatorTest.java
@@ -33,7 +33,6 @@ import org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAd
 import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.MySQLAdminExecutorCreator;
 import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.MySQLSetVariableAdminExecutor;
 import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.information.SelectInformationSchemataExecutor;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionsSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
@@ -72,7 +71,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class MySQLAdminExecutorCreatorTest extends ProxyContextRestorer {
+public final class MySQLAdminExecutorCreatorTest {
     
     @SuppressWarnings("rawtypes")
     @Mock
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutorTest.java
index 59c9176d9f9..2ec045e7886 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutorTest.java
@@ -27,7 +27,6 @@ import org.apache.shardingsphere.proxy.backend.connector.DatabaseConnector;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.MySQLSetVariableAdminExecutor;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.VariableAssignSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.VariableSegment;
@@ -45,7 +44,7 @@ import static org.mockito.Mockito.mockConstruction;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-public final class MySQLSetVariableAdminExecutorTest extends ProxyContextRestorer {
+public final class MySQLSetVariableAdminExecutorTest {
     
     @Test
     public void assertExecute() throws SQLException {
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCreateDatabaseExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCreateDatabaseExecutorTest.java
index 2a3c2aaea66..b5d06b5cffb 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCreateDatabaseExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCreateDatabaseExecutorTest.java
@@ -28,10 +28,9 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowCreateDatabaseStatement;
-import org.junit.Before;
 import org.junit.Test;
+import org.mockito.MockedStatic;
 
 import java.sql.SQLException;
 import java.util.HashMap;
@@ -42,20 +41,39 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.when;
 
-public final class ShowCreateDatabaseExecutorTest extends ProxyContextRestorer {
+public final class ShowCreateDatabaseExecutorTest {
     
     private static final String DATABASE_PATTERN = "db_%s";
     
-    @Before
-    public void setUp() {
+    @Test
+    public void assertExecute() throws SQLException {
+        MySQLShowCreateDatabaseStatement statement = new MySQLShowCreateDatabaseStatement();
+        statement.setDatabaseName("db_0");
+        ShowCreateDatabaseExecutor executor = new ShowCreateDatabaseExecutor(statement);
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().databaseExists("db_0")).thenReturn(true);
+            executor.execute(mockConnectionSession());
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+            int count = 0;
+            while (executor.getMergedResult().next()) {
+                assertThat(executor.getMergedResult().getValue(1, Object.class), is(String.format(DATABASE_PATTERN, count)));
+                count++;
+            }
+        }
+    }
+    
+    private ContextManager mockContextManager() {
         Map<String, ShardingSphereDatabase> databases = getDatabases();
         MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
                 new ShardingSphereMetaData(databases, mock(ShardingSphereRuleMetaData.class), new ConfigurationProperties(new Properties())));
-        ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
-        ProxyContext.init(contextManager);
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+        return result;
     }
     
     private Map<String, ShardingSphereDatabase> getDatabases() {
@@ -68,20 +86,6 @@ public final class ShowCreateDatabaseExecutorTest extends ProxyContextRestorer {
         return result;
     }
     
-    @Test
-    public void assertExecute() throws SQLException {
-        MySQLShowCreateDatabaseStatement statement = new MySQLShowCreateDatabaseStatement();
-        statement.setDatabaseName("db_0");
-        ShowCreateDatabaseExecutor showCreateDatabaseExecutor = new ShowCreateDatabaseExecutor(statement);
-        showCreateDatabaseExecutor.execute(mockConnectionSession());
-        assertThat(showCreateDatabaseExecutor.getQueryResultMetaData().getColumnCount(), is(2));
-        int count = 0;
-        while (showCreateDatabaseExecutor.getMergedResult().next()) {
-            assertThat(showCreateDatabaseExecutor.getMergedResult().getValue(1, Object.class), is(String.format(DATABASE_PATTERN, count)));
-            count++;
-        }
-    }
-    
     private ConnectionSession mockConnectionSession() {
         ConnectionSession result = mock(ConnectionSession.class);
         when(result.getGrantee()).thenReturn(new Grantee("root", ""));
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java
index 543f38109a0..01697eedb82 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java
@@ -28,9 +28,8 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
-import org.junit.Before;
 import org.junit.Test;
+import org.mockito.MockedStatic;
 
 import java.sql.SQLException;
 import java.util.Collections;
@@ -42,19 +41,33 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.when;
 
-public final class ShowCurrentUserExecutorTest extends ProxyContextRestorer {
+public final class ShowCurrentUserExecutorTest {
     
     private static final Grantee GRANTEE = new Grantee("root", "");
     
-    @Before
-    public void setUp() {
-        ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+    @Test
+    public void assertExecute() throws SQLException {
+        ShowCurrentUserExecutor executor = new ShowCurrentUserExecutor();
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            executor.execute(mockConnectionSession());
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
+            while (executor.getMergedResult().next()) {
+                assertThat(executor.getMergedResult().getValue(1, Object.class), is("root@%"));
+            }
+        }
+    }
+    
+    private ContextManager mockContextManager() {
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
                 new ShardingSphereMetaData(new HashMap<>(), mockShardingSphereRuleMetaData(), new ConfigurationProperties(new Properties())));
-        when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
-        ProxyContext.init(contextManager);
+        when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+        return result;
     }
     
     private ShardingSphereRuleMetaData mockShardingSphereRuleMetaData() {
@@ -65,16 +78,6 @@ public final class ShowCurrentUserExecutorTest extends ProxyContextRestorer {
         return new ShardingSphereRuleMetaData(Collections.singletonList(authorityRule));
     }
     
-    @Test
-    public void assertExecute() throws SQLException {
-        ShowCurrentUserExecutor executor = new ShowCurrentUserExecutor();
-        executor.execute(mockConnectionSession());
-        assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
-        while (executor.getMergedResult().next()) {
-            assertThat(executor.getMergedResult().getValue(1, Object.class), is("root@%"));
-        }
-    }
-    
     private ConnectionSession mockConnectionSession() {
         ConnectionSession result = mock(ConnectionSession.class);
         when(result.getGrantee()).thenReturn(GRANTEE);
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java
index d1b1095cd96..71d1b2c13c5 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java
@@ -30,12 +30,11 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowFilterSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowLikeSegment;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowDatabasesStatement;
-import org.junit.Before;
 import org.junit.Test;
+import org.mockito.MockedStatic;
 
 import java.sql.SQLException;
 import java.util.Collection;
@@ -45,53 +44,33 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.when;
 
-public final class ShowDatabasesExecutorTest extends ProxyContextRestorer {
+public final class ShowDatabasesExecutorTest {
     
     private static final String DATABASE_PATTERN = "database_%s";
     
-    private ShowDatabasesExecutor showDatabasesExecutor;
-    
-    @Before
-    public void setUp() {
-        showDatabasesExecutor = new ShowDatabasesExecutor(new MySQLShowDatabasesStatement());
-        ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        ShardingSphereRuleMetaData globalRuleMetaData = new ShardingSphereRuleMetaData(Collections.singleton(mockAuthorityRule()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(
-                mock(MetaDataPersistService.class), new ShardingSphereMetaData(getDatabases(), globalRuleMetaData, new ConfigurationProperties(new Properties())));
-        when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
-        ProxyContext.init(contextManager);
-    }
-    
-    private AuthorityRule mockAuthorityRule() {
-        AuthorityRule result = mock(AuthorityRule.class);
-        when(result.findPrivileges(new Grantee("root", ""))).thenReturn(Optional.of(new AllPrivilegesPermittedShardingSpherePrivileges()));
-        return result;
-    }
-    
-    private Map<String, ShardingSphereDatabase> getDatabases() {
-        Map<String, ShardingSphereDatabase> result = new LinkedHashMap<>(10, 1);
-        for (int i = 0; i < 10; i++) {
-            ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
-            when(database.getProtocolType()).thenReturn(new MySQLDatabaseType());
-            when(database.getRuleMetaData().getRules()).thenReturn(Collections.emptyList());
-            when(database.getName()).thenReturn(String.format(DATABASE_PATTERN, i));
-            result.put(String.format(DATABASE_PATTERN, i), database);
-        }
-        return result;
-    }
+    private ShowDatabasesExecutor executor = new ShowDatabasesExecutor(new MySQLShowDatabasesStatement());
     
     @Test
     public void assertExecute() throws SQLException {
-        showDatabasesExecutor.execute(mockConnectionSession());
-        assertThat(showDatabasesExecutor.getQueryResultMetaData().getColumnCount(), is(1));
-        assertThat(getActual(), is(getExpected()));
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames())
+                    .thenReturn(IntStream.range(0, 10).mapToObj(each -> String.format("database_%s", each)).collect(Collectors.toList()));
+            executor.execute(mockConnectionSession());
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
+            assertThat(getActual(), is(getExpected()));
+        }
     }
     
     @Test
@@ -101,15 +80,21 @@ public final class ShowDatabasesExecutorTest extends ProxyContextRestorer {
         ShowLikeSegment showLikeSegment = new ShowLikeSegment(0, 0, "database%");
         showFilterSegment.setLike(showLikeSegment);
         showDatabasesStatement.setFilter(showFilterSegment);
-        showDatabasesExecutor = new ShowDatabasesExecutor(showDatabasesStatement);
-        showDatabasesExecutor.execute(mockConnectionSession());
-        assertThat(getActual(), is(getExpected()));
+        ContextManager contextManager = mockContextManager();
+        executor = new ShowDatabasesExecutor(showDatabasesStatement);
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames())
+                    .thenReturn(IntStream.range(0, 10).mapToObj(each -> String.format("database_%s", each)).collect(Collectors.toList()));
+            executor.execute(mockConnectionSession());
+            assertThat(getActual(), is(getExpected()));
+        }
     }
     
     private Collection<String> getActual() throws SQLException {
         Map<String, String> result = new ConcurrentHashMap<>(10, 1);
-        while (showDatabasesExecutor.getMergedResult().next()) {
-            String value = showDatabasesExecutor.getMergedResult().getValue(1, Object.class).toString();
+        while (executor.getMergedResult().next()) {
+            String value = executor.getMergedResult().getValue(1, Object.class).toString();
             result.put(value, value);
         }
         return result.keySet();
@@ -131,15 +116,21 @@ public final class ShowDatabasesExecutorTest extends ProxyContextRestorer {
         ShowLikeSegment showLikeSegment = new ShowLikeSegment(0, 0, "%_1");
         showFilterSegment.setLike(showLikeSegment);
         showDatabasesStatement.setFilter(showFilterSegment);
-        showDatabasesExecutor = new ShowDatabasesExecutor(showDatabasesStatement);
-        showDatabasesExecutor.execute(mockConnectionSession());
-        assertThat(showDatabasesExecutor.getQueryResultMetaData().getColumnCount(), is(1));
-        int count = 0;
-        while (showDatabasesExecutor.getMergedResult().next()) {
-            assertThat(showDatabasesExecutor.getMergedResult().getValue(1, Object.class), is("database_1"));
-            count++;
+        executor = new ShowDatabasesExecutor(showDatabasesStatement);
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames())
+                    .thenReturn(IntStream.range(0, 10).mapToObj(each -> String.format("database_%s", each)).collect(Collectors.toList()));
+            executor.execute(mockConnectionSession());
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
+            int count = 0;
+            while (executor.getMergedResult().next()) {
+                assertThat(executor.getMergedResult().getValue(1, Object.class), is("database_1"));
+                count++;
+            }
+            assertThat(count, is(1));
         }
-        assertThat(count, is(1));
     }
     
     @Test
@@ -149,15 +140,21 @@ public final class ShowDatabasesExecutorTest extends ProxyContextRestorer {
         ShowLikeSegment showLikeSegment = new ShowLikeSegment(0, 0, "database_9");
         showFilterSegment.setLike(showLikeSegment);
         showDatabasesStatement.setFilter(showFilterSegment);
-        showDatabasesExecutor = new ShowDatabasesExecutor(showDatabasesStatement);
-        showDatabasesExecutor.execute(mockConnectionSession());
-        assertThat(showDatabasesExecutor.getQueryResultMetaData().getColumnCount(), is(1));
-        int count = 0;
-        while (showDatabasesExecutor.getMergedResult().next()) {
-            assertThat(showDatabasesExecutor.getMergedResult().getValue(1, Object.class), is("database_9"));
-            count++;
+        executor = new ShowDatabasesExecutor(showDatabasesStatement);
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames())
+                    .thenReturn(IntStream.range(0, 10).mapToObj(each -> String.format("database_%s", each)).collect(Collectors.toList()));
+            executor.execute(mockConnectionSession());
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
+            int count = 0;
+            while (executor.getMergedResult().next()) {
+                assertThat(executor.getMergedResult().getValue(1, Object.class), is("database_9"));
+                count++;
+            }
+            assertThat(count, is(1));
         }
-        assertThat(count, is(1));
     }
     
     @Test
@@ -167,15 +164,48 @@ public final class ShowDatabasesExecutorTest extends ProxyContextRestorer {
         ShowLikeSegment showLikeSegment = new ShowLikeSegment(0, 0, "not_exist_database");
         showFilterSegment.setLike(showLikeSegment);
         showDatabasesStatement.setFilter(showFilterSegment);
-        showDatabasesExecutor = new ShowDatabasesExecutor(showDatabasesStatement);
-        showDatabasesExecutor.execute(mockConnectionSession());
-        assertThat(showDatabasesExecutor.getQueryResultMetaData().getColumnCount(), is(1));
-        int count = 0;
-        while (showDatabasesExecutor.getMergedResult().next()) {
-            assertThat(showDatabasesExecutor.getMergedResult().getValue(1, Object.class), is("not_exist_database"));
-            count++;
+        executor = new ShowDatabasesExecutor(showDatabasesStatement);
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames())
+                    .thenReturn(IntStream.range(0, 10).mapToObj(each -> String.format("database_%s", each)).collect(Collectors.toList()));
+            executor.execute(mockConnectionSession());
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
+            int count = 0;
+            while (executor.getMergedResult().next()) {
+                assertThat(executor.getMergedResult().getValue(1, Object.class), is("not_exist_database"));
+                count++;
+            }
+            assertThat(count, is(0));
         }
-        assertThat(count, is(0));
+    }
+    
+    private ContextManager mockContextManager() {
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereRuleMetaData globalRuleMetaData = new ShardingSphereRuleMetaData(Collections.singleton(mockAuthorityRule()));
+        MetaDataContexts metaDataContexts = new MetaDataContexts(
+                mock(MetaDataPersistService.class), new ShardingSphereMetaData(getDatabases(), globalRuleMetaData, new ConfigurationProperties(new Properties())));
+        when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+        return result;
+    }
+    
+    private AuthorityRule mockAuthorityRule() {
+        AuthorityRule result = mock(AuthorityRule.class);
+        when(result.findPrivileges(new Grantee("root", ""))).thenReturn(Optional.of(new AllPrivilegesPermittedShardingSpherePrivileges()));
+        return result;
+    }
+    
+    private Map<String, ShardingSphereDatabase> getDatabases() {
+        Map<String, ShardingSphereDatabase> result = new LinkedHashMap<>(10, 1);
+        for (int i = 0; i < 10; i++) {
+            ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
+            when(database.getProtocolType()).thenReturn(new MySQLDatabaseType());
+            when(database.getRuleMetaData().getRules()).thenReturn(Collections.emptyList());
+            when(database.getName()).thenReturn(String.format(DATABASE_PATTERN, i));
+            result.put(String.format(DATABASE_PATTERN, i), database);
+        }
+        return result;
     }
     
     private ConnectionSession mockConnectionSession() {
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowFunctionStatusExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowFunctionStatusExecutorTest.java
index 3c19a4d32c8..e59df62616f 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowFunctionStatusExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowFunctionStatusExecutorTest.java
@@ -28,10 +28,9 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowFunctionStatusStatement;
-import org.junit.Before;
 import org.junit.Test;
+import org.mockito.MockedStatic;
 
 import java.sql.SQLException;
 import java.util.HashMap;
@@ -42,23 +41,31 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.when;
 
-public final class ShowFunctionStatusExecutorTest extends ProxyContextRestorer {
+public final class ShowFunctionStatusExecutorTest {
     
     private static final String DATABASE_PATTERN = "db_%s";
     
-    private ShowFunctionStatusExecutor showFunctionStatusExecutor;
+    @Test
+    public void assertExecute() throws SQLException {
+        ShowFunctionStatusExecutor executor = new ShowFunctionStatusExecutor(new MySQLShowFunctionStatusStatement());
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            executor.execute(mockConnectionSession());
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(11));
+        }
+    }
     
-    @Before
-    public void setUp() {
-        showFunctionStatusExecutor = new ShowFunctionStatusExecutor(new MySQLShowFunctionStatusStatement());
+    private ContextManager mockContextManager() {
         Map<String, ShardingSphereDatabase> databases = getDatabases();
         MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
                 new ShardingSphereMetaData(databases, mock(ShardingSphereRuleMetaData.class), new ConfigurationProperties(new Properties())));
-        ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
-        ProxyContext.init(contextManager);
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+        return result;
     }
     
     private Map<String, ShardingSphereDatabase> getDatabases() {
@@ -72,12 +79,6 @@ public final class ShowFunctionStatusExecutorTest extends ProxyContextRestorer {
         return result;
     }
     
-    @Test
-    public void assertExecute() throws SQLException {
-        showFunctionStatusExecutor.execute(mockConnectionSession());
-        assertThat(showFunctionStatusExecutor.getQueryResultMetaData().getColumnCount(), is(11));
-    }
-    
     private ConnectionSession mockConnectionSession() {
         ConnectionSession result = mock(ConnectionSession.class);
         when(result.getGrantee()).thenReturn(new Grantee("root", ""));
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcedureStatusExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcedureStatusExecutorTest.java
index 9976c69faab..e04c912ac8d 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcedureStatusExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcedureStatusExecutorTest.java
@@ -28,10 +28,9 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowProcedureStatusStatement;
-import org.junit.Before;
 import org.junit.Test;
+import org.mockito.MockedStatic;
 
 import java.sql.SQLException;
 import java.util.HashMap;
@@ -42,20 +41,31 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.when;
 
-public final class ShowProcedureStatusExecutorTest extends ProxyContextRestorer {
+public final class ShowProcedureStatusExecutorTest {
     
     private static final String DATABASE_PATTERN = "db_%s";
     
-    @Before
-    public void setUp() {
+    @Test
+    public void assertExecute() throws SQLException {
+        ShowProcedureStatusExecutor executor = new ShowProcedureStatusExecutor(new MySQLShowProcedureStatusStatement());
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            executor.execute(mockConnectionSession());
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(11));
+        }
+    }
+    
+    private ContextManager mockContextManager() {
         Map<String, ShardingSphereDatabase> databases = getDatabases();
         MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
                 new ShardingSphereMetaData(databases, mock(ShardingSphereRuleMetaData.class), new ConfigurationProperties(new Properties())));
-        ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
-        ProxyContext.init(contextManager);
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+        return result;
     }
     
     private Map<String, ShardingSphereDatabase> getDatabases() {
@@ -69,13 +79,6 @@ public final class ShowProcedureStatusExecutorTest extends ProxyContextRestorer
         return result;
     }
     
-    @Test
-    public void assertExecute() throws SQLException {
-        ShowProcedureStatusExecutor executor = new ShowProcedureStatusExecutor(new MySQLShowProcedureStatusStatement());
-        executor.execute(mockConnectionSession());
-        assertThat(executor.getQueryResultMetaData().getColumnCount(), is(11));
-    }
-    
     private ConnectionSession mockConnectionSession() {
         ConnectionSession result = mock(ConnectionSession.class);
         when(result.getGrantee()).thenReturn(new Grantee("root", ""));
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java
index 4c403b8d72a..79b92143a47 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java
@@ -23,10 +23,9 @@ import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import org.apache.shardingsphere.transaction.api.TransactionType;
-import org.junit.Before;
 import org.junit.Test;
+import org.mockito.MockedStatic;
 import org.mockito.internal.configuration.plugins.Plugins;
 
 import java.sql.SQLException;
@@ -36,19 +35,32 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 
-public final class ShowProcessListExecutorTest extends ProxyContextRestorer {
+public final class ShowProcessListExecutorTest {
     
-    private ShowProcessListExecutor showProcessListExecutor;
-    
-    @Before
-    public void setUp() throws ReflectiveOperationException {
-        ProxyContext.init(mock(ContextManager.class, RETURNS_DEEP_STUBS));
-        showProcessListExecutor = new ShowProcessListExecutor();
-        setupBatchProcessContexts();
+    @Test
+    public void assertExecute() throws SQLException, ReflectiveOperationException {
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            ShowProcessListExecutor showProcessListExecutor = new ShowProcessListExecutor();
+            setupBatchProcessContexts(showProcessListExecutor);
+            showProcessListExecutor.execute(new ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, new DefaultAttributeMap()));
+            assertThat(showProcessListExecutor.getQueryResultMetaData().getColumnCount(), is(8));
+            MergedResult mergedResult = showProcessListExecutor.getMergedResult();
+            while (mergedResult.next()) {
+                assertThat(mergedResult.getValue(1, String.class), is("f6c2336a-63ba-41bf-941e-2e3504eb2c80"));
+                assertThat(mergedResult.getValue(2, String.class), is("sharding"));
+                assertThat(mergedResult.getValue(3, String.class), is("127.0.0.1"));
+                assertThat(mergedResult.getValue(4, String.class), is("sharding_db"));
+                assertThat(mergedResult.getValue(7, String.class), is("Executing 1/2"));
+                assertThat(mergedResult.getValue(8, String.class), is("alter table t_order add column a varchar(64) after order_id"));
+            }
+        }
     }
     
-    private void setupBatchProcessContexts() throws ReflectiveOperationException {
+    private void setupBatchProcessContexts(final ShowProcessListExecutor showProcessListExecutor) throws ReflectiveOperationException {
         String executionNodeValue = "contexts:\n"
                 + "- executionID: f6c2336a-63ba-41bf-941e-2e3504eb2c80\n"
                 + "  sql: alter table t_order add column a varchar(64) after order_id\n"
@@ -63,19 +75,4 @@ public final class ShowProcessListExecutorTest extends ProxyContextRestorer {
                 + "    unitID: unitID2\n";
         Plugins.getMemberAccessor().set(showProcessListExecutor.getClass().getDeclaredField("batchProcessContexts"), showProcessListExecutor, Collections.singleton(executionNodeValue));
     }
-    
-    @Test
-    public void assertExecute() throws SQLException {
-        showProcessListExecutor.execute(new ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, new DefaultAttributeMap()));
-        assertThat(showProcessListExecutor.getQueryResultMetaData().getColumnCount(), is(8));
-        MergedResult mergedResult = showProcessListExecutor.getMergedResult();
-        while (mergedResult.next()) {
-            assertThat(mergedResult.getValue(1, String.class), is("f6c2336a-63ba-41bf-941e-2e3504eb2c80"));
-            assertThat(mergedResult.getValue(2, String.class), is("sharding"));
-            assertThat(mergedResult.getValue(3, String.class), is("127.0.0.1"));
-            assertThat(mergedResult.getValue(4, String.class), is("sharding_db"));
-            assertThat(mergedResult.getValue(7, String.class), is("Executing 1/2"));
-            assertThat(mergedResult.getValue(8, String.class), is("alter table t_order add column a varchar(64) after order_id"));
-        }
-    }
 }
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
index 6318e7104be..9990c135ecf 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
@@ -33,15 +33,14 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.FromSchemaSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowFilterSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowLikeSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DatabaseSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowTablesStatement;
-import org.junit.Before;
 import org.junit.Test;
+import org.mockito.MockedStatic;
 
 import java.sql.SQLException;
 import java.util.Collections;
@@ -55,55 +54,33 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertFalse;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.when;
 
-public final class ShowTablesExecutorTest extends ProxyContextRestorer {
+public final class ShowTablesExecutorTest {
     
     private static final String DATABASE_PATTERN = "db_%s";
     
-    @Before
-    public void setUp() {
-        Map<String, ShardingSphereDatabase> databases = getDatabases();
-        MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
-                new ShardingSphereMetaData(databases, mock(ShardingSphereRuleMetaData.class), new ConfigurationProperties(new Properties())));
-        ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
-        ProxyContext.init(contextManager);
-    }
-    
-    private Map<String, ShardingSphereDatabase> getDatabases() {
-        Map<String, ShardingSphereTable> tables = new HashMap<>(4, 1);
-        tables.put("t_account", new ShardingSphereTable("t_account", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
-        tables.put("t_account_bak", new ShardingSphereTable("t_account_bak", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
-        tables.put("t_account_detail", new ShardingSphereTable("t_account_detail", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
-        tables.put("t_test", new ShardingSphereTable("T_TEST", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
-        ShardingSphereSchema schema = new ShardingSphereSchema(tables, Collections.emptyMap());
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
-        when(database.getSchema(String.format(DATABASE_PATTERN, 0))).thenReturn(schema);
-        when(database.isComplete()).thenReturn(true);
-        when(database.getProtocolType()).thenReturn(new MySQLDatabaseType());
-        Map<String, ShardingSphereDatabase> result = new HashMap<>(2, 1);
-        result.put(String.format(DATABASE_PATTERN, 0), database);
-        ShardingSphereDatabase uncompletedDatabase = mock(ShardingSphereDatabase.class);
-        when(uncompletedDatabase.isComplete()).thenReturn(false);
-        result.put("uncompleted", uncompletedDatabase);
-        return result;
-    }
-    
     @Test
     public void assertShowTablesExecutorWithoutFilter() throws SQLException {
-        ShowTablesExecutor showTablesExecutor = new ShowTablesExecutor(new MySQLShowTablesStatement(), DatabaseTypeEngine.getDatabaseType("MySQL"));
-        showTablesExecutor.execute(mockConnectionSession());
-        assertThat(showTablesExecutor.getQueryResultMetaData().getColumnCount(), is(2));
-        showTablesExecutor.getMergedResult().next();
-        assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
-        showTablesExecutor.getMergedResult().next();
-        assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("t_account"));
-        showTablesExecutor.getMergedResult().next();
-        assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("t_account_bak"));
-        showTablesExecutor.getMergedResult().next();
-        assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("t_account_detail"));
-        assertFalse(showTablesExecutor.getMergedResult().next());
+        ShowTablesExecutor executor = new ShowTablesExecutor(new MySQLShowTablesStatement(), DatabaseTypeEngine.getDatabaseType("MySQL"));
+        Map<String, ShardingSphereDatabase> databases = getDatabases();
+        ContextManager contextManager = mockContextManager(databases);
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
+            executor.execute(mockConnectionSession());
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+            executor.getMergedResult().next();
+            assertThat(executor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
+            executor.getMergedResult().next();
+            assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account"));
+            executor.getMergedResult().next();
+            assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account_bak"));
+            executor.getMergedResult().next();
+            assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account_detail"));
+            assertFalse(executor.getMergedResult().next());
+        }
     }
     
     @Test
@@ -112,16 +89,22 @@ public final class ShowTablesExecutorTest extends ProxyContextRestorer {
         ShowFilterSegment showFilterSegment = mock(ShowFilterSegment.class);
         when(showFilterSegment.getLike()).thenReturn(Optional.of(new ShowLikeSegment(0, 10, "t_account%")));
         showTablesStatement.setFilter(showFilterSegment);
-        ShowTablesExecutor showTablesExecutor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
-        showTablesExecutor.execute(mockConnectionSession());
-        assertThat(showTablesExecutor.getQueryResultMetaData().getColumnCount(), is(2));
-        showTablesExecutor.getMergedResult().next();
-        assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("t_account"));
-        showTablesExecutor.getMergedResult().next();
-        assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("t_account_bak"));
-        showTablesExecutor.getMergedResult().next();
-        assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("t_account_detail"));
-        assertFalse(showTablesExecutor.getMergedResult().next());
+        ShowTablesExecutor executor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
+        Map<String, ShardingSphereDatabase> databases = getDatabases();
+        ContextManager contextManager = mockContextManager(databases);
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
+            executor.execute(mockConnectionSession());
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+            executor.getMergedResult().next();
+            assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account"));
+            executor.getMergedResult().next();
+            assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account_bak"));
+            executor.getMergedResult().next();
+            assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account_detail"));
+            assertFalse(executor.getMergedResult().next());
+        }
     }
     
     @Test
@@ -130,12 +113,18 @@ public final class ShowTablesExecutorTest extends ProxyContextRestorer {
         ShowFilterSegment showFilterSegment = mock(ShowFilterSegment.class);
         when(showFilterSegment.getLike()).thenReturn(Optional.of(new ShowLikeSegment(0, 10, "t_account")));
         showTablesStatement.setFilter(showFilterSegment);
-        ShowTablesExecutor showTablesExecutor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
-        showTablesExecutor.execute(mockConnectionSession());
-        assertThat(showTablesExecutor.getQueryResultMetaData().getColumnCount(), is(2));
-        showTablesExecutor.getMergedResult().next();
-        assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("t_account"));
-        assertFalse(showTablesExecutor.getMergedResult().next());
+        ShowTablesExecutor executor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
+        Map<String, ShardingSphereDatabase> databases = getDatabases();
+        ContextManager contextManager = mockContextManager(databases);
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
+            executor.execute(mockConnectionSession());
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+            executor.getMergedResult().next();
+            assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account"));
+            assertFalse(executor.getMergedResult().next());
+        }
     }
     
     @Test
@@ -144,12 +133,18 @@ public final class ShowTablesExecutorTest extends ProxyContextRestorer {
         ShowFilterSegment showFilterSegment = mock(ShowFilterSegment.class);
         when(showFilterSegment.getLike()).thenReturn(Optional.of(new ShowLikeSegment(0, 10, "T_TEST")));
         showTablesStatement.setFilter(showFilterSegment);
-        ShowTablesExecutor showTablesExecutor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
-        showTablesExecutor.execute(mockConnectionSession());
-        assertThat(showTablesExecutor.getQueryResultMetaData().getColumnCount(), is(2));
-        showTablesExecutor.getMergedResult().next();
-        assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
-        assertFalse(showTablesExecutor.getMergedResult().next());
+        ShowTablesExecutor executor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
+        Map<String, ShardingSphereDatabase> databases = getDatabases();
+        ContextManager contextManager = mockContextManager(databases);
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
+            executor.execute(mockConnectionSession());
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+            executor.getMergedResult().next();
+            assertThat(executor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
+            assertFalse(executor.getMergedResult().next());
+        }
     }
     
     @Test
@@ -158,25 +153,62 @@ public final class ShowTablesExecutorTest extends ProxyContextRestorer {
         ShowFilterSegment showFilterSegment = mock(ShowFilterSegment.class);
         when(showFilterSegment.getLike()).thenReturn(Optional.of(new ShowLikeSegment(0, 10, "t_test")));
         showTablesStatement.setFilter(showFilterSegment);
-        ShowTablesExecutor showTablesExecutor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
-        showTablesExecutor.execute(mockConnectionSession());
-        assertThat(showTablesExecutor.getQueryResultMetaData().getColumnCount(), is(2));
-        showTablesExecutor.getMergedResult().next();
-        assertThat(showTablesExecutor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
-        assertFalse(showTablesExecutor.getMergedResult().next());
+        ShowTablesExecutor executor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
+        Map<String, ShardingSphereDatabase> databases = getDatabases();
+        ContextManager contextManager = mockContextManager(databases);
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
+            executor.execute(mockConnectionSession());
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+            executor.getMergedResult().next();
+            assertThat(executor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
+            assertFalse(executor.getMergedResult().next());
+        }
     }
     
     @Test
     public void assertShowTableFromUncompletedDatabase() throws SQLException {
         MySQLShowTablesStatement showTablesStatement = new MySQLShowTablesStatement();
         showTablesStatement.setFromSchema(new FromSchemaSegment(0, 0, new DatabaseSegment(0, 0, new IdentifierValue("uncompleted"))));
-        ShowTablesExecutor showTablesExecutor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
-        showTablesExecutor.execute(mockConnectionSession());
-        QueryResultMetaData actualMetaData = showTablesExecutor.getQueryResultMetaData();
-        assertThat(actualMetaData.getColumnCount(), is(2));
-        assertThat(actualMetaData.getColumnName(1), is("Tables_in_uncompleted"));
-        MergedResult actualResult = showTablesExecutor.getMergedResult();
-        assertFalse(actualResult.next());
+        ShowTablesExecutor executor = new ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
+        ContextManager contextManager = mockContextManager(getDatabases());
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            executor.execute(mockConnectionSession());
+            QueryResultMetaData actualMetaData = executor.getQueryResultMetaData();
+            assertThat(actualMetaData.getColumnCount(), is(2));
+            assertThat(actualMetaData.getColumnName(1), is("Tables_in_uncompleted"));
+            MergedResult actualResult = executor.getMergedResult();
+            assertFalse(actualResult.next());
+        }
+    }
+    
+    private ContextManager mockContextManager(final Map<String, ShardingSphereDatabase> databases) {
+        MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
+                new ShardingSphereMetaData(databases, mock(ShardingSphereRuleMetaData.class), new ConfigurationProperties(new Properties())));
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+        return result;
+    }
+    
+    private Map<String, ShardingSphereDatabase> getDatabases() {
+        Map<String, ShardingSphereTable> tables = new HashMap<>(4, 1);
+        tables.put("t_account", new ShardingSphereTable("t_account", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
+        tables.put("t_account_bak", new ShardingSphereTable("t_account_bak", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
+        tables.put("t_account_detail", new ShardingSphereTable("t_account_detail", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
+        tables.put("t_test", new ShardingSphereTable("T_TEST", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
+        ShardingSphereSchema schema = new ShardingSphereSchema(tables, Collections.emptyMap());
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
+        when(database.getSchema(String.format(DATABASE_PATTERN, 0))).thenReturn(schema);
+        when(database.isComplete()).thenReturn(true);
+        when(database.getProtocolType()).thenReturn(new MySQLDatabaseType());
+        Map<String, ShardingSphereDatabase> result = new HashMap<>(2, 1);
+        result.put(String.format(DATABASE_PATTERN, 0), database);
+        ShardingSphereDatabase uncompletedDatabase = mock(ShardingSphereDatabase.class);
+        when(uncompletedDatabase.isComplete()).thenReturn(false);
+        result.put("uncompleted", uncompletedDatabase);
+        return result;
     }
     
     private ConnectionSession mockConnectionSession() {
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java
index 5bd540a0760..25fbc7e6779 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java
@@ -28,12 +28,11 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLUseStatement;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.util.HashMap;
@@ -44,24 +43,50 @@ import java.util.Properties;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class UseDatabaseExecutorTest extends ProxyContextRestorer {
+public final class UseDatabaseExecutorTest {
     
     private static final String DATABASE_PATTERN = "db_%s";
     
     @Mock
     private ConnectionSession connectionSession;
     
-    @Before
-    public void setUp() {
-        ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+    @Test
+    public void assertExecuteUseStatementBackendHandler() {
+        MySQLUseStatement useStatement = mock(MySQLUseStatement.class);
+        when(useStatement.getSchema()).thenReturn(String.format(DATABASE_PATTERN, 0));
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().databaseExists("db_0")).thenReturn(true);
+            UseDatabaseExecutor executor = new UseDatabaseExecutor(useStatement);
+            executor.execute(connectionSession);
+            verify(connectionSession).setCurrentDatabase(anyString());
+        }
+    }
+    
+    @Test(expected = UnknownDatabaseException.class)
+    public void assertExecuteUseStatementBackendHandlerWhenSchemaNotExist() {
+        MySQLUseStatement useStatement = mock(MySQLUseStatement.class);
+        when(useStatement.getSchema()).thenReturn(String.format(DATABASE_PATTERN, 10));
+        UseDatabaseExecutor executor = new UseDatabaseExecutor(useStatement);
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            executor.execute(connectionSession);
+        }
+    }
+    
+    private ContextManager mockContextManager() {
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
                 new ShardingSphereMetaData(getDatabases(), mock(ShardingSphereRuleMetaData.class), new ConfigurationProperties(new Properties())));
-        when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
-        ProxyContext.init(contextManager);
+        when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+        return result;
     }
     
     private Map<String, ShardingSphereDatabase> getDatabases() {
@@ -74,26 +99,4 @@ public final class UseDatabaseExecutorTest extends ProxyContextRestorer {
         }
         return result;
     }
-    
-    @Test
-    public void assertExecuteUseStatementBackendHandler() {
-        MySQLUseStatement useStatement = mock(MySQLUseStatement.class);
-        when(useStatement.getSchema()).thenReturn(String.format(DATABASE_PATTERN, 0));
-        ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
-                new ShardingSphereMetaData(getDatabases(), mock(ShardingSphereRuleMetaData.class), new ConfigurationProperties(new Properties())));
-        when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
-        ProxyContext.init(contextManager);
-        UseDatabaseExecutor useSchemaBackendHandler = new UseDatabaseExecutor(useStatement);
-        useSchemaBackendHandler.execute(connectionSession);
-        verify(connectionSession).setCurrentDatabase(anyString());
-    }
-    
-    @Test(expected = UnknownDatabaseException.class)
-    public void assertExecuteUseStatementBackendHandlerWhenSchemaNotExist() {
-        MySQLUseStatement useStatement = mock(MySQLUseStatement.class);
-        when(useStatement.getSchema()).thenReturn(String.format(DATABASE_PATTERN, 10));
-        UseDatabaseExecutor useSchemaBackendHandler = new UseDatabaseExecutor(useStatement);
-        useSchemaBackendHandler.execute(connectionSession);
-    }
 }
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
index 4ed794ccb3d..cd1d0ec7d3f 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
@@ -33,25 +33,27 @@ import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Properties;
+import java.util.stream.Collectors;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -60,10 +62,11 @@ import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class SelectInformationSchemataExecutorTest extends ProxyContextRestorer {
+public final class SelectInformationSchemataExecutorTest {
     
     private final Grantee grantee = new Grantee("root", "127.0.0.1");
     
@@ -76,28 +79,21 @@ public final class SelectInformationSchemataExecutorTest extends ProxyContextRes
     
     @Before
     public void setUp() {
-        ProxyContext.init(mockContextManager());
         when(connectionSession.getGrantee()).thenReturn(grantee);
         statement = (SelectStatement) new SQLParserRule(new DefaultSQLParserRuleConfigurationBuilder().build()).getSQLParserEngine("MySQL").parse(sql, false);
     }
     
-    private ContextManager mockContextManager() {
-        AuthorityRule authorityRule = mock(AuthorityRule.class);
-        when(authorityRule.findPrivileges(grantee)).thenReturn(Optional.of(new DatabasePermittedPrivileges(Collections.singleton("auth_db"))));
-        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class), new ShardingSphereMetaData(new HashMap<>(),
-                new ShardingSphereRuleMetaData(Collections.singleton(authorityRule)), new ConfigurationProperties(new Properties())));
-        when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
-        return result;
-    }
-    
     @Test
     public void assertExecuteWithUnauthorizedDatabase() throws SQLException {
-        ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("no_auth_db", createDatabase("no_auth_db"));
         SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor(statement, sql);
-        executor.execute(connectionSession);
-        assertThat(executor.getQueryResultMetaData().getColumnCount(), is(0));
-        assertFalse(executor.getMergedResult().next());
+        ContextManager contextManager = mockContextManager(createDatabase("no_auth_db"));
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames()).thenReturn(Collections.singleton("no_auth_db"));
+            executor.execute(connectionSession);
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(0));
+            assertFalse(executor.getMergedResult().next());
+        }
     }
     
     @Test
@@ -105,33 +101,59 @@ public final class SelectInformationSchemataExecutorTest extends ProxyContextRes
         Map<String, String> expectedResultSetMap = new HashMap<>(2, 1);
         expectedResultSetMap.put("SCHEMA_NAME", "foo_ds");
         expectedResultSetMap.put("DEFAULT_COLLATION_NAME", "utf8mb4");
-        ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("auth_db", createDatabase(expectedResultSetMap));
         SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor(statement, sql);
-        executor.execute(connectionSession);
-        assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
-        assertTrue(executor.getMergedResult().next());
-        assertThat(executor.getMergedResult().getValue(1, String.class), is("auth_db"));
-        assertThat(executor.getMergedResult().getValue(2, String.class), is("utf8mb4"));
-        assertFalse(executor.getMergedResult().next());
+        ShardingSphereDatabase database = createDatabase(expectedResultSetMap);
+        ContextManager contextManager = mockContextManager(database);
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames()).thenReturn(Collections.singleton("auth_db"));
+            proxyContext.when(() -> ProxyContext.getInstance().getDatabase("auth_db")).thenReturn(database);
+            executor.execute(connectionSession);
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+            assertTrue(executor.getMergedResult().next());
+            assertThat(executor.getMergedResult().getValue(1, String.class), is("auth_db"));
+            assertThat(executor.getMergedResult().getValue(2, String.class), is("utf8mb4"));
+            assertFalse(executor.getMergedResult().next());
+        }
     }
     
     @Test
     public void assertExecuteWithAuthorizedDatabaseAndEmptyResource() throws SQLException {
-        ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases().put("auth_db", createDatabase("auth_db"));
         SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor(statement, sql);
-        executor.execute(connectionSession);
-        assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
-        assertTrue(executor.getMergedResult().next());
-        assertThat(executor.getMergedResult().getValue(1, String.class), is("auth_db"));
-        assertThat(executor.getMergedResult().getValue(2, String.class), is(""));
-        assertFalse(executor.getMergedResult().next());
+        ContextManager contextManager = mockContextManager(createDatabase("auth_db"));
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames()).thenReturn(Collections.singleton("auth_db"));
+            executor.execute(connectionSession);
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+            assertTrue(executor.getMergedResult().next());
+            assertThat(executor.getMergedResult().getValue(1, String.class), is("auth_db"));
+            assertThat(executor.getMergedResult().getValue(2, String.class), is(""));
+            assertFalse(executor.getMergedResult().next());
+        }
     }
     
     @Test
     public void assertExecuteWithoutDatabase() throws SQLException {
         SelectInformationSchemataExecutor executor = new SelectInformationSchemataExecutor(statement, sql);
-        executor.execute(connectionSession);
-        assertThat(executor.getQueryResultMetaData().getColumnCount(), is(0));
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getAllDatabaseNames()).thenReturn(Collections.emptyList());
+            executor.execute(connectionSession);
+            assertThat(executor.getQueryResultMetaData().getColumnCount(), is(0));
+        }
+    }
+    
+    private ContextManager mockContextManager(final ShardingSphereDatabase... databases) {
+        AuthorityRule authorityRule = mock(AuthorityRule.class);
+        when(authorityRule.findPrivileges(grantee)).thenReturn(Optional.of(new DatabasePermittedPrivileges(Collections.singleton("auth_db"))));
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class), new ShardingSphereMetaData(
+                Arrays.stream(databases).collect(Collectors.toMap(ShardingSphereDatabase::getName, each -> each, (key, value) -> value)),
+                new ShardingSphereRuleMetaData(Collections.singleton(authorityRule)), new ConfigurationProperties(new Properties())));
+        when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+        return result;
     }
     
     private ShardingSphereDatabase createDatabase(final String databaseName, final ShardingSphereResourceMetaData resourceMetaData) {
@@ -139,11 +161,11 @@ public final class SelectInformationSchemataExecutorTest extends ProxyContextRes
     }
     
     private ShardingSphereDatabase createDatabase(final String databaseName) {
-        return createDatabase(databaseName, new ShardingSphereResourceMetaData("sharding_db", Collections.emptyMap()));
+        return createDatabase(databaseName, new ShardingSphereResourceMetaData(databaseName, Collections.emptyMap()));
     }
     
     private ShardingSphereDatabase createDatabase(final Map<String, String> expectedResultSetMap) throws SQLException {
-        return createDatabase("auth_db", new ShardingSphereResourceMetaData("sharding_db", Collections.singletonMap("foo_ds", new MockedDataSource(mockConnection(expectedResultSetMap)))));
+        return createDatabase("auth_db", new ShardingSphereResourceMetaData("auth_db", Collections.singletonMap("foo_ds", new MockedDataSource(mockConnection(expectedResultSetMap)))));
     }
     
     private Connection mockConnection(final Map<String, String> expectedResultSetMap) throws SQLException {
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/util/ProxyContextRestorer.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/util/ProxyContextRestorer.java
deleted file mode 100644
index 395d919da30..00000000000
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/util/ProxyContextRestorer.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.proxy.backend.util;
-
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.junit.After;
-import org.junit.Before;
-
-public abstract class ProxyContextRestorer {
-    
-    private ContextManager currentContextManager;
-    
-    @Before
-    public void recordCurrentContextManager() {
-        currentContextManager = ProxyContext.getInstance().getContextManager();
-    }
-    
-    @After
-    public void restorePreviousContextManager() {
-        ProxyContext.init(currentContextManager);
-    }
-}