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

[shardingsphere] branch master updated: Remove ProxyContextRestorer on front-postgresql module (#24323)

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

zhangliang 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 a645ee55eb1 Remove ProxyContextRestorer on front-postgresql module (#24323)
a645ee55eb1 is described below

commit a645ee55eb1623fd74f74393c47c51d75da3d971
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Thu Feb 23 20:37:16 2023 +0800

    Remove ProxyContextRestorer on front-postgresql module (#24323)
    
    * Remove ProxyContextRestorer on PortalTest
    
    * Remove ProxyContextRestorer on PostgreSQLAggregatedBatchedStatementsCommandExecutorTest
    
    * Remove ProxyContextRestorer on PostgreSQLCommandExecuteEngineTest
    
    * Remove ProxyContextRestorer on PostgreSQLComBindExecutorTest
    
    * Remove ProxyContextRestorer on PostgreSQLBatchedStatementsExecutorTest
    
    * Remove ProxyContextRestorer on PostgreSQLAuthenticationEngineTest
    
    * Remove ProxyContextRestorer on PostgreSQLComParseExecutorTest
    
    * Remove ProxyContextRestorer on PostgreSQLComDescribeExecutorTest
    
    * for checkstyle
    
    * for checkstyle
---
 .../frontend/postgresql/ProxyContextRestorer.java  |  38 ----
 .../PostgreSQLAuthenticationEngineTest.java        |  70 +++---
 .../PostgreSQLCommandExecuteEngineTest.java        |  22 +-
 .../command/query/extended/PortalTest.java         |  49 +++--
 ...egatedBatchedStatementsCommandExecutorTest.java |  91 ++++----
 .../PostgreSQLBatchedStatementsExecutorTest.java   | 102 +++++----
 .../bind/PostgreSQLComBindExecutorTest.java        |  30 ++-
 .../PostgreSQLComDescribeExecutorTest.java         | 239 ++++++++++++---------
 .../parse/PostgreSQLComParseExecutorTest.java      |  99 ++++-----
 9 files changed, 390 insertions(+), 350 deletions(-)

diff --git a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/ProxyContextRestorer.java b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/ProxyContextRestorer.java
deleted file mode 100644
index 43691bca3bc..00000000000
--- a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/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.frontend.postgresql;
-
-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);
-    }
-}
diff --git a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
index ecfef45693f..b81d4949cb4 100644
--- a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
+++ b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
@@ -43,7 +43,6 @@ 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.frontend.authentication.AuthenticationResult;
-import org.apache.shardingsphere.proxy.frontend.postgresql.ProxyContextRestorer;
 import org.apache.shardingsphere.proxy.frontend.postgresql.authentication.authenticator.impl.PostgreSQLMD5PasswordAuthenticator;
 import org.junit.Before;
 import org.junit.Test;
@@ -51,6 +50,7 @@ import org.junit.runner.RunWith;
 import org.mockito.Answers;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
 import org.mockito.internal.configuration.plugins.Plugins;
 import org.mockito.junit.MockitoJUnitRunner;
 
@@ -64,11 +64,12 @@ 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.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class PostgreSQLAuthenticationEngineTest extends ProxyContextRestorer {
+public final class PostgreSQLAuthenticationEngineTest {
     
     private final String username = "root";
     
@@ -81,13 +82,6 @@ public final class PostgreSQLAuthenticationEngineTest extends ProxyContextRestor
     @Before
     public void setup() {
         when(channelHandlerContext.channel().attr(CommonConstants.CHARSET_ATTRIBUTE_KEY)).thenReturn(mock(Attribute.class));
-        mockInitProxyContext();
-    }
-    
-    private void mockInitProxyContext() {
-        ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        when(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new ShardingSphereRuleMetaData(Collections.singleton(mock(AuthorityRule.class))));
-        ProxyContext.init(contextManager);
     }
     
     @Test
@@ -107,7 +101,11 @@ public final class PostgreSQLAuthenticationEngineTest extends ProxyContextRestor
         payload.writeInt4(196608);
         payload.writeStringNul("client_encoding");
         payload.writeStringNul("UTF8");
-        new PostgreSQLAuthenticationEngine().authenticate(channelHandlerContext, payload);
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            new PostgreSQLAuthenticationEngine().authenticate(channelHandlerContext, payload);
+        }
     }
     
     @Test(expected = ProtocolViolationException.class)
@@ -117,7 +115,11 @@ public final class PostgreSQLAuthenticationEngineTest extends ProxyContextRestor
         PostgreSQLPacketPayload payload = new PostgreSQLPacketPayload(createByteBuf(8, 16), StandardCharsets.UTF_8);
         payload.writeInt1('F');
         payload.writeInt8(0);
-        authenticationEngine.authenticate(channelHandlerContext, payload);
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            authenticationEngine.authenticate(channelHandlerContext, payload);
+        }
     }
     
     @SneakyThrows(ReflectiveOperationException.class)
@@ -145,31 +147,39 @@ public final class PostgreSQLAuthenticationEngineTest extends ProxyContextRestor
         payload.writeStringNul("client_encoding");
         payload.writeStringNul("UTF8");
         PostgreSQLAuthenticationEngine engine = new PostgreSQLAuthenticationEngine();
-        AuthenticationResult actual = engine.authenticate(channelHandlerContext, payload);
-        assertFalse(actual.isFinished());
-        assertThat(actual.getUsername(), is(username));
-        ArgumentCaptor<PostgreSQLMD5PasswordAuthenticationPacket> argumentCaptor = ArgumentCaptor.forClass(PostgreSQLMD5PasswordAuthenticationPacket.class);
-        verify(channelHandlerContext).writeAndFlush(argumentCaptor.capture());
-        PostgreSQLMD5PasswordAuthenticationPacket md5PasswordPacket = argumentCaptor.getValue();
-        byte[] md5Salt = getMd5Salt(md5PasswordPacket);
-        payload = new PostgreSQLPacketPayload(createByteBuf(16, 128), StandardCharsets.UTF_8);
-        String md5Digest = (String) Plugins.getMemberAccessor().invoke(PostgreSQLMD5PasswordAuthenticator.class.getDeclaredMethod("md5Encode", String.class, String.class, byte[].class),
-                new PostgreSQLMD5PasswordAuthenticator(), username, inputPassword, md5Salt);
-        payload.writeInt1('p');
-        payload.writeInt4(4 + md5Digest.length() + 1);
-        payload.writeStringNul(md5Digest);
-        MetaDataContexts metaDataContexts = getMetaDataContexts(new ShardingSphereUser(username, password, ""));
-        ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
-        ProxyContext.init(contextManager);
-        actual = engine.authenticate(channelHandlerContext, payload);
-        assertThat(actual.isFinished(), is(password.equals(inputPassword)));
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            AuthenticationResult actual = engine.authenticate(channelHandlerContext, payload);
+            assertFalse(actual.isFinished());
+            assertThat(actual.getUsername(), is(username));
+            ArgumentCaptor<PostgreSQLMD5PasswordAuthenticationPacket> argumentCaptor = ArgumentCaptor.forClass(PostgreSQLMD5PasswordAuthenticationPacket.class);
+            verify(channelHandlerContext).writeAndFlush(argumentCaptor.capture());
+            PostgreSQLMD5PasswordAuthenticationPacket md5PasswordPacket = argumentCaptor.getValue();
+            byte[] md5Salt = getMd5Salt(md5PasswordPacket);
+            payload = new PostgreSQLPacketPayload(createByteBuf(16, 128), StandardCharsets.UTF_8);
+            String md5Digest = (String) Plugins.getMemberAccessor().invoke(PostgreSQLMD5PasswordAuthenticator.class.getDeclaredMethod("md5Encode", String.class, String.class, byte[].class),
+                    new PostgreSQLMD5PasswordAuthenticator(), username, inputPassword, md5Salt);
+            payload.writeInt1('p');
+            payload.writeInt4(4 + md5Digest.length() + 1);
+            payload.writeStringNul(md5Digest);
+            MetaDataContexts metaDataContexts = getMetaDataContexts(new ShardingSphereUser(username, password, ""));
+            when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
+            actual = engine.authenticate(channelHandlerContext, payload);
+            assertThat(actual.isFinished(), is(password.equals(inputPassword)));
+        }
     }
     
     private ByteBuf createByteBuf(final int initialCapacity, final int maxCapacity) {
         return new UnpooledHeapByteBuf(UnpooledByteBufAllocator.DEFAULT, initialCapacity, maxCapacity);
     }
     
