You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2022/12/22 14:23:58 UTC

[shardingsphere] branch master updated: Use InstanceField and FieldReader to instead of reflection in test cases (#23041)

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

sunnianjun 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 45248a86823 Use InstanceField and FieldReader to instead of reflection in test cases (#23041)
45248a86823 is described below

commit 45248a86823e536ebb6fb8c1519a21d174bcfe5f
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Thu Dec 22 22:23:51 2022 +0800

    Use InstanceField and FieldReader to instead of reflection in test cases (#23041)
    
    * Refactor BatchPreparedStatementExecutorTest
    
    * Refactor ShardingSphereConnectionTest
    
    * Refactor ShardingSphereDataSourceTest
    
    * Refactor PostgreSQLComParseExecutorTest
    
    * Refactor OpenGaussFrontendEngineTest
    
    * Refactor SQLParserEngineTest
    
    * Refactor OpenGaussAdminExecutorFactoryTest
    
    * Refactor SchemaMetaDataRegistrySubscriberTest
    
    * Refactor PostgreSQLBatchedStatementsExecutorTest
    
    * Refactor ParseTreeCacheLoaderTest
    
    * Refactor RunnerParameters
    
    * Refactor PostgreSQLComDescribeExecutorTest
    
    * Refactor BackendConnectionTest
    
    * Refactor PostgreSQLComDescribeExecutorTest
    
    * Refactor PostgreSQLAuthenticationEngineTest
    
    * Refactor MockConnectionUtil
    
    * Refactor PostgreSQLFrontendEngineTest
    
    * Refactor OKProxyStateTest
    
    * Refactor OpenGaussErrorPacketFactoryTest
    
    * Refactor OpenGaussAuthenticationEngineTest
    
    * Refactor MySQLAuthenticationEngineTest
    
    * Refactor MySQLAuthenticationEngineTest
    
    * Refactor MySQLAuthenticationEngineTest
    
    * Refactor BackendTransactionManagerTest
    
    * Refactor ShowProcessListExecutorTest
    
    * Refactor UnicastDatabaseBackendHandlerTest
    
    * Refactor AlterStorageUnitBackendHandlerTest
    
    * Refactor RegisterStorageUnitBackendHandlerTest
    
    * Refactor TransactionBackendHandlerFactoryTest
    
    * Refactor MySQLFrontendEngineTest
---
 .../connection/ShardingSphereConnectionTest.java   |  8 ++--
 .../datasource/ShardingSphereDataSourceTest.java   | 10 ++---
 .../SchemaMetaDataRegistrySubscriberTest.java      | 10 ++---
 .../cluster/zookeeper/ZookeeperRepositoryTest.java | 24 ++++------
 .../jdbc/DatabaseCommunicationEngineTest.java      |  7 ++-
 .../jdbc/connection/BackendConnectionTest.java     | 51 ++++++++--------------
 .../jdbc/connection/MockConnectionUtil.java        |  8 ++--
 .../transaction/BackendTransactionManagerTest.java |  6 +--
 .../executor/ShowProcessListExecutorTest.java      |  8 ++--
 .../OpenGaussAdminExecutorFactoryTest.java         |  6 +--
 .../impl/UnicastDatabaseBackendHandlerTest.java    | 12 +++--
 .../AlterStorageUnitBackendHandlerTest.java        |  6 +--
 .../RegisterStorageUnitBackendHandlerTest.java     |  6 +--
 .../TransactionBackendHandlerFactoryTest.java      | 21 ++++-----
 .../frontend/state/impl/OKProxyStateTest.java      |  9 ++--
 .../frontend/mysql/MySQLFrontendEngineTest.java    |  7 +--
 .../MySQLAuthenticationEngineTest.java             | 35 ++++++---------
 .../opengauss/OpenGaussFrontendEngineTest.java     |  9 ++--
 .../OpenGaussAuthenticationEngineTest.java         | 28 +++++-------
 .../err/OpenGaussErrorPacketFactoryTest.java       |  8 ++--
 .../postgresql/PostgreSQLFrontendEngineTest.java   |  6 +--
 .../PostgreSQLAuthenticationEngineTest.java        | 16 +++----
 .../PostgreSQLCommandExecutorFactoryTest.java      | 10 ++---
 .../PostgreSQLBatchedStatementsExecutorTest.java   |  7 ++-
 .../PostgreSQLComDescribeExecutorTest.java         | 14 +++---
 .../parse/PostgreSQLComParseExecutorTest.java      |  8 ++--
 .../sql/parser/api/SQLParserEngineTest.java        | 10 ++---
 .../database/cache/ParseTreeCacheLoaderTest.java   |  9 ++--
 .../framework/runner/param/RunnerParameters.java   |  6 +--
 29 files changed, 133 insertions(+), 232 deletions(-)

diff --git a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
index 0ca08fd98a5..e9fa88b97de 100644
--- a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
+++ b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
@@ -32,17 +32,17 @@ import org.apache.shardingsphere.transaction.rule.TransactionRule;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.internal.util.reflection.InstanceField;
 
 import javax.sql.DataSource;
-import java.lang.reflect.Field;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.Collections;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
-import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
@@ -165,11 +165,9 @@ public final class ShardingSphereConnectionTest {
     
     @SneakyThrows(ReflectiveOperationException.class)
     private ConnectionManager mockConnectionManager(final ConnectionTransaction connectionTransaction) {
-        Field field = connection.getClass().getDeclaredField("connectionManager");
-        field.setAccessible(true);
         ConnectionManager result = mock(ConnectionManager.class);
         when(result.getConnectionTransaction()).thenReturn(connectionTransaction);
-        field.set(connection, result);
+        new InstanceField(connection.getClass().getDeclaredField("connectionManager"), connection).set(result);
         return result;
     }
     
diff --git a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSourceTest.java b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSourceTest.java
index 9010abc004a..7c649d01655 100644
--- a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSourceTest.java
+++ b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSourceTest.java
@@ -32,19 +32,19 @@ import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.apache.shardingsphere.transaction.core.TransactionTypeHolder;
 import org.junit.After;
 import org.junit.Test;
+import org.mockito.internal.util.reflection.FieldReader;
 
 import javax.sql.DataSource;
-import java.lang.reflect.Field;
 import java.sql.Connection;
 import java.sql.SQLException;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Properties;
-import java.util.Arrays;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNotNull;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
@@ -140,9 +140,7 @@ public final class ShardingSphereDataSourceTest {
     
     @SneakyThrows(ReflectiveOperationException.class)
     private ContextManager getContextManager(final ShardingSphereDataSource dataSource) {
-        Field field = ShardingSphereDataSource.class.getDeclaredField("contextManager");
-        field.setAccessible(true);
-        return (ContextManager) field.get(dataSource);
+        return (ContextManager) new FieldReader(dataSource, ShardingSphereDataSource.class.getDeclaredField("contextManager")).read();
     }
     
     private DataSource createHikariDataSource() {
diff --git a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriberTest.java b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriberTest.java
index 364221be5de..c0f04489718 100644
--- a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriberTest.java
+++ b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriberTest.java
@@ -17,13 +17,13 @@
 
 package org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.subscriber;
 
-import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
 import org.apache.shardingsphere.infra.metadata.database.schema.event.AddSchemaEvent;
 import org.apache.shardingsphere.infra.metadata.database.schema.event.AlterSchemaEvent;
 import org.apache.shardingsphere.infra.metadata.database.schema.event.DropSchemaEvent;
 import org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
+import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import org.apache.shardingsphere.mode.metadata.persist.service.DatabaseMetaDataPersistService;
 import org.apache.shardingsphere.mode.metadata.persist.service.schema.TableMetaDataPersistService;
 import org.apache.shardingsphere.mode.metadata.persist.service.schema.ViewMetaDataPersistService;
@@ -32,14 +32,14 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.InstanceField;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
 import java.util.Collections;
 
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -54,9 +54,7 @@ public final class SchemaMetaDataRegistrySubscriberTest {
     @Before
     public void setUp() throws ReflectiveOperationException {
         schemaMetaDataRegistrySubscriber = new SchemaMetaDataRegistrySubscriber(mock(ClusterPersistRepository.class), new EventBusContext());
-        Field field = schemaMetaDataRegistrySubscriber.getClass().getDeclaredField("persistService");
-        field.setAccessible(true);
-        field.set(schemaMetaDataRegistrySubscriber, persistService);
+        new InstanceField(schemaMetaDataRegistrySubscriber.getClass().getDeclaredField("persistService"), schemaMetaDataRegistrySubscriber).set(persistService);
     }
     
     @Test
diff --git a/mode/type/cluster/repository/provider/zookeeper/src/test/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/ZookeeperRepositoryTest.java b/mode/type/cluster/repository/provider/zookeeper/src/test/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/ZookeeperRepositoryTest.java
index cc0248ed8c7..490c73babba 100644
--- a/mode/type/cluster/repository/provider/zookeeper/src/test/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/ZookeeperRepositoryTest.java
+++ b/mode/type/cluster/repository/provider/zookeeper/src/test/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/ZookeeperRepositoryTest.java
@@ -48,10 +48,10 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.AdditionalAnswers;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.InstanceField;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.mockito.stubbing.VoidAnswer1;
 
-import java.lang.reflect.Field;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Collections;
@@ -65,9 +65,9 @@ import java.util.concurrent.TimeUnit;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
@@ -124,11 +124,9 @@ public final class ZookeeperRepositoryTest {
         mockDistributedLockHolder();
     }
     
-    @SneakyThrows({ReflectiveOperationException.class, InterruptedException.class})
+    @SneakyThrows({NoSuchFieldException.class, InterruptedException.class})
     private void mockClient() {
-        Field builderFiled = ZookeeperRepository.class.getDeclaredField("builder");
-        builderFiled.setAccessible(true);
-        builderFiled.set(REPOSITORY, builder);
+        new InstanceField(ZookeeperRepository.class.getDeclaredField("builder"), REPOSITORY).set(builder);
         when(builder.connectString(anyString())).thenReturn(builder);
         when(builder.retryPolicy(any(RetryPolicy.class))).thenReturn(builder);
         when(builder.ensembleTracker(anyBoolean())).thenReturn(builder);
@@ -141,15 +139,11 @@ public final class ZookeeperRepositoryTest {
         when(client.blockUntilConnected(anyInt(), eq(TimeUnit.MILLISECONDS))).thenReturn(true);
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private void mockDistributedLockHolder() {
-        Field distributedLockHolderField = ZookeeperRepository.class.getDeclaredField("distributedLockHolder");
-        distributedLockHolderField.setAccessible(true);
         DistributedLockHolder distributedLockHolder = new DistributedLockHolder("Zookeeper", client, new ZookeeperProperties(new Properties()));
-        Field locksFiled = DistributedLockHolder.class.getDeclaredField("locks");
-        locksFiled.setAccessible(true);
-        locksFiled.set(distributedLockHolder, Collections.singletonMap("/locks/glock", mock(ZookeeperDistributedLock.class)));
-        distributedLockHolderField.set(REPOSITORY, distributedLockHolder);
+        new InstanceField(DistributedLockHolder.class.getDeclaredField("locks"), distributedLockHolder).set(Collections.singletonMap("/locks/glock", mock(ZookeeperDistributedLock.class)));
+        new InstanceField(ZookeeperRepository.class.getDeclaredField("distributedLockHolder"), REPOSITORY).set(distributedLockHolder);
     }
     
     private void mockBuilder() {
@@ -243,11 +237,9 @@ public final class ZookeeperRepositoryTest {
     
     @SneakyThrows(ReflectiveOperationException.class)
     private void mockCache(final String key) {
-        Field cachesFiled = ZookeeperRepository.class.getDeclaredField("caches");
-        cachesFiled.setAccessible(true);
         Map<String, CuratorCache> caches = new HashMap<>();
         caches.put(key, curatorCache);
-        cachesFiled.set(REPOSITORY, caches);
+        new InstanceField(ZookeeperRepository.class.getDeclaredField("caches"), REPOSITORY).set(caches);
         when(curatorCache.listenable()).thenReturn(listenable);
     }
     
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/DatabaseCommunicationEngineTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/DatabaseCommunicationEngineTest.java
index 5d52751e51e..cd9e1768f92 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/DatabaseCommunicationEngineTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/DatabaseCommunicationEngineTest.java
@@ -65,6 +65,7 @@ import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.MockedStatic;
 import org.mockito.internal.configuration.plugins.Plugins;
+import org.mockito.internal.util.reflection.FieldReader;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.mockito.plugins.MemberAccessor;
 
@@ -291,10 +292,8 @@ public final class DatabaseCommunicationEngineTest extends ProxyContextRestorer
     }
     
     @SuppressWarnings("unchecked")
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private <T> T getField(final DatabaseCommunicationEngine target, final String fieldName) {
-        Field field = DatabaseCommunicationEngine.class.getDeclaredField(fieldName);
-        field.setAccessible(true);
-        return (T) field.get(target);
+        return (T) new FieldReader(target, DatabaseCommunicationEngine.class.getDeclaredField(fieldName)).read();
     }
 }
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/BackendConnectionTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/BackendConnectionTest.java
index 7ab6ffdf7cc..e51236b61f7 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/BackendConnectionTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/BackendConnectionTest.java
@@ -47,6 +47,8 @@ import org.junit.runner.RunWith;
 import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.MockedStatic;
+import org.mockito.internal.util.reflection.FieldReader;
+import org.mockito.internal.util.reflection.InstanceField;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.lang.reflect.Field;
@@ -131,19 +133,15 @@ public final class BackendConnectionTest extends ProxyContextRestorer {
         return mock(ShardingSphereRuleMetaData.class);
     }
     
-    private void setBackendDataSource() throws ReflectiveOperationException {
-        Field field = ProxyContext.getInstance().getClass().getDeclaredField("backendDataSource");
-        field.setAccessible(true);
-        field.set(ProxyContext.getInstance(), backendDataSource);
+    private void setBackendDataSource() throws NoSuchFieldException {
+        new InstanceField(ProxyContext.getInstance().getClass().getDeclaredField("backendDataSource"), ProxyContext.getInstance()).set(backendDataSource);
     }
     
     @After
     public void clean() throws ReflectiveOperationException {
         Field field = ProxyContext.getInstance().getClass().getDeclaredField("backendDataSource");
-        field.setAccessible(true);
-        Class<?> clazz = field.getType();
-        Object datasource = clazz.getDeclaredConstructor().newInstance();
-        field.set(ProxyContext.getInstance(), datasource);
+        Object datasource = field.getType().getDeclaredConstructor().newInstance();
+        new InstanceField(field, ProxyContext.getInstance()).set(datasource);
     }
     
     @Test
@@ -193,9 +191,7 @@ public final class BackendConnectionTest extends ProxyContextRestorer {
         ConnectionPostProcessor connectionPostProcessor = mock(ConnectionPostProcessor.class);
         Collection<ConnectionPostProcessor> connectionPostProcessors = new LinkedList<>();
         connectionPostProcessors.add(connectionPostProcessor);
-        Field field = BackendConnection.class.getDeclaredField("connectionPostProcessors");
-        field.setAccessible(true);
-        field.set(backendConnection, connectionPostProcessors);
+        new InstanceField(BackendConnection.class.getDeclaredField("connectionPostProcessors"), backendConnection).set(connectionPostProcessors);
     }
     
     @Test
@@ -227,10 +223,8 @@ public final class BackendConnectionTest extends ProxyContextRestorer {
     
     @SuppressWarnings("unchecked")
     @Test
-    public void assertCloseConnectionsCorrectlyWhenNotForceRollback() throws NoSuchFieldException, IllegalAccessException, SQLException {
-        Field field = BackendConnection.class.getDeclaredField("cachedConnections");
-        field.setAccessible(true);
-        Multimap<String, Connection> cachedConnections = (Multimap<String, Connection>) field.get(backendConnection);
+    public void assertCloseConnectionsCorrectlyWhenNotForceRollback() throws NoSuchFieldException, SQLException {
+        Multimap<String, Connection> cachedConnections = (Multimap<String, Connection>) new FieldReader(backendConnection, BackendConnection.class.getDeclaredField("cachedConnections")).read();
         Connection connection = prepareCachedConnections();
         cachedConnections.put("ignoredDataSourceName", connection);
         backendConnection.closeConnections(false);
@@ -322,32 +316,27 @@ public final class BackendConnectionTest extends ProxyContextRestorer {
     }
     
     @SuppressWarnings("unchecked")
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private void assertConnectionsCached(final String dataSourceName, final Collection<Connection> connections) {
-        Field field = BackendConnection.class.getDeclaredField("cachedConnections");
-        field.setAccessible(true);
-        Multimap<String, Connection> cachedConnections = (Multimap<String, Connection>) field.get(backendConnection);
+        Multimap<String, Connection> cachedConnections = (Multimap<String, Connection>) new FieldReader(backendConnection, BackendConnection.class.getDeclaredField("cachedConnections")).read();
         assertTrue(cachedConnections.containsKey(dataSourceName));
         assertArrayEquals(cachedConnections.get(dataSourceName).toArray(), connections.toArray());
     }
     
     @SuppressWarnings("unchecked")
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private Connection prepareCachedConnections() {
-        Field field = BackendConnection.class.getDeclaredField("cachedConnections");
-        field.setAccessible(true);
-        Multimap<String, Connection> cachedConnections = (Multimap<String, Connection>) field.get(backendConnection);
+        Multimap<String, Connection> cachedConnections = (Multimap<String, Connection>) new FieldReader(backendConnection, BackendConnection.class.getDeclaredField("cachedConnections")).read();
         Connection connection = mock(Connection.class);
         cachedConnections.put("ignoredDataSourceName", connection);
         return connection;
     }
     
     @SuppressWarnings("unchecked")
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private void verifyConnectionPostProcessorsEmpty() {
-        Field field = BackendConnection.class.getDeclaredField("connectionPostProcessors");
-        field.setAccessible(true);
-        Collection<ConnectionPostProcessor> connectionPostProcessors = (Collection<ConnectionPostProcessor>) field.get(backendConnection);
+        Collection<ConnectionPostProcessor> connectionPostProcessors = (Collection<ConnectionPostProcessor>) new FieldReader(
+                backendConnection, BackendConnection.class.getDeclaredField("connectionPostProcessors")).read();
         assertTrue(connectionPostProcessors.isEmpty());
     }
     
@@ -405,17 +394,13 @@ public final class BackendConnectionTest extends ProxyContextRestorer {
     @SuppressWarnings("unchecked")
     @SneakyThrows(ReflectiveOperationException.class)
     private Collection<ProxyBackendHandler> getDatabaseCommunicationEngines() {
-        Field field = BackendConnection.class.getDeclaredField("backendHandlers");
-        field.setAccessible(true);
-        return (Collection<ProxyBackendHandler>) field.get(backendConnection);
+        return (Collection<ProxyBackendHandler>) new FieldReader(backendConnection, BackendConnection.class.getDeclaredField("backendHandlers")).read();
     }
     
     @SuppressWarnings("unchecked")
     @SneakyThrows(ReflectiveOperationException.class)
     private Collection<ProxyBackendHandler> getInUseDatabaseCommunicationEngines() {
-        Field field = BackendConnection.class.getDeclaredField("inUseBackendHandlers");
-        field.setAccessible(true);
-        return (Collection<ProxyBackendHandler>) field.get(backendConnection);
+        return (Collection<ProxyBackendHandler>) new FieldReader(backendConnection, BackendConnection.class.getDeclaredField("inUseBackendHandlers")).read();
     }
     
     @Test
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/MockConnectionUtil.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/MockConnectionUtil.java
index e8046efac76..4a2dc471e87 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/MockConnectionUtil.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/MockConnectionUtil.java
@@ -23,8 +23,8 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.proxy.backend.communication.BackendConnection;
+import org.mockito.internal.util.reflection.InstanceField;
 
-import java.lang.reflect.Field;
 import java.sql.Connection;
 import java.util.ArrayList;
 import java.util.List;
@@ -44,13 +44,11 @@ final class MockConnectionUtil {
      * @param dataSourceName datasource name
      * @param connectionSize connection size
      */
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     static void setCachedConnections(final BackendConnection backendConnection, final String dataSourceName, final int connectionSize) {
         Multimap<String, Connection> cachedConnections = HashMultimap.create();
         cachedConnections.putAll(backendConnection.getConnectionSession().getDatabaseName() + "." + dataSourceName, mockNewConnections(connectionSize));
-        Field field = backendConnection.getClass().getDeclaredField("cachedConnections");
-        field.setAccessible(true);
-        field.set(backendConnection, cachedConnections);
+        new InstanceField(backendConnection.getClass().getDeclaredField("cachedConnections"), backendConnection).set(cachedConnections);
     }
     
     /**
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManagerTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManagerTest.java
index 7221306dac8..9ac343ddcfe 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManagerTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManagerTest.java
@@ -35,9 +35,9 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.InstanceField;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
 import java.sql.SQLException;
 
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
@@ -172,8 +172,6 @@ public final class BackendTransactionManagerTest extends ProxyContextRestorer {
     
     @SneakyThrows(ReflectiveOperationException.class)
     private void setLocalTransactionManager() {
-        Field field = BackendTransactionManager.class.getDeclaredField("localTransactionManager");
-        field.setAccessible(true);
-        field.set(backendTransactionManager, localTransactionManager);
+        new InstanceField(BackendTransactionManager.class.getDeclaredField("localTransactionManager"), backendTransactionManager).set(localTransactionManager);
     }
 }
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/mysql/executor/ShowProcessListExecutorTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/mysql/executor/ShowProcessListExecutorTest.java
index 4cb306c4ed0..77f4fef8af2 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/mysql/executor/ShowProcessListExecutorTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/mysql/executor/ShowProcessListExecutorTest.java
@@ -27,8 +27,8 @@ 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.internal.util.reflection.InstanceField;
 
-import java.lang.reflect.Field;
 import java.sql.SQLException;
 import java.util.Collections;
 
@@ -48,9 +48,7 @@ public final class ShowProcessListExecutorTest extends ProxyContextRestorer {
         setupBatchProcessContexts();
     }
     
-    private void setupBatchProcessContexts() throws NoSuchFieldException, IllegalAccessException {
-        Field batchProcessContextsField = showProcessListExecutor.getClass().getDeclaredField("batchProcessContexts");
-        batchProcessContextsField.setAccessible(true);
+    private void setupBatchProcessContexts() throws NoSuchFieldException {
         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,7 +61,7 @@ public final class ShowProcessListExecutorTest extends ProxyContextRestorer {
                 + "    unitID: unitID1\n"
                 + "  - status: EXECUTE_STATUS_DONE\n"
                 + "    unitID: unitID2\n";
-        batchProcessContextsField.set(showProcessListExecutor, Collections.singleton(executionNodeValue));
+        new InstanceField(showProcessListExecutor.getClass().getDeclaredField("batchProcessContexts"), showProcessListExecutor).set(Collections.singleton(executionNodeValue));
     }
     
     @Test
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/opengauss/OpenGaussAdminExecutorFactoryTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/opengauss/OpenGaussAdminExecutorFactoryTest.java
index 55220981e21..e70fdb34c28 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/opengauss/OpenGaussAdminExecutorFactoryTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/opengauss/OpenGaussAdminExecutorFactoryTest.java
@@ -24,9 +24,9 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.InstanceField;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
 import java.util.Collections;
 import java.util.Optional;
 
@@ -48,10 +48,8 @@ public final class OpenGaussAdminExecutorFactoryTest {
     
     @Before
     public void setup() throws IllegalAccessException, NoSuchFieldException {
-        Field field = OpenGaussAdminExecutorCreator.class.getDeclaredField("delegated");
-        field.setAccessible(true);
         openGaussAdminExecutorFactory = new OpenGaussAdminExecutorCreator();
-        field.set(openGaussAdminExecutorFactory, postgreSQLAdminExecutorFactory);
+        new InstanceField(OpenGaussAdminExecutorCreator.class.getDeclaredField("delegated"), openGaussAdminExecutorFactory).set(postgreSQLAdminExecutorFactory);
     }
     
     @Test
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandlerTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandlerTest.java
index bc6f1fc9f15..3bcdabb313c 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandlerTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandlerTest.java
@@ -28,9 +28,9 @@ import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRule
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory;
-import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngine;
 import org.apache.shardingsphere.proxy.backend.communication.BackendConnection;
+import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngine;
+import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.handler.data.DatabaseBackendHandler;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
@@ -42,9 +42,9 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.InstanceField;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
 import java.sql.SQLException;
 import java.util.Collections;
 import java.util.HashMap;
@@ -108,11 +108,9 @@ public final class UnicastDatabaseBackendHandlerTest extends ProxyContextRestore
         when(databaseCommunicationEngineFactory.newDatabaseCommunicationEngine(any(QueryContext.class), any(BackendConnection.class), eq(false))).thenReturn(databaseCommunicationEngine);
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private void setBackendHandlerFactory(final DatabaseBackendHandler schemaDatabaseBackendHandler) {
-        Field field = schemaDatabaseBackendHandler.getClass().getDeclaredField("databaseCommunicationEngineFactory");
-        field.setAccessible(true);
-        field.set(schemaDatabaseBackendHandler, databaseCommunicationEngineFactory);
+        new InstanceField(schemaDatabaseBackendHandler.getClass().getDeclaredField("databaseCommunicationEngineFactory"), schemaDatabaseBackendHandler).set(databaseCommunicationEngineFactory);
     }
     
     @Test
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterStorageUnitBackendHandlerTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterStorageUnitBackendHandlerTest.java
index 29e8b30e23d..cef3148334e 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterStorageUnitBackendHandlerTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterStorageUnitBackendHandlerTest.java
@@ -41,10 +41,10 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.InstanceField;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import javax.sql.DataSource;
-import java.lang.reflect.Field;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
@@ -88,9 +88,7 @@ public final class AlterStorageUnitBackendHandlerTest extends ProxyContextRestor
         when(metaDataContexts.getMetaData().containsDatabase("test_db")).thenReturn(true);
         when(connectionSession.getProtocolType()).thenReturn(new MySQLDatabaseType());
         alterStorageUnitBackendHandler = new AlterStorageUnitBackendHandler(alterStorageUnitStatement, connectionSession);
-        Field field = alterStorageUnitBackendHandler.getClass().getDeclaredField("validateHandler");
-        field.setAccessible(true);
-        field.set(alterStorageUnitBackendHandler, validateHandler);
+        new InstanceField(alterStorageUnitBackendHandler.getClass().getDeclaredField("validateHandler"), alterStorageUnitBackendHandler).set(validateHandler);
     }
     
     @Test
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/RegisterStorageUnitBackendHandlerTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/RegisterStorageUnitBackendHandlerTest.java
index 471b4fc9a95..db1eea1c09d 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/RegisterStorageUnitBackendHandlerTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/RegisterStorageUnitBackendHandlerTest.java
@@ -43,9 +43,9 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.InstanceField;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
@@ -95,9 +95,7 @@ public final class RegisterStorageUnitBackendHandlerTest extends ProxyContextRes
         when(database.getRuleMetaData()).thenReturn(ruleMetaData);
         when(ruleMetaData.findSingleRule(ReadwriteSplittingRule.class)).thenReturn(Optional.of(readwriteSplittingRule));
         registerStorageUnitBackendHandler = new RegisterStorageUnitBackendHandler(registerStorageUnitStatement, connectionSession);
-        Field field = registerStorageUnitBackendHandler.getClass().getDeclaredField("validateHandler");
-        field.setAccessible(true);
-        field.set(registerStorageUnitBackendHandler, validateHandler);
+        new InstanceField(registerStorageUnitBackendHandler.getClass().getDeclaredField("validateHandler"), registerStorageUnitBackendHandler).set(validateHandler);
     }
     
     @Test
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerFactoryTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerFactoryTest.java
index 5833b4d1210..7681bd21ccc 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerFactoryTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerFactoryTest.java
@@ -22,13 +22,13 @@ import org.apache.shardingsphere.infra.binder.QueryContext;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory;
-import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngine;
 import org.apache.shardingsphere.proxy.backend.communication.BackendConnection;
+import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngine;
+import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory;
 import org.apache.shardingsphere.proxy.backend.communication.jdbc.transaction.BackendTransactionManager;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
+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.tcl.CommitStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.RollbackStatement;
@@ -40,8 +40,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Answers;
 import org.mockito.MockedStatic;
-
-import java.lang.reflect.Field;
+import org.mockito.internal.util.reflection.FieldReader;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
@@ -65,6 +64,7 @@ public final class TransactionBackendHandlerFactoryTest extends ProxyContextRest
         ProxyContext.init(contextManager);
     }
     
+    @SuppressWarnings("unchecked")
     @Test
     public void assertTransactionBackendHandlerReturnedWhenTCLStatementInstanceOfCommitStatement() {
         ConnectionSession connectionSession = mock(ConnectionSession.class, Answers.RETURNS_DEEP_STUBS);
@@ -95,6 +95,7 @@ public final class TransactionBackendHandlerFactoryTest extends ProxyContextRest
         assertFieldOfInstance(getBackendTransactionManager(transactionBackendHandler), "connection", is(backendConnection));
     }
     
+    @SuppressWarnings("unchecked")
     @Test
     public void assertBroadcastBackendHandlerReturnedWhenTCLStatementNotHit() {
         SQLStatementContext<TCLStatement> context = mock(SQLStatementContext.class);
@@ -110,16 +111,12 @@ public final class TransactionBackendHandlerFactoryTest extends ProxyContextRest
     @SuppressWarnings("unchecked")
     @SneakyThrows(ReflectiveOperationException.class)
     private <S, T> void assertFieldOfInstance(final S classInstance, final String fieldName, final Matcher<T> matcher) {
-        Field field = classInstance.getClass().getDeclaredField(fieldName);
-        field.setAccessible(true);
-        T value = (T) field.get(classInstance);
+        T value = (T) new FieldReader(classInstance, classInstance.getClass().getDeclaredField(fieldName)).read();
         assertThat(value, matcher);
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private BackendTransactionManager getBackendTransactionManager(final TransactionBackendHandler transactionBackendHandler) {
-        Field field = transactionBackendHandler.getClass().getDeclaredField("backendTransactionManager");
-        field.setAccessible(true);
-        return (BackendTransactionManager) field.get(transactionBackendHandler);
+        return (BackendTransactionManager) new FieldReader(transactionBackendHandler, transactionBackendHandler.getClass().getDeclaredField("backendTransactionManager")).read();
     }
 }
diff --git a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
index fb38bc0620a..cbda2c2fad9 100644
--- a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
+++ b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
@@ -36,9 +36,9 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.FieldReader;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
 import java.util.Map;
 import java.util.concurrent.ExecutorService;
 
@@ -110,11 +110,10 @@ public final class OKProxyStateTest extends ProxyContextRestorer {
     }
     
     @SuppressWarnings({"unchecked", "SameParameterValue"})
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private ExecutorService registerMockExecutorService(final int connectionId) {
-        Field executorServicesField = ConnectionThreadExecutorGroup.class.getDeclaredField("executorServices");
-        executorServicesField.setAccessible(true);
-        Map<Integer, ExecutorService> executorServices = (Map<Integer, ExecutorService>) executorServicesField.get(ConnectionThreadExecutorGroup.getInstance());
+        Map<Integer, ExecutorService> executorServices = (Map<Integer, ExecutorService>) new FieldReader(
+                ConnectionThreadExecutorGroup.getInstance(), ConnectionThreadExecutorGroup.class.getDeclaredField("executorServices")).read();
         ExecutorService result = mock(ExecutorService.class);
         executorServices.put(connectionId, result);
         return result;
diff --git a/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLFrontendEngineTest.java b/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLFrontendEngineTest.java
index eb9da1a2e7e..4d7c1358f9b 100644
--- a/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLFrontendEngineTest.java
+++ b/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLFrontendEngineTest.java
@@ -54,7 +54,6 @@ import org.mockito.Mock;
 import org.mockito.internal.util.reflection.InstanceField;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.UnknownHostException;
@@ -158,11 +157,9 @@ public final class MySQLFrontendEngineTest extends ProxyContextRestorer {
         verify(context).writeAndFlush(argThat((ArgumentMatcher<MySQLErrPacket>) argument -> "Access denied for user 'root'@'192.168.0.102' (using password: YES)".equals(argument.getErrorMessage())));
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private void setConnectionPhase(final MySQLConnectionPhase connectionPhase) {
-        Field field = MySQLAuthenticationEngine.class.getDeclaredField("connectionPhase");
-        field.setAccessible(true);
-        field.set(mysqlFrontendEngine.getAuthenticationEngine(), connectionPhase);
+        new InstanceField(MySQLAuthenticationEngine.class.getDeclaredField("connectionPhase"), mysqlFrontendEngine.getAuthenticationEngine()).set(connectionPhase);
     }
     
     private void initProxyContext(final ShardingSphereUser user) {
diff --git a/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java b/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
index 9166158d52b..270be03ddb1 100644
--- a/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
+++ b/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
@@ -44,8 +44,9 @@ import org.apache.shardingsphere.proxy.frontend.mysql.ProxyContextRestorer;
 import org.apache.shardingsphere.proxy.frontend.mysql.authentication.authenticator.MySQLNativePasswordAuthenticator;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.internal.util.reflection.FieldReader;
+import org.mockito.internal.util.reflection.InstanceField;
 
-import java.lang.reflect.Field;
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
 import java.util.LinkedHashMap;
@@ -73,14 +74,12 @@ public final class MySQLAuthenticationEngineTest extends ProxyContextRestorer {
     private final byte[] authResponse = {-27, 89, -20, -27, 65, -120, -64, -101, 86, -100, -108, -100, 6, -125, -37, 117, 14, -43, 95, -113};
     
     @Before
-    public void setUp() throws NoSuchFieldException, IllegalAccessException {
+    public void setUp() throws NoSuchFieldException {
         initAuthenticationHandlerForAuthenticationEngine();
     }
     
-    private void initAuthenticationHandlerForAuthenticationEngine() throws NoSuchFieldException, IllegalAccessException {
-        Field field = MySQLAuthenticationEngine.class.getDeclaredField("authenticationHandler");
-        field.setAccessible(true);
-        field.set(authenticationEngine, authenticationHandler);
+    private void initAuthenticationHandlerForAuthenticationEngine() throws NoSuchFieldException {
+        new InstanceField(MySQLAuthenticationEngine.class.getDeclaredField("authenticationHandler"), authenticationEngine).set(authenticationHandler);
     }
     
     @Test
@@ -123,11 +122,9 @@ public final class MySQLAuthenticationEngineTest extends ProxyContextRestorer {
         assertThat(getAuthResponse(), is(authResponse));
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private void setAuthenticationResult() {
-        Field field = MySQLAuthenticationEngine.class.getDeclaredField("currentAuthResult");
-        field.setAccessible(true);
-        field.set(authenticationEngine, AuthenticationResultBuilder.continued("root", "", "sharding_db"));
+        new InstanceField(MySQLAuthenticationEngine.class.getDeclaredField("currentAuthResult"), authenticationEngine).set(AuthenticationResultBuilder.continued("root", "", "sharding_db"));
     }
     
     @Test
@@ -212,24 +209,18 @@ public final class MySQLAuthenticationEngineTest extends ProxyContextRestorer {
         return result;
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private void setConnectionPhase(final MySQLConnectionPhase connectionPhase) {
-        Field field = MySQLAuthenticationEngine.class.getDeclaredField("connectionPhase");
-        field.setAccessible(true);
-        field.set(authenticationEngine, connectionPhase);
+        new InstanceField(MySQLAuthenticationEngine.class.getDeclaredField("connectionPhase"), authenticationEngine).set(connectionPhase);
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private MySQLConnectionPhase getConnectionPhase() {
-        Field field = MySQLAuthenticationEngine.class.getDeclaredField("connectionPhase");
-        field.setAccessible(true);
-        return (MySQLConnectionPhase) field.get(authenticationEngine);
+        return (MySQLConnectionPhase) new FieldReader(authenticationEngine, MySQLAuthenticationEngine.class.getDeclaredField("connectionPhase")).read();
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private byte[] getAuthResponse() {
-        Field field = MySQLAuthenticationEngine.class.getDeclaredField("authResponse");
-        field.setAccessible(true);
-        return (byte[]) field.get(authenticationEngine);
+        return (byte[]) new FieldReader(authenticationEngine, MySQLAuthenticationEngine.class.getDeclaredField("authResponse")).read();
     }
 }
diff --git a/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/OpenGaussFrontendEngineTest.java b/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/OpenGaussFrontendEngineTest.java
index 4e6b963871f..d6c8cb3f7a8 100644
--- a/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/OpenGaussFrontendEngineTest.java
+++ b/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/OpenGaussFrontendEngineTest.java
@@ -26,10 +26,9 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.InstanceField;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
-
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.Mockito.mock;
@@ -44,10 +43,8 @@ public final class OpenGaussFrontendEngineTest {
     private PostgreSQLFrontendEngine mockPostgreSQLFrontendEngine;
     
     @Before
-    public void setup() throws ReflectiveOperationException {
-        Field field = OpenGaussFrontendEngine.class.getDeclaredField("postgreSQLFrontendEngine");
-        field.setAccessible(true);
-        field.set(openGaussFrontendEngine, mockPostgreSQLFrontendEngine);
+    public void setup() throws NoSuchFieldException {
+        new InstanceField(OpenGaussFrontendEngine.class.getDeclaredField("postgreSQLFrontendEngine"), openGaussFrontendEngine).set(mockPostgreSQLFrontendEngine);
     }
     
     @Test
diff --git a/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/OpenGaussAuthenticationEngineTest.java b/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/OpenGaussAuthenticationEngineTest.java
index 774270a8278..09955ae5675 100644
--- a/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/OpenGaussAuthenticationEngineTest.java
+++ b/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/OpenGaussAuthenticationEngineTest.java
@@ -52,9 +52,10 @@ import org.junit.runner.RunWith;
 import org.mockito.Answers;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.FieldReader;
+import org.mockito.internal.util.reflection.InstanceField;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
 import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 import java.util.LinkedHashMap;
@@ -114,12 +115,9 @@ public final class OpenGaussAuthenticationEngineTest extends ProxyContextRestore
         authenticationEngine.authenticate(channelHandlerContext, payload);
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private void setAlreadyReceivedStartupMessage(final OpenGaussAuthenticationEngine target) {
-        Field field = OpenGaussAuthenticationEngine.class.getDeclaredField("startupMessageReceived");
-        field.setAccessible(true);
-        field.set(target, true);
-        field.setAccessible(false);
+        new InstanceField(OpenGaussAuthenticationEngine.class.getDeclaredField("startupMessageReceived"), target).set(true);
     }
     
     @Test
@@ -178,25 +176,19 @@ public final class OpenGaussAuthenticationEngineTest extends ProxyContextRestore
         return new ShardingSphereRuleMetaData(Collections.singletonList(rule));
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private byte[] getRandom64Code(final OpenGaussAuthenticationSCRAMSha256Packet packet) {
-        Field field = OpenGaussAuthenticationSCRAMSha256Packet.class.getDeclaredField("random64Code");
-        field.setAccessible(true);
-        return (byte[]) field.get(packet);
+        return (byte[]) new FieldReader(packet, OpenGaussAuthenticationSCRAMSha256Packet.class.getDeclaredField("random64Code")).read();
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private byte[] getToken(final OpenGaussAuthenticationSCRAMSha256Packet packet) {
-        Field field = OpenGaussAuthenticationSCRAMSha256Packet.class.getDeclaredField("token");
-        field.setAccessible(true);
-        return (byte[]) field.get(packet);
+        return (byte[]) new FieldReader(packet, OpenGaussAuthenticationSCRAMSha256Packet.class.getDeclaredField("token")).read();
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private int getServerIteration(final OpenGaussAuthenticationSCRAMSha256Packet packet) {
-        Field field = OpenGaussAuthenticationSCRAMSha256Packet.class.getDeclaredField("serverIteration");
-        field.setAccessible(true);
-        return (int) field.get(packet);
+        return (int) new FieldReader(packet, OpenGaussAuthenticationSCRAMSha256Packet.class.getDeclaredField("serverIteration")).read();
     }
     
     private String encodeDigest(final String password, final String random64code, final String token, final int serverIteration) {
diff --git a/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/err/OpenGaussErrorPacketFactoryTest.java b/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/err/OpenGaussErrorPacketFactoryTest.java
index 4c5ff2c2f79..5740aac1be9 100644
--- a/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/err/OpenGaussErrorPacketFactoryTest.java
+++ b/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/err/OpenGaussErrorPacketFactoryTest.java
@@ -20,10 +20,10 @@ package org.apache.shardingsphere.proxy.frontend.opengauss.err;
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.db.protocol.opengauss.packet.command.generic.OpenGaussErrorResponsePacket;
 import org.junit.Test;
+import org.mockito.internal.util.reflection.FieldReader;
 import org.opengauss.util.PSQLException;
 import org.opengauss.util.ServerErrorMessage;
 
-import java.lang.reflect.Field;
 import java.sql.SQLException;
 import java.util.Map;
 
@@ -82,10 +82,8 @@ public final class OpenGaussErrorPacketFactoryTest {
     }
     
     @SuppressWarnings("unchecked")
-    @SneakyThrows({IllegalAccessException.class, NoSuchFieldException.class})
+    @SneakyThrows(NoSuchFieldException.class)
     private static Map<Character, String> getFieldsInPacket(final OpenGaussErrorResponsePacket packet) {
-        Field field = OpenGaussErrorResponsePacket.class.getDeclaredField("fields");
-        field.setAccessible(true);
-        return (Map<Character, String>) field.get(packet);
+        return (Map<Character, String>) new FieldReader(packet, OpenGaussErrorResponsePacket.class.getDeclaredField("fields")).read();
     }
 }
diff --git a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/PostgreSQLFrontendEngineTest.java b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/PostgreSQLFrontendEngineTest.java
index 361dbfb42b3..d021c129a44 100644
--- a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/PostgreSQLFrontendEngineTest.java
+++ b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/PostgreSQLFrontendEngineTest.java
@@ -23,8 +23,8 @@ import org.apache.shardingsphere.proxy.frontend.executor.ConnectionThreadExecuto
 import org.apache.shardingsphere.proxy.frontend.postgresql.command.PortalContext;
 import org.apache.shardingsphere.proxy.frontend.postgresql.command.PostgreSQLPortalContextRegistry;
 import org.junit.Test;
+import org.mockito.internal.util.reflection.FieldReader;
 
-import java.lang.reflect.Field;
 import java.util.concurrent.ConcurrentMap;
 
 import static org.junit.Assert.assertTrue;
@@ -50,8 +50,6 @@ public final class PostgreSQLFrontendEngineTest {
     @SuppressWarnings("unchecked")
     @SneakyThrows(ReflectiveOperationException.class)
     private ConcurrentMap<Integer, PortalContext> getPortalContexts() {
-        Field field = PostgreSQLPortalContextRegistry.class.getDeclaredField("portalContexts");
-        field.setAccessible(true);
-        return (ConcurrentMap<Integer, PortalContext>) field.get(PostgreSQLPortalContextRegistry.getInstance());
+        return (ConcurrentMap<Integer, PortalContext>) new FieldReader(PostgreSQLPortalContextRegistry.getInstance(), PostgreSQLPortalContextRegistry.class.getDeclaredField("portalContexts")).read();
     }
 }
diff --git a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
index 374505eab7e..0c9f6c405bd 100644
--- a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
+++ b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
@@ -53,9 +53,10 @@ import org.junit.runner.RunWith;
 import org.mockito.Answers;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.FieldReader;
+import org.mockito.internal.util.reflection.InstanceField;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.nio.charset.StandardCharsets;
 import java.util.Collections;
@@ -117,12 +118,9 @@ public final class PostgreSQLAuthenticationEngineTest extends ProxyContextRestor
         authenticationEngine.authenticate(channelHandlerContext, payload);
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private void setAlreadyReceivedStartupMessage(final PostgreSQLAuthenticationEngine target) {
-        Field field = PostgreSQLAuthenticationEngine.class.getDeclaredField("startupMessageReceived");
-        field.setAccessible(true);
-        field.set(target, true);
-        field.setAccessible(false);
+        new InstanceField(PostgreSQLAuthenticationEngine.class.getDeclaredField("startupMessageReceived"), target).set(true);
     }
     
     @Test
@@ -187,11 +185,9 @@ public final class PostgreSQLAuthenticationEngineTest extends ProxyContextRestor
         return new ShardingSphereRuleMetaData(Collections.singletonList(rule));
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private byte[] getMd5Salt(final PostgreSQLMD5PasswordAuthenticationPacket md5PasswordPacket) {
-        Field field = PostgreSQLMD5PasswordAuthenticationPacket.class.getDeclaredField("md5Salt");
-        field.setAccessible(true);
-        return (byte[]) field.get(md5PasswordPacket);
+        return (byte[]) new FieldReader(md5PasswordPacket, PostgreSQLMD5PasswordAuthenticationPacket.class.getDeclaredField("md5Salt")).read();
     }
     
     @SneakyThrows(ReflectiveOperationException.class)
diff --git a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecutorFactoryTest.java b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecutorFactoryTest.java
index 5be9eaa8772..84d08266a10 100644
--- a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecutorFactoryTest.java
+++ b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecutorFactoryTest.java
@@ -47,9 +47,9 @@ import org.apache.shardingsphere.proxy.frontend.postgresql.command.query.simple.
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.FieldReader;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
 import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.Collection;
@@ -57,8 +57,8 @@ import java.util.Iterator;
 import java.util.List;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertFalse;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -152,11 +152,9 @@ public final class PostgreSQLCommandExecutorFactoryTest {
     }
     
     @SuppressWarnings("unchecked")
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private static List<CommandExecutor> getExecutorsFromAggregatedCommandExecutor(final PostgreSQLAggregatedCommandExecutor executor) {
-        Field field = PostgreSQLAggregatedCommandExecutor.class.getDeclaredField("executors");
-        field.setAccessible(true);
-        return (List<CommandExecutor>) field.get(executor);
+        return (List<CommandExecutor>) new FieldReader(executor, PostgreSQLAggregatedCommandExecutor.class.getDeclaredField("executors")).read();
     }
     
     @RequiredArgsConstructor
diff --git a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
index 92c57f0c17a..06408a0a16e 100644
--- a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
+++ b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
@@ -45,9 +45,9 @@ import org.junit.runner.RunWith;
 import org.mockito.Answers;
 import org.mockito.InOrder;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.FieldReader;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
@@ -134,9 +134,8 @@ public final class PostgreSQLBatchedStatementsExecutorTest extends ProxyContextR
     @SuppressWarnings("unchecked")
     @SneakyThrows(ReflectiveOperationException.class)
     private void prepareExecutionUnitParameters(final PostgreSQLBatchedStatementsExecutor target, final List<List<Object>> parameterSets) {
-        Field executionUnitParametersField = PostgreSQLBatchedStatementsExecutor.class.getDeclaredField("executionUnitParams");
-        executionUnitParametersField.setAccessible(true);
-        Map<ExecutionUnit, List<List<Object>>> map = (Map<ExecutionUnit, List<List<Object>>>) executionUnitParametersField.get(target);
+        Map<ExecutionUnit, List<List<Object>>> map = (Map<ExecutionUnit, List<List<Object>>>) new FieldReader(
+                target, PostgreSQLBatchedStatementsExecutor.class.getDeclaredField("executionUnitParams")).read();
         map.replaceAll((k, v) -> parameterSets);
     }
 }
diff --git a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
index c750c9ba559..bd3f03c12aa 100644
--- a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
+++ b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
@@ -58,9 +58,9 @@ import org.junit.runner.RunWith;
 import org.mockito.Answers;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.FieldReader;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
 import java.sql.Connection;
 import java.sql.ParameterMetaData;
 import java.sql.ResultSetMetaData;
@@ -313,11 +313,9 @@ public final class PostgreSQLComDescribeExecutorTest extends ProxyContextRestore
     }
     
     @SuppressWarnings("unchecked")
-    @SneakyThrows({NoSuchFieldException.class, IllegalAccessException.class})
+    @SneakyThrows(NoSuchFieldException.class)
     private Collection<PostgreSQLColumnDescription> getColumnDescriptionsFromPacket(final PostgreSQLRowDescriptionPacket packet) {
-        Field field = PostgreSQLRowDescriptionPacket.class.getDeclaredField("columnDescriptions");
-        field.setAccessible(true);
-        return (Collection<PostgreSQLColumnDescription>) field.get(packet);
+        return (Collection<PostgreSQLColumnDescription>) new FieldReader(packet, PostgreSQLRowDescriptionPacket.class.getDeclaredField("columnDescriptions")).read();
     }
     
     @SuppressWarnings("rawtypes")
@@ -382,11 +380,9 @@ public final class PostgreSQLComDescribeExecutorTest extends ProxyContextRestore
     }
     
     @SuppressWarnings("unchecked")
-    @SneakyThrows(ReflectiveOperationException.class)
+    @SneakyThrows(NoSuchFieldException.class)
     private List<PostgreSQLColumnDescription> getColumnDescriptions(final PostgreSQLRowDescriptionPacket packet) {
-        Field columnDescriptionsField = PostgreSQLRowDescriptionPacket.class.getDeclaredField("columnDescriptions");
-        columnDescriptionsField.setAccessible(true);
-        return (List<PostgreSQLColumnDescription>) columnDescriptionsField.get(packet);
+        return (List<PostgreSQLColumnDescription>) new FieldReader(packet, PostgreSQLRowDescriptionPacket.class.getDeclaredField("columnDescriptions")).read();
     }
     
     @Test(expected = UnsupportedSQLOperationException.class)
diff --git a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java
index a6e473833aa..27e84fe6e7b 100644
--- a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java
+++ b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java
@@ -44,9 +44,9 @@ import org.junit.runner.RunWith;
 import org.mockito.Answers;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.internal.util.reflection.InstanceField;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.lang.reflect.Field;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -130,11 +130,9 @@ public final class PostgreSQLComParseExecutorTest extends ProxyContextRestorer {
         assertThat(actualPreparedStatement.getParameterTypes(), is(Arrays.asList(PostgreSQLColumnType.POSTGRESQL_TYPE_INT4, PostgreSQLColumnType.POSTGRESQL_TYPE_UNSPECIFIED)));
     }
     
-    @SneakyThrows({NoSuchFieldException.class, SecurityException.class, IllegalArgumentException.class, IllegalAccessException.class})
+    @SneakyThrows(NoSuchFieldException.class)
     private void setConnectionSession() {
-        Field field = PostgreSQLComParseExecutor.class.getDeclaredField("connectionSession");
-        field.setAccessible(true);
-        field.set(executor, connectionSession);
+        new InstanceField(PostgreSQLComParseExecutor.class.getDeclaredField("connectionSession"), executor).set(connectionSession);
     }
     
     @Test
diff --git a/sql-parser/engine/src/test/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngineTest.java b/sql-parser/engine/src/test/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngineTest.java
index e020ef111ae..eaa46fc157a 100644
--- a/sql-parser/engine/src/test/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngineTest.java
+++ b/sql-parser/engine/src/test/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngineTest.java
@@ -23,9 +23,9 @@ import com.github.benmanes.caffeine.cache.LoadingCache;
 import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
 import org.apache.shardingsphere.sql.parser.core.database.parser.SQLParserExecutor;
 import org.junit.Test;
+import org.mockito.internal.util.reflection.InstanceField;
 
 import javax.annotation.ParametersAreNonnullByDefault;
-import java.lang.reflect.Field;
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
@@ -42,11 +42,7 @@ public final class SQLParserEngineTest {
         when(sqlParserExecutor.parse(SQL)).thenReturn(mock(ParseASTNode.class));
         CacheOption cacheOption = new CacheOption(128, 1024L);
         SQLParserEngine sqlParserEngine = new SQLParserEngine("H2", cacheOption);
-        Field sqlParserExecutorFiled = sqlParserEngine.getClass().getDeclaredField("sqlParserExecutor");
-        Field parseTreeCacheField = sqlParserEngine.getClass().getDeclaredField("parseTreeCache");
-        sqlParserExecutorFiled.setAccessible(true);
-        parseTreeCacheField.setAccessible(true);
-        sqlParserExecutorFiled.set(sqlParserEngine, sqlParserExecutor);
+        new InstanceField(sqlParserEngine.getClass().getDeclaredField("sqlParserExecutor"), sqlParserEngine).set(sqlParserExecutor);
         LoadingCache<String, ParseASTNode> parseTreeCache = Caffeine.newBuilder().softValues().initialCapacity(128)
                 .maximumSize(1024).build(new CacheLoader<String, ParseASTNode>() {
                     
@@ -56,7 +52,7 @@ public final class SQLParserEngineTest {
                         return sqlParserExecutor.parse(sql);
                     }
                 });
-        parseTreeCacheField.set(sqlParserEngine, parseTreeCache);
+        new InstanceField(sqlParserEngine.getClass().getDeclaredField("parseTreeCache"), sqlParserEngine).set(parseTreeCache);
         sqlParserEngine.parse(SQL, true);
         verify(sqlParserExecutor, times(1)).parse(SQL);
         sqlParserEngine.parse(SQL, true);
diff --git a/sql-parser/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheLoaderTest.java b/sql-parser/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheLoaderTest.java
index 41ad0b97cb4..186143d4c3f 100644
--- a/sql-parser/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheLoaderTest.java
+++ b/sql-parser/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheLoaderTest.java
@@ -20,8 +20,7 @@ package org.apache.shardingsphere.sql.parser.core.database.cache;
 import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
 import org.apache.shardingsphere.sql.parser.core.database.parser.SQLParserExecutor;
 import org.junit.Test;
-
-import java.lang.reflect.Field;
+import org.mockito.internal.util.reflection.InstanceField;
 
 import static org.hamcrest.CoreMatchers.isA;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -33,12 +32,10 @@ public final class ParseTreeCacheLoaderTest {
     private static final String SQL = "select * from user where id=1";
     
     @Test
-    public void assertParseTreeCacheLoader() throws NoSuchFieldException, IllegalAccessException {
+    public void assertParseTreeCacheLoader() throws NoSuchFieldException {
         SQLParserExecutor sqlParserExecutor = mock(SQLParserExecutor.class, RETURNS_DEEP_STUBS);
         ParseTreeCacheLoader loader = new ParseTreeCacheLoader("MySQL");
-        Field sqlParserExecutorField = loader.getClass().getDeclaredField("sqlParserExecutor");
-        sqlParserExecutorField.setAccessible(true);
-        sqlParserExecutorField.set(loader, sqlParserExecutor);
+        new InstanceField(loader.getClass().getDeclaredField("sqlParserExecutor"), loader).set(sqlParserExecutor);
         assertThat(loader.load(SQL), isA(ParseASTNode.class));
     }
 }
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/framework/runner/param/RunnerParameters.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/framework/runner/param/RunnerParameters.java
index 1d3a9cf8979..2cf918504ef 100644
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/framework/runner/param/RunnerParameters.java
+++ b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/framework/runner/param/RunnerParameters.java
@@ -23,8 +23,6 @@ import org.apache.shardingsphere.test.e2e.framework.param.model.E2ETestParameter
 import org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParameters;
 import org.mockito.internal.util.reflection.FieldReader;
 
-import java.lang.reflect.Field;
-
 /**
  * Runner parameters.
  */
@@ -40,9 +38,7 @@ public final class RunnerParameters {
      */
     @SneakyThrows(ReflectiveOperationException.class)
     public E2ETestParameter getTestParameter() {
-        Field paramsField = BlockJUnit4ClassRunnerWithParameters.class.getDeclaredField("parameters");
-        paramsField.setAccessible(true);
-        Object[] params = (Object[]) paramsField.get(getRunner());
+        Object[] params = (Object[]) new FieldReader(getRunner(), BlockJUnit4ClassRunnerWithParameters.class.getDeclaredField("parameters")).read();
         return (E2ETestParameter) params[0];
     }