+    private ContextManager mockContextManager() {
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new ShardingSphereRuleMetaData(Collections.singleton(mock(AuthorityRule.class))));
+        return result;
+    }
+    
     private MetaDataContexts getMetaDataContexts(final ShardingSphereUser user) {
         return new MetaDataContexts(
                 mock(MetaDataPersistService.class), new ShardingSphereMetaData(new LinkedHashMap<>(), buildGlobalRuleMetaData(user), new ConfigurationProperties(new Properties())));
diff --git a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
index 9f6804b00cc..61aad503805 100644
--- a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
+++ b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
@@ -33,13 +33,13 @@ import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
 import org.apache.shardingsphere.proxy.frontend.command.executor.ResponseType;
-import org.apache.shardingsphere.proxy.frontend.postgresql.ProxyContextRestorer;
 import org.apache.shardingsphere.proxy.frontend.postgresql.command.query.simple.PostgreSQLComQueryExecutor;
 import org.apache.shardingsphere.transaction.api.TransactionType;
 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.SQLException;
@@ -48,11 +48,12 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.isA;
 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 PostgreSQLCommandExecuteEngineTest extends ProxyContextRestorer {
+public final class PostgreSQLCommandExecuteEngineTest {
     
     @Mock
     private ChannelHandlerContext channelHandlerContext;
@@ -68,7 +69,6 @@ public final class PostgreSQLCommandExecuteEngineTest extends ProxyContextRestor
     
     @Before
     public void setUp() {
-        ProxyContext.init(new ContextManager(new MetaDataContexts(mock(MetaDataPersistService.class), new ShardingSphereMetaData()), mock(InstanceContext.class)));
         when(channelHandlerContext.channel()).thenReturn(channel);
         when(connectionSession.getTransactionStatus()).thenReturn(new TransactionStatus(TransactionType.LOCAL));
     }
@@ -117,11 +117,15 @@ public final class PostgreSQLCommandExecuteEngineTest extends ProxyContextRestor
         PostgreSQLPacket packet = mock(PostgreSQLPacket.class);
         when(queryCommandExecutor.getQueryRowPacket()).thenReturn(packet);
         PostgreSQLCommandExecuteEngine commandExecuteEngine = new PostgreSQLCommandExecuteEngine();
-        commandExecuteEngine.writeQueryData(channelHandlerContext, backendConnection, queryCommandExecutor, 0);
-        verify(resourceLock).doAwait();
-        verify(channelHandlerContext).write(packet);
-        verify(channelHandlerContext).write(isA(PostgreSQLCommandCompletePacket.class));
-        verify(channelHandlerContext).flush();
-        verify(channelHandlerContext).write(isA(PostgreSQLReadyForQueryPacket.class));
+        ContextManager contextManager = new ContextManager(new MetaDataContexts(mock(MetaDataPersistService.class), new ShardingSphereMetaData()), mock(InstanceContext.class));
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            commandExecuteEngine.writeQueryData(channelHandlerContext, backendConnection, queryCommandExecutor, 0);
+            verify(resourceLock).doAwait();
+            verify(channelHandlerContext).write(packet);
+            verify(channelHandlerContext).write(isA(PostgreSQLCommandCompletePacket.class));
+            verify(channelHandlerContext).flush();
+            verify(channelHandlerContext).write(isA(PostgreSQLReadyForQueryPacket.class));
+        }
     }
 }
diff --git a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PortalTest.java b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PortalTest.java
index 03736dbc496..a920f666fca 100644
--- a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PortalTest.java
+++ b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PortalTest.java
@@ -46,7 +46,6 @@ import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeader
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.frontend.postgresql.ProxyContextRestorer;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.VariableAssignSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.VariableSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -85,42 +84,52 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class PortalTest extends ProxyContextRestorer {
+public final class PortalTest {
     
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private ContextManager mockContextManager;
+    private MockedStatic<ProxyContext> mockedProxyContext;
     
-    @Mock
-    private ProxyBackendHandler proxyBackendHandler;
+    private MockedStatic<ProxyBackendHandlerFactory> mockedProxyBackendHandlerFactory;
     
     @Mock
-    private ConnectionSession connectionSession;
+    private ProxyBackendHandler proxyBackendHandler;
     
     @Mock
     private BackendConnection backendConnection;
     
-    private MockedStatic<ProxyBackendHandlerFactory> mockedStatic;
-    
     @Before
     public void setup() {
-        ProxyContext.init(mockContextManager);
-        when(mockContextManager.getMetaDataContexts().getMetaData().containsDatabase("db")).thenReturn(true);
-        when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().getValue(ConfigurationPropertyKey.SQL_SHOW)).thenReturn(false);
+        mockedProxyContext = mockProxyContext();
+        ConnectionSession connectionSession = mock(ConnectionSession.class);
         when(connectionSession.getDefaultDatabaseName()).thenReturn("db");
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
-        when(database.getProtocolType()).thenReturn(new PostgreSQLDatabaseType());
-        when(ProxyContext.getInstance().getDatabase("db")).thenReturn(database);
+        mockedProxyBackendHandlerFactory = mockProxyBackendHandlerFactory(connectionSession);
         when(backendConnection.getConnectionSession()).thenReturn(connectionSession);
-        mockedStatic = mockStatic(ProxyBackendHandlerFactory.class);
-        mockedStatic.when(() -> ProxyBackendHandlerFactory.newInstance(any(PostgreSQLDatabaseType.class), anyString(), any(SQLStatement.class), eq(connectionSession), any(HintValueContext.class)))
-                .thenReturn(proxyBackendHandler);
-        mockedStatic.when(() -> ProxyBackendHandlerFactory.newInstance(any(PostgreSQLDatabaseType.class), any(QueryContext.class), eq(connectionSession), anyBoolean()))
+    }
+    
+    private MockedStatic<ProxyBackendHandlerFactory> mockProxyBackendHandlerFactory(final ConnectionSession connectionSession) {
+        MockedStatic<ProxyBackendHandlerFactory> result = mockStatic(ProxyBackendHandlerFactory.class);
+        result.when(() -> ProxyBackendHandlerFactory.newInstance(any(PostgreSQLDatabaseType.class), anyString(), any(SQLStatement.class), eq(connectionSession), any(HintValueContext.class)))
                 .thenReturn(proxyBackendHandler);
+        result.when(() -> ProxyBackendHandlerFactory.newInstance(any(PostgreSQLDatabaseType.class), any(QueryContext.class), eq(connectionSession), anyBoolean())).thenReturn(proxyBackendHandler);
+        return result;
+    }
+    
+    private MockedStatic<ProxyContext> mockProxyContext() {
+        MockedStatic<ProxyContext> result = mockStatic(ProxyContext.class);
+        result.when(() -> ProxyContext.getInstance()).thenReturn(mock(ProxyContext.class, RETURNS_DEEP_STUBS));
+        ContextManager mockedContextManager = mock(ContextManager.class, Answers.RETURNS_DEEP_STUBS);
+        result.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(mockedContextManager);
+        when(mockedContextManager.getMetaDataContexts().getMetaData().containsDatabase("db")).thenReturn(true);
+        when(mockedContextManager.getMetaDataContexts().getMetaData().getProps().getValue(ConfigurationPropertyKey.SQL_SHOW)).thenReturn(false);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
+        when(database.getProtocolType()).thenReturn(new PostgreSQLDatabaseType());
+        result.when(() -> ProxyContext.getInstance().getDatabase("db")).thenReturn(database);
+        return result;
     }
     
     @After
     public void tearDown() {
-        mockedStatic.close();
+        mockedProxyContext.close();
+        mockedProxyBackendHandlerFactory.close();
     }
     
     @Test
diff --git a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
index 7e8d9280af7..99d7b8ed091 100644
--- a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
+++ b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
@@ -46,13 +46,11 @@ import org.apache.shardingsphere.proxy.backend.connector.jdbc.statement.JDBCBack
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.session.ServerPreparedStatementRegistry;
-import org.apache.shardingsphere.proxy.frontend.postgresql.ProxyContextRestorer;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
 import org.apache.shardingsphere.sqltranslator.rule.builder.DefaultSQLTranslatorRuleConfigurationBuilder;
-import org.junit.Before;
 import org.junit.Test;
+import org.mockito.MockedStatic;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -70,9 +68,10 @@ import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.nullable;
 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 PostgreSQLAggregatedBatchedStatementsCommandExecutorTest extends ProxyContextRestorer {
+public final class PostgreSQLAggregatedBatchedStatementsCommandExecutorTest {
     
     private static final ShardingSphereSQLParserEngine SQL_PARSER_ENGINE = new ShardingSphereSQLParserEngine("PostgreSQL", new CacheOption(2000, 65535L), new CacheOption(128, 1024L), false);
     
@@ -80,39 +79,38 @@ public final class PostgreSQLAggregatedBatchedStatementsCommandExecutorTest exte
     
     private static final String STATEMENT_ID = "S_1";
     
-    private static final String SQL = "insert into t_order (id) values (?)";
+    private static final String SQL = "INSERT INTO t_order (id) VALUES (?)";
     
     private static final int BATCH_SIZE = 10;
     
-    @Before
-    public void setup() {
-        ProxyContext.init(mock(ContextManager.class, RETURNS_DEEP_STUBS));
-    }
-    
-    @SuppressWarnings("rawtypes")
     @Test
     public void assertExecute() throws SQLException {
-        when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(0);
-        when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY)).thenReturn(1);
-        when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)).thenReturn(false);
-        ShardingSphereRuleMetaData globalRuleMetaData = new ShardingSphereRuleMetaData(Arrays.asList(new SQLTranslatorRule(new DefaultSQLTranslatorRuleConfigurationBuilder().build()),
-                new LoggingRule(new DefaultLoggingRuleConfigurationBuilder().build())));
-        when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        ConnectionSession connectionSession = mock(ConnectionSession.class);
-        when(connectionSession.getDatabaseName()).thenReturn("db");
-        when(connectionSession.getConnectionContext()).thenReturn(new ConnectionContext());
-        when(connectionSession.getServerPreparedStatementRegistry()).thenReturn(new ServerPreparedStatementRegistry());
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
-        when(database.getResourceMetaData().getAllInstanceDataSourceNames()).thenReturn(Collections.singletonList("ds_0"));
-        when(database.getResourceMetaData().getStorageTypes()).thenReturn(Collections.singletonMap("ds_0", new PostgreSQLDatabaseType()));
-        when(database.getRuleMetaData()).thenReturn(new ShardingSphereRuleMetaData(Collections.emptyList()));
-        when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase("db")).thenReturn(database);
-        SQLStatement sqlStatement = SQL_PARSER_ENGINE.parse(SQL, false);
+        ConnectionSession connectionSession = mockConnectionSession();
+        PostgreSQLAggregatedBatchedStatementsCommandExecutor executor = new PostgreSQLAggregatedBatchedStatementsCommandExecutor(connectionSession, createPackets());
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            List<DatabasePacket<?>> actualPackets = new ArrayList<>(executor.execute());
+            assertThat(actualPackets.size(), is(BATCH_SIZE * 3));
+            for (int i = 0; i < BATCH_SIZE; i++) {
+                assertThat(actualPackets.get(i * 3), is(PostgreSQLBindCompletePacket.getInstance()));
+                assertThat(actualPackets.get(i * 3 + 1), is(PostgreSQLNoDataPacket.getInstance()));
+                assertThat(actualPackets.get(i * 3 + 2), instanceOf(PostgreSQLCommandCompletePacket.class));
+            }
+        }
+    }
+    
+    private static ConnectionSession mockConnectionSession() throws SQLException {
+        ConnectionSession result = mock(ConnectionSession.class);
+        @SuppressWarnings("rawtypes")
         SQLStatementContext sqlStatementContext = mock(InsertStatementContext.class);
-        when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
-        connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(STATEMENT_ID,
+        when(sqlStatementContext.getSqlStatement()).thenReturn(SQL_PARSER_ENGINE.parse(SQL, false));
+        when(result.getDatabaseName()).thenReturn("db");
+        when(result.getConnectionContext()).thenReturn(new ConnectionContext());
+        when(result.getServerPreparedStatementRegistry()).thenReturn(new ServerPreparedStatementRegistry());
+        result.getServerPreparedStatementRegistry().addPreparedStatement(STATEMENT_ID,
                 new PostgreSQLServerPreparedStatement(SQL, sqlStatementContext, Collections.singletonList(PostgreSQLColumnType.POSTGRESQL_TYPE_INT4)));
-        when(connectionSession.getConnectionId()).thenReturn(CONNECTION_ID);
+        when(result.getConnectionId()).thenReturn(CONNECTION_ID);
         BackendConnection backendConnection = mock(BackendConnection.class);
         Connection connection = mock(Connection.class, RETURNS_DEEP_STUBS);
         when(connection.getMetaData().getURL()).thenReturn("jdbc:postgresql://127.0.0.1/db");
@@ -122,20 +120,13 @@ public final class PostgreSQLAggregatedBatchedStatementsCommandExecutorTest exte
         JDBCBackendStatement backendStatement = mock(JDBCBackendStatement.class);
         when(backendStatement.createStorageResource(any(ExecutionUnit.class), any(Connection.class), any(ConnectionMode.class), any(StatementOption.class), nullable(DatabaseType.class)))
                 .thenReturn(preparedStatement);
-        when(connectionSession.getStatementManager()).thenReturn(backendStatement);
-        when(connectionSession.getBackendConnection()).thenReturn(backendConnection);
-        PostgreSQLAggregatedBatchedStatementsCommandExecutor batchedStatementsCommandExecutor = new PostgreSQLAggregatedBatchedStatementsCommandExecutor(connectionSession, preparePackets());
-        List<DatabasePacket<?>> actualPackets = new ArrayList<>(batchedStatementsCommandExecutor.execute());
-        assertThat(actualPackets.size(), is(BATCH_SIZE * 3));
-        for (int i = 0; i < BATCH_SIZE; i++) {
-            assertThat(actualPackets.get(i * 3), is(PostgreSQLBindCompletePacket.getInstance()));
-            assertThat(actualPackets.get(i * 3 + 1), is(PostgreSQLNoDataPacket.getInstance()));
-            assertThat(actualPackets.get(i * 3 + 2), instanceOf(PostgreSQLCommandCompletePacket.class));
-        }
+        when(result.getStatementManager()).thenReturn(backendStatement);
+        when(result.getBackendConnection()).thenReturn(backendConnection);
+        return result;
     }
     
-    private List<PostgreSQLCommandPacket> preparePackets() {
-        List<PostgreSQLCommandPacket> result = new ArrayList<>();
+    private List<PostgreSQLCommandPacket> createPackets() {
+        List<PostgreSQLCommandPacket> result = new ArrayList<>(BATCH_SIZE);
         for (int i = 0; i < BATCH_SIZE; i++) {
             PostgreSQLComBindPacket bindPacket = mock(PostgreSQLComBindPacket.class);
             when(bindPacket.getStatementId()).thenReturn(STATEMENT_ID);
@@ -148,4 +139,20 @@ public final class PostgreSQLAggregatedBatchedStatementsCommandExecutorTest exte
         }
         return result;
     }
+    
+    private static ContextManager mockContextManager() {
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        when(result.getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(0);
+        when(result.getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY)).thenReturn(1);
+        when(result.getMetaDataContexts().getMetaData().getProps().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)).thenReturn(false);
+        ShardingSphereRuleMetaData globalRuleMetaData = new ShardingSphereRuleMetaData(Arrays.asList(new SQLTranslatorRule(new DefaultSQLTranslatorRuleConfigurationBuilder().build()),
+                new LoggingRule(new DefaultLoggingRuleConfigurationBuilder().build())));
+        when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
+        when(database.getResourceMetaData().getAllInstanceDataSourceNames()).thenReturn(Collections.singletonList("ds_0"));
+        when(database.getResourceMetaData().getStorageTypes()).thenReturn(Collections.singletonMap("ds_0", new PostgreSQLDatabaseType()));
+        when(database.getRuleMetaData()).thenReturn(new ShardingSphereRuleMetaData(Collections.emptyList()));
+        when(result.getMetaDataContexts().getMetaData().getDatabase("db")).thenReturn(database);
+        return result;
+    }
 }
diff --git a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
index a6fa60f1c2b..cff1a6f872e 100644
--- a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
+++ b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
@@ -37,16 +37,15 @@ import org.apache.shardingsphere.proxy.backend.connector.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.connector.jdbc.statement.JDBCBackendStatement;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.frontend.postgresql.ProxyContextRestorer;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.dml.PostgreSQLInsertStatement;
 import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
 import org.apache.shardingsphere.sqltranslator.rule.builder.DefaultSQLTranslatorRuleConfigurationBuilder;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Answers;
 import org.mockito.InOrder;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
 import org.mockito.internal.configuration.plugins.Plugins;
 import org.mockito.junit.MockitoJUnitRunner;
 
@@ -67,13 +66,11 @@ import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class PostgreSQLBatchedStatementsExecutorTest extends ProxyContextRestorer {
-    
-    @Mock
-    private ConnectionSession connectionSession;
+public final class PostgreSQLBatchedStatementsExecutorTest {
     
     @Mock
     private BackendConnection backendConnection;
@@ -81,39 +78,8 @@ public final class PostgreSQLBatchedStatementsExecutorTest extends ProxyContextR
     @Mock
     private JDBCBackendStatement backendStatement;
     
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private ContextManager contextManager;
-    
-    @Before
-    public void setup() {
-        when(connectionSession.getDatabaseName()).thenReturn("db");
-        when(connectionSession.getBackendConnection()).thenReturn(backendConnection);
-        when(connectionSession.getStatementManager()).thenReturn(backendStatement);
-        when(connectionSession.getConnectionContext()).thenReturn(new ConnectionContext());
-        ProxyContext.init(contextManager);
-        when(contextManager.getMetaDataContexts().getMetaData().getProps().getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(1);
-        when(contextManager.getMetaDataContexts().getMetaData().getProps().getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY)).thenReturn(1);
-        when(contextManager.getMetaDataContexts().getMetaData().getProps().getValue(ConfigurationPropertyKey.SQL_SHOW)).thenReturn(false);
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
-        when(database.getResourceMetaData().getStorageTypes()).thenReturn(Collections.singletonMap("ds_0", new PostgreSQLDatabaseType()));
-        when(database.getResourceMetaData().getAllInstanceDataSourceNames()).thenReturn(Collections.singletonList("ds_0"));
-        when(database.getRuleMetaData()).thenReturn(new ShardingSphereRuleMetaData(Collections.emptyList()));
-        when(contextManager.getMetaDataContexts().getMetaData().getDatabase("db")).thenReturn(database);
-        ShardingSphereRuleMetaData globalRuleMetaData = new ShardingSphereRuleMetaData(Arrays.asList(new SQLTranslatorRule(new DefaultSQLTranslatorRuleConfigurationBuilder().build()),
-                new LoggingRule(new DefaultLoggingRuleConfigurationBuilder().build())));
-        when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-    }
-    
     @Test
     public void assertExecuteBatch() throws SQLException {
-        PostgreSQLInsertStatement insertStatement = mock(PostgreSQLInsertStatement.class, RETURNS_DEEP_STUBS);
-        when(insertStatement.getTable().getTableName().getIdentifier().getValue()).thenReturn("t");
-        InsertStatementContext insertStatementContext = mock(InsertStatementContext.class);
-        when(insertStatementContext.getSqlStatement()).thenReturn(insertStatement);
-        PostgreSQLServerPreparedStatement postgreSQLPreparedStatement = new PostgreSQLServerPreparedStatement("insert into t (id, col) values (?, ?)", insertStatementContext,
-                Arrays.asList(PostgreSQLColumnType.POSTGRESQL_TYPE_INT4, PostgreSQLColumnType.POSTGRESQL_TYPE_VARCHAR));
-        List<List<Object>> parameterSets = Arrays.asList(Arrays.asList(1, new PostgreSQLTypeUnspecifiedSQLParameter("foo")),
-                Arrays.asList(2, new PostgreSQLTypeUnspecifiedSQLParameter("bar")), Arrays.asList(3, new PostgreSQLTypeUnspecifiedSQLParameter("baz")));
         Connection connection = mock(Connection.class, RETURNS_DEEP_STUBS);
         when(connection.getMetaData().getURL()).thenReturn("jdbc:postgresql://127.0.0.1/db");
         when(backendConnection.getConnections(nullable(String.class), anyInt(), any(ConnectionMode.class))).thenReturn(Collections.singletonList(connection));
@@ -122,18 +88,60 @@ public final class PostgreSQLBatchedStatementsExecutorTest extends ProxyContextR
         when(preparedStatement.executeBatch()).thenReturn(new int[]{1, 1, 1});
         when(backendStatement.createStorageResource(any(ExecutionUnit.class), eq(connection), any(ConnectionMode.class), any(StatementOption.class), nullable(DatabaseType.class)))
                 .thenReturn(preparedStatement);
-        PostgreSQLBatchedStatementsExecutor actual = new PostgreSQLBatchedStatementsExecutor(connectionSession, postgreSQLPreparedStatement, parameterSets);
-        prepareExecutionUnitParameters(actual, parameterSets);
-        int actualUpdated = actual.executeBatch();
-        assertThat(actualUpdated, is(3));
-        InOrder inOrder = inOrder(preparedStatement);
-        for (List<Object> each : parameterSets) {
-            inOrder.verify(preparedStatement).setObject(1, each.get(0));
-            inOrder.verify(preparedStatement).setObject(2, each.get(1).toString());
-            inOrder.verify(preparedStatement).addBatch();
+        ContextManager contextManager = mockContextManager();
+        ConnectionSession connectionSession = mockConnectionSession();
+        PostgreSQLServerPreparedStatement postgreSQLPreparedStatement = new PostgreSQLServerPreparedStatement("insert into t (id, col) values (?, ?)", mockInsertStatementContext(),
+                Arrays.asList(PostgreSQLColumnType.POSTGRESQL_TYPE_INT4, PostgreSQLColumnType.POSTGRESQL_TYPE_VARCHAR));
+        List<List<Object>> parameterSets = Arrays.asList(Arrays.asList(1, new PostgreSQLTypeUnspecifiedSQLParameter("foo")),
+                Arrays.asList(2, new PostgreSQLTypeUnspecifiedSQLParameter("bar")), Arrays.asList(3, new PostgreSQLTypeUnspecifiedSQLParameter("baz")));
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, Mockito.RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            PostgreSQLBatchedStatementsExecutor actual = new PostgreSQLBatchedStatementsExecutor(connectionSession, postgreSQLPreparedStatement, parameterSets);
+            prepareExecutionUnitParameters(actual, parameterSets);
+            int actualUpdated = actual.executeBatch();
+            assertThat(actualUpdated, is(3));
+            InOrder inOrder = inOrder(preparedStatement);
+            for (List<Object> each : parameterSets) {
+                inOrder.verify(preparedStatement).setObject(1, each.get(0));
+                inOrder.verify(preparedStatement).setObject(2, each.get(1).toString());
+                inOrder.verify(preparedStatement).addBatch();
+            }
         }
     }
     
+    private static InsertStatementContext mockInsertStatementContext() {
+        PostgreSQLInsertStatement insertStatement = mock(PostgreSQLInsertStatement.class, RETURNS_DEEP_STUBS);
+        when(insertStatement.getTable().getTableName().getIdentifier().getValue()).thenReturn("t");
+        InsertStatementContext result = mock(InsertStatementContext.class);
+        when(result.getSqlStatement()).thenReturn(insertStatement);
+        return result;
+    }
+    
+    private ContextManager mockContextManager() {
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        when(result.getMetaDataContexts().getMetaData().getProps().getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(1);
+        when(result.getMetaDataContexts().getMetaData().getProps().getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY)).thenReturn(1);
+        when(result.getMetaDataContexts().getMetaData().getProps().getValue(ConfigurationPropertyKey.SQL_SHOW)).thenReturn(false);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
+        when(database.getResourceMetaData().getStorageTypes()).thenReturn(Collections.singletonMap("ds_0", new PostgreSQLDatabaseType()));
+        when(database.getResourceMetaData().getAllInstanceDataSourceNames()).thenReturn(Collections.singletonList("ds_0"));
+        when(database.getRuleMetaData()).thenReturn(new ShardingSphereRuleMetaData(Collections.emptyList()));
+        when(result.getMetaDataContexts().getMetaData().getDatabase("db")).thenReturn(database);
+        ShardingSphereRuleMetaData globalRuleMetaData = new ShardingSphereRuleMetaData(Arrays.asList(new SQLTranslatorRule(new DefaultSQLTranslatorRuleConfigurationBuilder().build()),
+                new LoggingRule(new DefaultLoggingRuleConfigurationBuilder().build())));
+        when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
+        return result;
+    }
+    
+    private ConnectionSession mockConnectionSession() {
+        ConnectionSession result = mock(ConnectionSession.class);
+        when(result.getDatabaseName()).thenReturn("db");
+        when(result.getBackendConnection()).thenReturn(backendConnection);
+        when(result.getStatementManager()).thenReturn(backendStatement);
+        when(result.getConnectionContext()).thenReturn(new ConnectionContext());
+        return result;
+    }
+    
     @SuppressWarnings("unchecked")
     @SneakyThrows(ReflectiveOperationException.class)
     private void prepareExecutionUnitParameters(final PostgreSQLBatchedStatementsExecutor target, final List<List<Object>> parameterSets) {
diff --git a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/bind/PostgreSQLComBindExecutorTest.java b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/bind/PostgreSQLComBindExecutorTest.java
index 9f0372fb20a..16792e07309 100644
--- a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/bind/PostgreSQLComBindExecutorTest.java
+++ b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/bind/PostgreSQLComBindExecutorTest.java
@@ -29,7 +29,6 @@ import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.session.ServerPreparedStatementRegistry;
 import org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
-import org.apache.shardingsphere.proxy.frontend.postgresql.ProxyContextRestorer;
 import org.apache.shardingsphere.proxy.frontend.postgresql.command.PortalContext;
 import org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.Portal;
 import org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.PostgreSQLServerPreparedStatement;
@@ -37,8 +36,11 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.dal
 import org.apache.shardingsphere.transaction.api.TransactionType;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Answers;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.sql.SQLException;
@@ -49,13 +51,13 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyList;
-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 PostgreSQLComBindExecutorTest extends ProxyContextRestorer {
+public final class PostgreSQLComBindExecutorTest {
     
     @Mock
     private PortalContext portalContext;
@@ -71,11 +73,8 @@ public final class PostgreSQLComBindExecutorTest extends ProxyContextRestorer {
     
     @Test
     public void assertExecuteBind() throws SQLException {
-        ProxyContext.init(mock(ContextManager.class, RETURNS_DEEP_STUBS));
         String databaseName = "postgres";
-        when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().containsDatabase(databaseName)).thenReturn(true);
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
-        when(ProxyContext.getInstance().getDatabase(databaseName)).thenReturn(database);
         when(database.getProtocolType()).thenReturn(new PostgreSQLDatabaseType());
         when(connectionSession.getServerPreparedStatementRegistry()).thenReturn(new ServerPreparedStatementRegistry());
         BackendConnection backendConnection = mock(BackendConnection.class);
@@ -90,9 +89,20 @@ public final class PostgreSQLComBindExecutorTest extends ProxyContextRestorer {
         when(bindPacket.getPortal()).thenReturn("C_1");
         when(bindPacket.readParameters(anyList())).thenReturn(Collections.emptyList());
         when(bindPacket.readResultFormats()).thenReturn(Collections.emptyList());
-        Collection<DatabasePacket<?>> actual = executor.execute();
-        assertThat(actual.size(), is(1));
-        assertThat(actual.iterator().next(), is(PostgreSQLBindCompletePacket.getInstance()));
-        verify(portalContext).add(any(Portal.class));
+        ContextManager contextManager = mockContextManager(databaseName);
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, Mockito.RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            proxyContext.when(() -> ProxyContext.getInstance().getDatabase(databaseName)).thenReturn(database);
+            Collection<DatabasePacket<?>> actual = executor.execute();
+            assertThat(actual.size(), is(1));
+            assertThat(actual.iterator().next(), is(PostgreSQLBindCompletePacket.getInstance()));
+            verify(portalContext).add(any(Portal.class));
+        }
+    }
+    
+    private ContextManager mockContextManager(final String databaseName) {
+        ContextManager result = mock(ContextManager.class, Answers.RETURNS_DEEP_STUBS);
+        when(result.getMetaDataContexts().getMetaData().containsDatabase(databaseName)).thenReturn(true);
+        return result;
     }
 }
diff --git a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
index 9a20c3a9b96..349cc395663 100644
--- a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
+++ b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
@@ -46,7 +46,6 @@ import org.apache.shardingsphere.proxy.backend.connector.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.session.ServerPreparedStatementRegistry;
-import org.apache.shardingsphere.proxy.frontend.postgresql.ProxyContextRestorer;
 import org.apache.shardingsphere.proxy.frontend.postgresql.command.PortalContext;
 import org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.Portal;
 import org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.PostgreSQLServerPreparedStatement;
@@ -54,12 +53,11 @@ import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
 import org.apache.shardingsphere.sqltranslator.rule.builder.DefaultSQLTranslatorRuleConfigurationBuilder;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Answers;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
 import org.mockito.internal.configuration.plugins.Plugins;
 import org.mockito.junit.MockitoJUnitRunner;
 
@@ -83,12 +81,13 @@ import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.nullable;
 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.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class PostgreSQLComDescribeExecutorTest extends ProxyContextRestorer {
+public final class PostgreSQLComDescribeExecutorTest {
     
     private static final String DATABASE_NAME = "postgres";
     
@@ -96,9 +95,6 @@ public final class PostgreSQLComDescribeExecutorTest extends ProxyContextRestore
     
     private static final ShardingSphereSQLParserEngine SQL_PARSER_ENGINE = new ShardingSphereSQLParserEngine("PostgreSQL", new CacheOption(2000, 65535L), new CacheOption(128, 1024L), false);
     
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private ContextManager contextManager;
-    
     @Mock
     private PortalContext portalContext;
     
@@ -111,33 +107,6 @@ public final class PostgreSQLComDescribeExecutorTest extends ProxyContextRestore
     @InjectMocks
     private PostgreSQLComDescribeExecutor executor;
     
-    @Before
-    public void setup() {
-        ProxyContext.init(contextManager);
-        when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps().getValue(ConfigurationPropertyKey.SQL_SHOW)).thenReturn(false);
-        when(connectionSession.getDatabaseName()).thenReturn(DATABASE_NAME);
-        when(connectionSession.getServerPreparedStatementRegistry()).thenReturn(new ServerPreparedStatementRegistry());
-        ShardingSphereRuleMetaData globalRuleMetaData = new ShardingSphereRuleMetaData(Arrays.asList(new SQLTranslatorRule(new DefaultSQLTranslatorRuleConfigurationBuilder().build()),
-                new LoggingRule(new DefaultLoggingRuleConfigurationBuilder().build())));
-        when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        when(contextManager.getMetaDataContexts().getMetaData().getDatabases()).thenReturn(Collections.singletonMap(DATABASE_NAME, mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS)));
-        prepareTableMetaData();
-    }
-    
-    private void prepareTableMetaData() {
-        Collection<ShardingSphereColumn> columnMetaData = Arrays.asList(
-                new ShardingSphereColumn("id", Types.INTEGER, true, false, false, true, false),
-                new ShardingSphereColumn("k", Types.INTEGER, true, false, false, true, false),
-                new ShardingSphereColumn("c", Types.CHAR, true, false, false, true, false),
-                new ShardingSphereColumn("pad", Types.CHAR, true, false, false, true, false));
-        ShardingSphereTable table = new ShardingSphereTable(TABLE_NAME, columnMetaData, Collections.emptyList(), Collections.emptyList());
-        when(contextManager.getMetaDataContexts().getMetaData().getDatabase(DATABASE_NAME).getSchema("public").getTable(TABLE_NAME)).thenReturn(table);
-        when(contextManager.getMetaDataContexts().getMetaData().getDatabase(DATABASE_NAME).getProtocolType()).thenReturn(new PostgreSQLDatabaseType());
-        when(contextManager.getMetaDataContexts().getMetaData().getDatabase(DATABASE_NAME).getResourceMetaData().getStorageTypes())
-                .thenReturn(Collections.singletonMap("ds_0", new PostgreSQLDatabaseType()));
-        when(contextManager.getMetaDataContexts().getMetaData().containsDatabase(DATABASE_NAME)).thenReturn(true);
-    }
-    
     @Test
     public void assertDescribePortal() throws SQLException {
         when(packet.getType()).thenReturn('P');
@@ -165,17 +134,23 @@ public final class PostgreSQLComDescribeExecutorTest extends ProxyContextRestore
         }
         SQLStatementContext sqlStatementContext = mock(InsertStatementContext.class);
         when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
-        connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(statementId, new PostgreSQLServerPreparedStatement(sql, sqlStatementContext, parameterTypes));
-        Collection<DatabasePacket<?>> actualPackets = executor.execute();
-        assertThat(actualPackets.size(), is(2));
-        Iterator<DatabasePacket<?>> actualPacketsIterator = actualPackets.iterator();
-        PostgreSQLParameterDescriptionPacket actualParameterDescription = (PostgreSQLParameterDescriptionPacket) actualPacketsIterator.next();
-        PostgreSQLPacketPayload mockPayload = mock(PostgreSQLPacketPayload.class);
-        actualParameterDescription.write(mockPayload);
-        verify(mockPayload).writeInt2(4);
-        verify(mockPayload, times(2)).writeInt4(23);
-        verify(mockPayload, times(2)).writeInt4(18);
-        assertThat(actualPacketsIterator.next(), is(PostgreSQLNoDataPacket.getInstance()));
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabase(DATABASE_NAME);
+            proxyContext.when(() -> ProxyContext.getInstance().getDatabase(DATABASE_NAME)).thenReturn(database);
+            connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(statementId, new PostgreSQLServerPreparedStatement(sql, sqlStatementContext, parameterTypes));
+            Collection<DatabasePacket<?>> actualPackets = executor.execute();
+            assertThat(actualPackets.size(), is(2));
+            Iterator<DatabasePacket<?>> actualPacketsIterator = actualPackets.iterator();
+            PostgreSQLParameterDescriptionPacket actualParameterDescription = (PostgreSQLParameterDescriptionPacket) actualPacketsIterator.next();
+            PostgreSQLPacketPayload mockPayload = mock(PostgreSQLPacketPayload.class);
+            actualParameterDescription.write(mockPayload);
+            verify(mockPayload).writeInt2(4);
+            verify(mockPayload, times(2)).writeInt4(23);
+            verify(mockPayload, times(2)).writeInt4(18);
+            assertThat(actualPacketsIterator.next(), is(PostgreSQLNoDataPacket.getInstance()));
+        }
     }
     
     @SuppressWarnings("rawtypes")
@@ -192,17 +167,23 @@ public final class PostgreSQLComDescribeExecutorTest extends ProxyContextRestore
         }
         SQLStatementContext sqlStatementContext = mock(InsertStatementContext.class);
         when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
-        connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(statementId, new PostgreSQLServerPreparedStatement(sql, sqlStatementContext, parameterTypes));
-        Collection<DatabasePacket<?>> actualPackets = executor.execute();
-        assertThat(actualPackets.size(), is(2));
-        Iterator<DatabasePacket<?>> actualPacketsIterator = actualPackets.iterator();
-        PostgreSQLParameterDescriptionPacket actualParameterDescription = (PostgreSQLParameterDescriptionPacket) actualPacketsIterator.next();
-        PostgreSQLPacketPayload mockPayload = mock(PostgreSQLPacketPayload.class);
-        actualParameterDescription.write(mockPayload);
-        verify(mockPayload).writeInt2(5);
-        verify(mockPayload, times(2)).writeInt4(23);
-        verify(mockPayload, times(3)).writeInt4(18);
-        assertThat(actualPacketsIterator.next(), is(PostgreSQLNoDataPacket.getInstance()));
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabase(DATABASE_NAME);
+            proxyContext.when(() -> ProxyContext.getInstance().getDatabase(DATABASE_NAME)).thenReturn(database);
+            connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(statementId, new PostgreSQLServerPreparedStatement(sql, sqlStatementContext, parameterTypes));
+            Collection<DatabasePacket<?>> actualPackets = executor.execute();
+            assertThat(actualPackets.size(), is(2));
+            Iterator<DatabasePacket<?>> actualPacketsIterator = actualPackets.iterator();
+            PostgreSQLParameterDescriptionPacket actualParameterDescription = (PostgreSQLParameterDescriptionPacket) actualPacketsIterator.next();
+            PostgreSQLPacketPayload mockPayload = mock(PostgreSQLPacketPayload.class);
+            actualParameterDescription.write(mockPayload);
+            verify(mockPayload).writeInt2(5);
+            verify(mockPayload, times(2)).writeInt4(23);
+            verify(mockPayload, times(3)).writeInt4(18);
+            assertThat(actualPacketsIterator.next(), is(PostgreSQLNoDataPacket.getInstance()));
+        }
     }
     
     @SuppressWarnings("rawtypes")
@@ -219,17 +200,23 @@ public final class PostgreSQLComDescribeExecutorTest extends ProxyContextRestore
         }
         SQLStatementContext sqlStatementContext = mock(InsertStatementContext.class);
         when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
-        connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(statementId, new PostgreSQLServerPreparedStatement(sql, sqlStatementContext, parameterTypes));
-        Collection<DatabasePacket<?>> actualPackets = executor.execute();
-        assertThat(actualPackets.size(), is(2));
-        Iterator<DatabasePacket<?>> actualPacketsIterator = actualPackets.iterator();
-        PostgreSQLParameterDescriptionPacket actualParameterDescription = (PostgreSQLParameterDescriptionPacket) actualPacketsIterator.next();
-        PostgreSQLPacketPayload mockPayload = mock(PostgreSQLPacketPayload.class);
-        actualParameterDescription.write(mockPayload);
-        verify(mockPayload).writeInt2(5);
-        verify(mockPayload, times(2)).writeInt4(23);
-        verify(mockPayload, times(3)).writeInt4(18);
-        assertThat(actualPacketsIterator.next(), is(PostgreSQLNoDataPacket.getInstance()));
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabase(DATABASE_NAME);
+            proxyContext.when(() -> ProxyContext.getInstance().getDatabase(DATABASE_NAME)).thenReturn(database);
+            connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(statementId, new PostgreSQLServerPreparedStatement(sql, sqlStatementContext, parameterTypes));
+            Collection<DatabasePacket<?>> actualPackets = executor.execute();
+            assertThat(actualPackets.size(), is(2));
+            Iterator<DatabasePacket<?>> actualPacketsIterator = actualPackets.iterator();
+            PostgreSQLParameterDescriptionPacket actualParameterDescription = (PostgreSQLParameterDescriptionPacket) actualPacketsIterator.next();
+            PostgreSQLPacketPayload mockPayload = mock(PostgreSQLPacketPayload.class);
+            actualParameterDescription.write(mockPayload);
+            verify(mockPayload).writeInt2(5);
+            verify(mockPayload, times(2)).writeInt4(23);
+            verify(mockPayload, times(3)).writeInt4(18);
+            assertThat(actualPacketsIterator.next(), is(PostgreSQLNoDataPacket.getInstance()));
+        }
     }
     
     @SuppressWarnings("rawtypes")
@@ -246,8 +233,14 @@ public final class PostgreSQLComDescribeExecutorTest extends ProxyContextRestore
         }
         SQLStatementContext sqlStatementContext = mock(InsertStatementContext.class);
         when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
-        connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(statementId, new PostgreSQLServerPreparedStatement(sql, sqlStatementContext, parameterTypes));
-        executor.execute();
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabase(DATABASE_NAME);
+            proxyContext.when(() -> ProxyContext.getInstance().getDatabase(DATABASE_NAME)).thenReturn(database);
+            connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(statementId, new PostgreSQLServerPreparedStatement(sql, sqlStatementContext, parameterTypes));
+            executor.execute();
+        }
     }
     
     @SuppressWarnings("rawtypes")
@@ -265,19 +258,25 @@ public final class PostgreSQLComDescribeExecutorTest extends ProxyContextRestore
         }
         SQLStatementContext sqlStatementContext = mock(InsertStatementContext.class);
         when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
-        connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(statementId, new PostgreSQLServerPreparedStatement(sql, sqlStatementContext, parameterTypes));
-        Collection<DatabasePacket<?>> actualPackets = executor.execute();
-        assertThat(actualPackets.size(), is(2));
-        Iterator<DatabasePacket<?>> actualPacketsIterator = actualPackets.iterator();
-        PostgreSQLParameterDescriptionPacket actualParameterDescription = (PostgreSQLParameterDescriptionPacket) actualPacketsIterator.next();
-        PostgreSQLPacketPayload mockPayload = mock(PostgreSQLPacketPayload.class);
-        actualParameterDescription.write(mockPayload);
-        verify(mockPayload).writeInt2(3);
-        verify(mockPayload).writeInt4(23);
-        verify(mockPayload, times(2)).writeInt4(18);
-        DatabasePacket<?> actualRowDescriptionPacket = actualPacketsIterator.next();
-        assertThat(actualRowDescriptionPacket, is(instanceOf(PostgreSQLRowDescriptionPacket.class)));
-        assertRowDescriptions((PostgreSQLRowDescriptionPacket) actualRowDescriptionPacket);
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabase(DATABASE_NAME);
+            proxyContext.when(() -> ProxyContext.getInstance().getDatabase(DATABASE_NAME)).thenReturn(database);
+            connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(statementId, new PostgreSQLServerPreparedStatement(sql, sqlStatementContext, parameterTypes));
+            Collection<DatabasePacket<?>> actualPackets = executor.execute();
+            assertThat(actualPackets.size(), is(2));
+            Iterator<DatabasePacket<?>> actualPacketsIterator = actualPackets.iterator();
+            PostgreSQLParameterDescriptionPacket actualParameterDescription = (PostgreSQLParameterDescriptionPacket) actualPacketsIterator.next();
+            PostgreSQLPacketPayload mockPayload = mock(PostgreSQLPacketPayload.class);
+            actualParameterDescription.write(mockPayload);
+            verify(mockPayload).writeInt2(3);
+            verify(mockPayload).writeInt4(23);
+            verify(mockPayload, times(2)).writeInt4(18);
+            DatabasePacket<?> actualRowDescriptionPacket = actualPacketsIterator.next();
+            assertThat(actualRowDescriptionPacket, is(instanceOf(PostgreSQLRowDescriptionPacket.class)));
+            assertRowDescriptions((PostgreSQLRowDescriptionPacket) actualRowDescriptionPacket);
+        }
     }
     
     private void assertRowDescriptions(final PostgreSQLRowDescriptionPacket actualRowDescriptionPacket) {
@@ -342,33 +341,61 @@ public final class PostgreSQLComDescribeExecutorTest extends ProxyContextRestore
         when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
         prepareJDBCBackendConnection(sql);
         List<PostgreSQLColumnType> parameterTypes = new ArrayList<>(Collections.singleton(PostgreSQLColumnType.POSTGRESQL_TYPE_UNSPECIFIED));
-        connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(statementId, new PostgreSQLServerPreparedStatement(sql, sqlStatementContext, parameterTypes));
-        Collection<DatabasePacket<?>> actual = executor.execute();
-        assertThat(actual.size(), is(2));
-        Iterator<DatabasePacket<?>> actualPacketsIterator = actual.iterator();
-        PostgreSQLParameterDescriptionPacket actualParameterDescription = (PostgreSQLParameterDescriptionPacket) actualPacketsIterator.next();
-        assertThat(actualParameterDescription, instanceOf(PostgreSQLParameterDescriptionPacket.class));
-        PostgreSQLPacketPayload mockPayload = mock(PostgreSQLPacketPayload.class);
-        actualParameterDescription.write(mockPayload);
-        verify(mockPayload).writeInt2(1);
-        verify(mockPayload).writeInt4(PostgreSQLColumnType.POSTGRESQL_TYPE_INT4.getValue());
-        PostgreSQLRowDescriptionPacket actualRowDescription = (PostgreSQLRowDescriptionPacket) actualPacketsIterator.next();
-        List<PostgreSQLColumnDescription> actualColumnDescriptions = getColumnDescriptions(actualRowDescription);
-        List<PostgreSQLColumnDescription> expectedColumnDescriptions = Arrays.asList(
-                new PostgreSQLColumnDescription("id", 1, Types.INTEGER, 11, "int4"),
-                new PostgreSQLColumnDescription("k", 2, Types.INTEGER, 11, "int4"),
-                new PostgreSQLColumnDescription("c", 3, Types.CHAR, 60, "int4"),
-                new PostgreSQLColumnDescription("pad", 4, Types.CHAR, 120, "int4"));
-        for (int i = 0; i < expectedColumnDescriptions.size(); i++) {
-            PostgreSQLColumnDescription expectedColumnDescription = expectedColumnDescriptions.get(i);
-            PostgreSQLColumnDescription actualColumnDescription = actualColumnDescriptions.get(i);
-            assertThat(actualColumnDescription.getColumnName(), is(expectedColumnDescription.getColumnName()));
-            assertThat(actualColumnDescription.getColumnIndex(), is(expectedColumnDescription.getColumnIndex()));
-            assertThat(actualColumnDescription.getColumnLength(), is(expectedColumnDescription.getColumnLength()));
-            assertThat(actualColumnDescription.getTypeOID(), is(expectedColumnDescription.getTypeOID()));
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabase(DATABASE_NAME);
+            proxyContext.when(() -> ProxyContext.getInstance().getDatabase(DATABASE_NAME)).thenReturn(database);
+            connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(statementId, new PostgreSQLServerPreparedStatement(sql, sqlStatementContext, parameterTypes));
+            Collection<DatabasePacket<?>> actual = executor.execute();
+            assertThat(actual.size(), is(2));
+            Iterator<DatabasePacket<?>> actualPacketsIterator = actual.iterator();
+            PostgreSQLParameterDescriptionPacket actualParameterDescription = (PostgreSQLParameterDescriptionPacket) actualPacketsIterator.next();
+            assertThat(actualParameterDescription, instanceOf(PostgreSQLParameterDescriptionPacket.class));
+            PostgreSQLPacketPayload mockPayload = mock(PostgreSQLPacketPayload.class);
+            actualParameterDescription.write(mockPayload);
+            verify(mockPayload).writeInt2(1);
+            verify(mockPayload).writeInt4(PostgreSQLColumnType.POSTGRESQL_TYPE_INT4.getValue());
+            PostgreSQLRowDescriptionPacket actualRowDescription = (PostgreSQLRowDescriptionPacket) actualPacketsIterator.next();
+            List<PostgreSQLColumnDescription> actualColumnDescriptions = getColumnDescriptions(actualRowDescription);
+            List<PostgreSQLColumnDescription> expectedColumnDescriptions = Arrays.asList(
+                    new PostgreSQLColumnDescription("id", 1, Types.INTEGER, 11, "int4"),
+                    new PostgreSQLColumnDescription("k", 2, Types.INTEGER, 11, "int4"),
+                    new PostgreSQLColumnDescription("c", 3, Types.CHAR, 60, "int4"),
+                    new PostgreSQLColumnDescription("pad", 4, Types.CHAR, 120, "int4"));
+            for (int i = 0; i < expectedColumnDescriptions.size(); i++) {
+                PostgreSQLColumnDescription expectedColumnDescription = expectedColumnDescriptions.get(i);
+                PostgreSQLColumnDescription actualColumnDescription = actualColumnDescriptions.get(i);
+                assertThat(actualColumnDescription.getColumnName(), is(expectedColumnDescription.getColumnName()));
+                assertThat(actualColumnDescription.getColumnIndex(), is(expectedColumnDescription.getColumnIndex()));
+                assertThat(actualColumnDescription.getColumnLength(), is(expectedColumnDescription.getColumnLength()));
+                assertThat(actualColumnDescription.getTypeOID(), is(expectedColumnDescription.getTypeOID()));
+            }
         }
     }
     
+    private ContextManager mockContextManager() {
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        when(result.getMetaDataContexts().getMetaData().getProps().getValue(ConfigurationPropertyKey.SQL_SHOW)).thenReturn(false);
+        when(connectionSession.getDatabaseName()).thenReturn(DATABASE_NAME);
+        when(connectionSession.getServerPreparedStatementRegistry()).thenReturn(new ServerPreparedStatementRegistry());
+        ShardingSphereRuleMetaData globalRuleMetaData = new ShardingSphereRuleMetaData(Arrays.asList(new SQLTranslatorRule(new DefaultSQLTranslatorRuleConfigurationBuilder().build()),
+                new LoggingRule(new DefaultLoggingRuleConfigurationBuilder().build())));
+        when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
+        when(result.getMetaDataContexts().getMetaData().getDatabases()).thenReturn(Collections.singletonMap(DATABASE_NAME, mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS)));
+        Collection<ShardingSphereColumn> columnMetaData = Arrays.asList(
+                new ShardingSphereColumn("id", Types.INTEGER, true, false, false, true, false),
+                new ShardingSphereColumn("k", Types.INTEGER, true, false, false, true, false),
+                new ShardingSphereColumn("c", Types.CHAR, true, false, false, true, false),
+                new ShardingSphereColumn("pad", Types.CHAR, true, false, false, true, false));
+        ShardingSphereTable table = new ShardingSphereTable(TABLE_NAME, columnMetaData, Collections.emptyList(), Collections.emptyList());
+        when(result.getMetaDataContexts().getMetaData().getDatabase(DATABASE_NAME).getSchema("public").getTable(TABLE_NAME)).thenReturn(table);
+        when(result.getMetaDataContexts().getMetaData().getDatabase(DATABASE_NAME).getProtocolType()).thenReturn(new PostgreSQLDatabaseType());
+        when(result.getMetaDataContexts().getMetaData().getDatabase(DATABASE_NAME).getResourceMetaData().getStorageTypes())
+                .thenReturn(Collections.singletonMap("ds_0", new PostgreSQLDatabaseType()));
+        return result;
+    }
+    
     private void prepareJDBCBackendConnection(final String sql) throws SQLException {
         BackendConnection backendConnection = mock(BackendConnection.class);
         Connection connection = mock(Connection.class, RETURNS_DEEP_STUBS);
diff --git a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java
index 42f6858b6cc..33d421af973 100644
--- a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java
+++ b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java
@@ -34,16 +34,15 @@ import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.distsql.DistSQLStatementContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.session.ServerPreparedStatementRegistry;
-import org.apache.shardingsphere.proxy.frontend.postgresql.ProxyContextRestorer;
 import org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.PostgreSQLServerPreparedStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.EmptyStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.dml.PostgreSQLInsertStatement;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Answers;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
 import org.mockito.internal.configuration.plugins.Plugins;
 import org.mockito.junit.MockitoJUnitRunner;
 
@@ -54,12 +53,13 @@ import java.util.Collections;
 import static org.hamcrest.CoreMatchers.instanceOf;
 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;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class PostgreSQLComParseExecutorTest extends ProxyContextRestorer {
-    
-    private final ShardingSphereRuleMetaData globalRuleMetaData = new ShardingSphereRuleMetaData(Collections.singleton(new SQLParserRule(new DefaultSQLParserRuleConfigurationBuilder().build())));
+public final class PostgreSQLComParseExecutorTest {
     
     @Mock
     private PostgreSQLComParsePacket parsePacket;
@@ -70,13 +70,10 @@ public final class PostgreSQLComParseExecutorTest extends ProxyContextRestorer {
     @InjectMocks
     private PostgreSQLComParseExecutor executor;
     
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private ContextManager mockedContextManager;
-    
     @Before
     public void setup() {
-        ProxyContext.init(mockedContextManager);
         when(connectionSession.getServerPreparedStatementRegistry()).thenReturn(new ServerPreparedStatementRegistry());
+        when(connectionSession.getDatabaseName()).thenReturn("db");
     }
     
     @Test
@@ -85,19 +82,18 @@ public final class PostgreSQLComParseExecutorTest extends ProxyContextRestorer {
         final String statementId = "S_1";
         when(parsePacket.getSql()).thenReturn(expectedSQL);
         when(parsePacket.getStatementId()).thenReturn(statementId);
-        when(connectionSession.getDatabaseName()).thenReturn("db");
-        when(mockedContextManager.getMetaDataContexts().getMetaData().getDatabase("db").getResourceMetaData().getStorageTypes())
-                .thenReturn(Collections.singletonMap("ds_0", new PostgreSQLDatabaseType()));
-        when(mockedContextManager.getMetaDataContexts().getMetaData().getDatabase("db").getProtocolType()).thenReturn(new PostgreSQLDatabaseType());
-        when(mockedContextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        Collection<DatabasePacket<?>> actualPackets = executor.execute();
-        assertThat(actualPackets.size(), is(1));
-        assertThat(actualPackets.iterator().next(), is(PostgreSQLParseCompletePacket.getInstance()));
-        PostgreSQLServerPreparedStatement actualPreparedStatement = connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(statementId);
-        assertThat(actualPreparedStatement.getSqlStatementContext(), instanceOf(CommonSQLStatementContext.class));
-        assertThat(actualPreparedStatement.getSqlStatementContext().getSqlStatement(), instanceOf(EmptyStatement.class));
-        assertThat(actualPreparedStatement.getSql(), is(expectedSQL));
-        assertThat(actualPreparedStatement.getParameterTypes(), is(Collections.emptyList()));
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            Collection<DatabasePacket<?>> actualPackets = executor.execute();
+            assertThat(actualPackets.size(), is(1));
+            assertThat(actualPackets.iterator().next(), is(PostgreSQLParseCompletePacket.getInstance()));
+            PostgreSQLServerPreparedStatement actualPreparedStatement = connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(statementId);
+            assertThat(actualPreparedStatement.getSqlStatementContext(), instanceOf(CommonSQLStatementContext.class));
+            assertThat(actualPreparedStatement.getSqlStatementContext().getSqlStatement(), instanceOf(EmptyStatement.class));
+            assertThat(actualPreparedStatement.getSql(), is(expectedSQL));
+            assertThat(actualPreparedStatement.getParameterTypes(), is(Collections.emptyList()));
+        }
     }
     
     @Test
@@ -108,21 +104,20 @@ public final class PostgreSQLComParseExecutorTest extends ProxyContextRestorer {
         when(parsePacket.getSql()).thenReturn(rawSQL);
         when(parsePacket.getStatementId()).thenReturn(statementId);
         when(parsePacket.readParameterTypes()).thenReturn(Collections.singletonList(PostgreSQLColumnType.POSTGRESQL_TYPE_INT4));
-        when(mockedContextManager.getMetaDataContexts().getMetaData().getDatabase("db").getResourceMetaData().getStorageTypes())
-                .thenReturn(Collections.singletonMap("ds_0", new PostgreSQLDatabaseType()));
-        when(mockedContextManager.getMetaDataContexts().getMetaData().getDatabase("db").getProtocolType()).thenReturn(new PostgreSQLDatabaseType());
-        when(mockedContextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
         when(connectionSession.getDefaultDatabaseName()).thenReturn("db");
-        when(connectionSession.getDatabaseName()).thenReturn("db");
         setConnectionSession();
-        Collection<DatabasePacket<?>> actualPackets = executor.execute();
-        assertThat(actualPackets.size(), is(1));
-        assertThat(actualPackets.iterator().next(), is(PostgreSQLParseCompletePacket.getInstance()));
-        PostgreSQLServerPreparedStatement actualPreparedStatement = connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(statementId);
-        assertThat(actualPreparedStatement.getSqlStatementContext(), instanceOf(InsertStatementContext.class));
-        assertThat(actualPreparedStatement.getSqlStatementContext().getSqlStatement(), instanceOf(PostgreSQLInsertStatement.class));
-        assertThat(actualPreparedStatement.getSql(), is(expectedSQL));
-        assertThat(actualPreparedStatement.getParameterTypes(), is(Arrays.asList(PostgreSQLColumnType.POSTGRESQL_TYPE_INT4, PostgreSQLColumnType.POSTGRESQL_TYPE_UNSPECIFIED)));
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            Collection<DatabasePacket<?>> actualPackets = executor.execute();
+            assertThat(actualPackets.size(), is(1));
+            assertThat(actualPackets.iterator().next(), is(PostgreSQLParseCompletePacket.getInstance()));
+            PostgreSQLServerPreparedStatement actualPreparedStatement = connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(statementId);
+            assertThat(actualPreparedStatement.getSqlStatementContext(), instanceOf(InsertStatementContext.class));
+            assertThat(actualPreparedStatement.getSqlStatementContext().getSqlStatement(), instanceOf(PostgreSQLInsertStatement.class));
+            assertThat(actualPreparedStatement.getSql(), is(expectedSQL));
+            assertThat(actualPreparedStatement.getParameterTypes(), is(Arrays.asList(PostgreSQLColumnType.POSTGRESQL_TYPE_INT4, PostgreSQLColumnType.POSTGRESQL_TYPE_UNSPECIFIED)));
+        }
     }
     
     @SneakyThrows(ReflectiveOperationException.class)
@@ -136,18 +131,26 @@ public final class PostgreSQLComParseExecutorTest extends ProxyContextRestorer {
         String statementId = "";
         when(parsePacket.getSql()).thenReturn(sql);
         when(parsePacket.getStatementId()).thenReturn(statementId);
-        when(connectionSession.getDatabaseName()).thenReturn("db");
-        when(mockedContextManager.getMetaDataContexts().getMetaData().getDatabase("db").getResourceMetaData().getStorageTypes())
-                .thenReturn(Collections.singletonMap("ds_0", new PostgreSQLDatabaseType()));
-        when(mockedContextManager.getMetaDataContexts().getMetaData().getDatabase("db").getProtocolType()).thenReturn(new PostgreSQLDatabaseType());
-        when(mockedContextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(globalRuleMetaData);
-        Collection<DatabasePacket<?>> actualPackets = executor.execute();
-        assertThat(actualPackets.size(), is(1));
-        assertThat(actualPackets.iterator().next(), is(PostgreSQLParseCompletePacket.getInstance()));
-        PostgreSQLServerPreparedStatement actualPreparedStatement = connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(statementId);
-        assertThat(actualPreparedStatement.getSql(), is(sql));
-        assertThat(actualPreparedStatement.getSqlStatementContext(), instanceOf(DistSQLStatementContext.class));
-        assertThat(actualPreparedStatement.getSqlStatementContext().getSqlStatement(), instanceOf(ShowDistVariableStatement.class));
-        assertThat(actualPreparedStatement.getParameterTypes(), is(Collections.emptyList()));
+        ContextManager contextManager = mockContextManager();
+        try (MockedStatic<ProxyContext> proxyContext = mockStatic(ProxyContext.class, RETURNS_DEEP_STUBS)) {
+            proxyContext.when(() -> ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+            Collection<DatabasePacket<?>> actualPackets = executor.execute();
+            assertThat(actualPackets.size(), is(1));
+            assertThat(actualPackets.iterator().next(), is(PostgreSQLParseCompletePacket.getInstance()));
+            PostgreSQLServerPreparedStatement actualPreparedStatement = connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(statementId);
+            assertThat(actualPreparedStatement.getSql(), is(sql));
+            assertThat(actualPreparedStatement.getSqlStatementContext(), instanceOf(DistSQLStatementContext.class));
+            assertThat(actualPreparedStatement.getSqlStatementContext().getSqlStatement(), instanceOf(ShowDistVariableStatement.class));
+            assertThat(actualPreparedStatement.getParameterTypes(), is(Collections.emptyList()));
+        }
+    }
+    
+    private ContextManager mockContextManager() {
+        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        when(result.getMetaDataContexts().getMetaData().getDatabase("db").getResourceMetaData().getStorageTypes()).thenReturn(Collections.singletonMap("ds_0", new PostgreSQLDatabaseType()));
+        when(result.getMetaDataContexts().getMetaData().getDatabase("db").getProtocolType()).thenReturn(new PostgreSQLDatabaseType());
+        when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData())
+                .thenReturn(new ShardingSphereRuleMetaData(Collections.singleton(new SQLParserRule(new DefaultSQLParserRuleConfigurationBuilder().build()))));
+        return result;
     }
 }