You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ke...@apache.org on 2023/01/29 10:20:11 UTC

[skywalking-java] branch test/ci/spring6 updated (2fc4a15e6e -> c32d742a71)

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

kezhenxu94 pushed a change to branch test/ci/spring6
in repository https://gitbox.apache.org/repos/asf/skywalking-java.git


 discard 2fc4a15e6e Add Spring 6 to test case
     new c32d742a71 Add Spring 6 to test case

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (2fc4a15e6e)
            \
             N -- N -- N   refs/heads/test/ci/spring6 (c32d742a71)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../main/java/org/apache/skywalking/apm/plugin/finagle/CodecUtils.java  | 2 --
 .../skywalking/apm/plugin/influxdb/define/InfluxDBInstrumentation.java  | 1 -
 .../org/apache/skywalking/apm/plugin/jedis/v4/JedisPluginConfig.java    | 1 -
 .../apm/plugin/neo4j/v4x/SessionConstructorInterceptorTest.java         | 2 --
 .../apm/plugin/shenyu/v24x/define/ServerWebExchangeInstrumentation.java | 1 -
 5 files changed, 7 deletions(-)


[skywalking-java] 01/01: Add Spring 6 to test case

Posted by ke...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a commit to branch test/ci/spring6
in repository https://gitbox.apache.org/repos/asf/skywalking-java.git

commit c32d742a71faecb150fe420b49993f4e740016f9
Author: kezhenxu94 <ke...@apache.org>
AuthorDate: Sun Jan 29 18:20:02 2023 +0800

    Add Spring 6 to test case
---
 .github/actions/build/action.yml                   |   4 +
 .github/actions/run/action.yml                     |   8 +-
 .github/workflows/ci.yaml                          |  11 +-
 ...cat10-test.0.yaml => plugins-jdk17-test.1.yaml} |  13 +-
 .github/workflows/plugins-test.0.yaml              |   4 +-
 .github/workflows/plugins-test.1.yaml              |   4 +-
 .github/workflows/plugins-test.2.yaml              |   4 +-
 .github/workflows/plugins-test.3.yaml              |   4 +-
 .github/workflows/plugins-tomcat10-test.0.yaml     |   4 +-
 .licenserc.yaml                                    |   1 +
 .../apm-toolkit-micrometer-registry/pom.xml        |   6 +
 .../meter/micrometer/SkywalkingCounterTest.java    |  17 +-
 .../micrometer/SkywalkingMeterRegistryTest.java    |   1 -
 apm-commons/apm-datacarrier/pom.xml                |  34 +-
 .../apm/commons/datacarrier/DataCarrierTest.java   |  31 +-
 .../apm/commons/datacarrier/EnvUtilTest.java       |  28 +-
 .../apm/commons/datacarrier/FieldGetter.java       |  19 +-
 .../datacarrier/consumer/ConsumeDriverTest.java    |  16 +-
 .../commons/datacarrier/consumer/ConsumerTest.java |  13 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../skywalking/apm/util/ConfigInitializer.java     |   1 -
 .../skywalking/apm/util/ConfigInitializerTest.java |   6 +-
 apm-sniffer/apm-agent-core/pom.xml                 | 129 ++++---
 .../core/context/status/ExceptionCheckContext.java |   2 +-
 .../plugin/AbstractClassEnhancePluginDefine.java   |   1 -
 .../core/profile/ProfileTaskChannelService.java    |   1 -
 .../apm/agent/core/profile/ThreadProfiler.java     |   2 +-
 .../skywalking/apm/agent/core/util/IOUtils.java    |   1 -
 .../watcher/IgnoreSuffixPatternsWatcherTest.java   |  14 +-
 .../core/conf/watcher/SamplingRateWatcherTest.java |  13 +-
 .../agent/core/context/ExtensionContextTest.java   |  15 +-
 .../context/status/ExceptionCheckStrategyTest.java |  14 +-
 .../status/StatusCheckServiceCheckTest.java        |  14 +-
 .../core/context/status/StatusCheckerTest.java     |  33 +-
 .../core/logging/core/SystemOutWriterTest.java     |   4 +-
 .../agent/core/logging/core/WriterFactoryTest.java |  52 +--
 .../apm/agent/core/meter/CounterTest.java          |  13 +-
 .../skywalking/apm/agent/core/meter/GaugeTest.java |   6 +-
 .../apm/agent/core/meter/HistogramTest.java        |  10 +-
 .../apm/agent/core/meter/MeterIdTest.java          |   6 +-
 .../apm/agent/core/meter/MeterServiceTest.java     |  47 +--
 .../core/remote/TraceSegmentServiceClientTest.java |  20 +-
 .../agent/core/test/tools/AgentServiceRule.java    |  42 ++-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../activemq/ActiveMQProducerInterceptorTest.java  |   5 +-
 .../MessageConsumerDequeueInterceptorTest.java     |   7 +-
 .../asynchttpclient/v2/ExecuteInterceptorTest.java |  15 +-
 .../avro/GenericRequestorInterceptorTest.java      |   9 +-
 .../avro/SpecificRequestorInterceptorTest.java     |   5 +-
 .../plugin/baidu/brpc3/ClientInterceptorTest.java  |  22 +-
 .../plugin/baidu/brpc3/ServerInterceptorTest.java  |  28 +-
 .../apm/plugin/canal/CanalInterceptorTest.java     |   5 +-
 .../driver/v3/ClusterConnectInterceptorTest.java   |   6 +-
 ...tructorWithStateListenerArgInterceptorTest.java |  10 +-
 ...SetFutureGetUninterruptiblyInterceptorTest.java |  21 +-
 ...xecuteAsyncWithStatementArgInterceptorTest.java |  23 +-
 .../ClickHouseStatementMethodInterceptorTest.java  |  15 +-
 .../InitConnectionMethodInterceptorTest.java       |   7 +-
 .../apm/plugin/asf/dubbo/DubboInterceptor.java     |   4 +-
 .../apm/plugin/dubbo/DubboInterceptorTest.java     |  46 ++-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../apm/plugin/asf/dubbo3/DubboInterceptor.java    |   4 +-
 .../apm/plugin/dubbo3/DubboInterceptorTest.java    |  44 ++-
 .../apm/plugin/dubbo/DubboInterceptor.java         |   4 +-
 .../apm/plugin/dubbo/DubboInterceptorTest.java     |  53 +--
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../plugin/esjob/JobExecutorInterceptorTest.java   |   5 +-
 ...ctionFutureActionGetMethodsInterceptorTest.java |  23 +-
 ...terClientGetSettingsMethodsInterceptorTest.java |  12 +-
 .../ClusterClientHealthMethodsInterceptorTest.java |  12 +-
 ...terClientPutSettingsMethodsInterceptorTest.java |  18 +-
 ...IndicesClientAnalyzeMethodsInterceptorTest.java |  21 +-
 .../IndicesClientCreateMethodsInterceptorTest.java |  18 +-
 .../IndicesClientDeleteMethodsInterceptorTest.java |  16 +-
 ...velClientClearScrollMethodsInterceptorTest.java |  23 +-
 .../RestHighLevelClientConInterceptorTest.java     |  22 +-
 ...lClientDeleteByQueryMethodsInterceptorTest.java |  21 +-
 ...stHighLevelClientGetMethodsInterceptorTest.java |  18 +-
 ...HighLevelClientIndexMethodsInterceptorTest.java |  18 +-
 ...ighLevelClientSearchMethodsInterceptorTest.java |  20 +-
 ...elClientSearchScrollMethodsInterceptorTest.java |  21 +-
 ...ClientSearchTemplateMethodsInterceptorTest.java |  21 +-
 ...ighLevelClientUpdateMethodsInterceptorTest.java |  18 +-
 ...tionNodeProxyExecuteMethodsInterceptorTest.java |  20 +-
 .../TransportServiceConInterceptorTest.java        |  21 +-
 .../http/v9/DefaultHttpClientInterceptorTest.java  |   7 +-
 .../feign/http/v9/PathVarInterceptorTest.java      |  16 +-
 .../skywalking/apm/plugin/finagle/CodecUtils.java  |   2 -
 .../ClientTracingFilterInterceptorTest.java        |   5 +-
 .../ServerTracingFilterInterceptorTest.java        |   5 +-
 .../eventbus/EventBusDispatchInterceptorTest.java  |  32 +-
 ...entBusSubscriberConstructorInterceptorTest.java |   7 +-
 .../EventBusSubscriberInterceptorTest.java         |   7 +-
 .../v4/HttpClientExecuteInterceptorTest.java       |  28 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../v4/HttpAsyncClientInterceptorTest.java         |  24 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../v5/HttpClientExecuteInterceptorTest.java       |  33 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../CreateCallableStatementInterceptorTest.java    |  15 +-
 .../CreatePreparedStatementInterceptorTest.java    |  15 +-
 .../impala/CreateStatementInterceptorTest.java     |  15 +-
 ...aredStatementExecuteMethodsInterceptorTest.java |  23 +-
 .../StatementExecuteMethodsInterceptorTest.java    |  30 +-
 .../influxdb/define/InfluxDBInstrumentation.java   |   1 -
 .../InfluxDBConstructorInterceptorTest.java        |   2 +-
 .../influxdb/InfluxDBMethodInterceptorTest.java    |  25 +-
 .../apm/plugin/jdbc/SWCallableStatementTest.java   |  57 ++--
 .../apm/plugin/jdbc/SWConnectionTest.java          |  42 +--
 .../apm/plugin/jdbc/SWStatementTest.java           |  40 +--
 .../apm/plugin/jdbc/SwPreparedStatementTest.java   |  47 ++-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../apm/plugin/jedis/v4/JedisPluginConfig.java     |   1 -
 .../client/SyncHttpRequestSendInterceptorTest.java |  15 +-
 .../client/SyncHttpRequestSendInterceptorTest.java |  15 +-
 .../jetty/v9/server/HandleInterceptorTest.java     |  18 +-
 .../plugin/jsonrpc4j/JsonRpcHttpClientTests.java   |  29 +-
 .../apm/plugin/jsonrpc4j/JsonRpcServerTests.java   |  30 +-
 .../plugin/kafka/AssignMethodInterceptorTest.java  |   4 +-
 .../apm/plugin/kafka/CallbackInterceptorTest.java  |  18 +-
 ...ructorWithConsumerConfigInterceptPointTest.java |   2 +-
 .../ConstructorWithMapInterceptPointTest.java      |   2 +-
 .../plugin/kafka/KafkaConsumerInterceptorTest.java |  20 +-
 .../plugin/kafka/KafkaProducerInterceptorTest.java |  19 +-
 .../kafka/ProducerConstructorInterceptorTest.java  |   4 +-
 .../ProducerConstructorMapInterceptorTest.java     |   4 +-
 .../kafka/SubscribeMethodInterceptorTest.java      |   4 +-
 .../CreateCallableStatementInterceptorTest.java    |  11 +-
 .../CreatePreparedStatementInterceptorTest.java    |  11 +-
 .../jdbc/kylin/CreateStatementInterceptorTest.java |  11 +-
 ...aredStatementExecuteMethodsInterceptorTest.java |  16 +-
 .../StatementExecuteMethodsInterceptorTest.java    |  23 +-
 .../v5/RedisChannelWriterInterceptorTest.java      |  72 ++--
 .../light4j/HandleRequestInterceptorTest.java      |  18 +-
 .../v2/CreateCallableStatementInterceptorTest.java |  15 +-
 .../v2/CreatePreparedStatementInterceptorTest.java |  15 +-
 .../mariadb/v2/CreateStatementInterceptorTest.java |  15 +-
 ...aredStatementExecuteMethodsInterceptorTest.java |  20 +-
 .../v2/StatementExecuteMethodsInterceptorTest.java |  33 +-
 .../v2/MongoDBCollectionMethodInterceptorTest.java |  20 +-
 .../v3/interceptor/v30/MongoDBInterceptorTest.java |  26 +-
 .../v37/MongoDBClientDelegateInterceptorTest.java  |   7 +-
 .../MongoDBOperationExecutorInterceptorTest.java   |  30 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../v4/MongoDBClientDelegateInterceptorTest.java   |   7 +-
 .../MongoDBOperationExecutorInterceptorTest.java   |  35 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../plugin/motan/MotanConsumerInterceptorTest.java |  30 +-
 .../plugin/motan/MotanProviderInterceptorTest.java |  26 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../v5/ConnectionImplCreateInterceptorTest.java    |  13 +-
 .../v8/ConnectionImplCreateInterceptorTest.java    |  13 +-
 apm-sniffer/apm-sdk-plugin/mysql-common/pom.xml    |  28 +-
 .../CreateCallableStatementInterceptorTest.java    |  15 +-
 .../CreatePreparedStatementInterceptorTest.java    |  15 +-
 .../jdbc/mysql/CreateStatementInterceptorTest.java |  15 +-
 .../StatementExecuteMethodsInterceptorTest.java    |  27 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../SessionAcquireConnectionInterceptorTest.java   |  15 +-
 .../SessionBeginTransactionInterceptorTest.java    |   7 +-
 .../v4x/SessionConstructorInterceptorTest.java     |  34 +-
 .../neo4j/v4x/SessionRunInterceptorTest.java       |  15 +-
 .../neo4j/v4x/TransactionRunInterceptorTest.java   |  15 +-
 .../apm-sdk-plugin/netty-socketio-plugin/pom.xml   |   2 +-
 .../plugin/netty/socketio/NettySocketIOTest.java   |  44 +--
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../nutz/http/sync/SenderInterceptorTest.java      |   8 +-
 .../okhttp/v2/define/AsyncCallInstrumentation.java |   1 -
 .../plugin/okhttp/v2/RealCallInterceptorTest.java  |  18 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../plugin/okhttp/v3/RealCallInterceptorTest.java  |  46 ++-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../apm/plugin/play/v2x/TracingFilterTest.java     |  39 ++-
 apm-sniffer/apm-sdk-plugin/pom.xml                 |  49 ++-
 .../common/PulsarConsumerInterceptorTest.java      |  37 +-
 .../PulsarConsumerListenerInterceptorTest.java     |  35 +-
 .../common/PulsarProducerInterceptorTest.java      |  35 +-
 .../pulsar/common/SendCallbackInterceptorTest.java |   5 +-
 .../ChannelNConstructorInterceptorTest.java        |   5 +-
 .../rabbitmq/RabbitMQConsumerInterceptorTest.java  |   5 +-
 .../rabbitmq/RabbitMQProducerInterceptorTest.java  |   5 +-
 .../v3/RedisConnectionMethodInterceptorTest.java   |   5 +-
 .../SynchronousDispatcherInterceptorTest.java      |  16 +-
 .../SynchronousDispatcherInterceptorTest.java      |  23 +-
 .../rocketMQ/v3/MessageSendInterceptorTest.java    |  42 +--
 .../rocketMQ/v3/OnExceptionInterceptorTest.java    |  16 +-
 .../rocketMQ/v3/OnSuccessInterceptorTest.java      |  20 +-
 .../rocketMQ/v4/MessageSendInterceptorTest.java    |  50 ++-
 .../rocketMQ/v4/OnExceptionInterceptorTest.java    |  16 +-
 .../rocketMQ/v4/OnSuccessInterceptorTest.java      |  16 +-
 .../apm/plugin/shardingsphere/InterceptorTest.java |   5 +-
 .../apm/plugin/shardingsphere/InterceptorTest.java |   5 +-
 .../apm/plugin/shardingsphere/InterceptorTest.java |   5 +-
 .../shardingsphere/v500/InterceptorTest.java       |  41 +--
 .../sofarpc/SofaRpcConsumerInterceptorTest.java    |  64 ++--
 .../sofarpc/SofaRpcProviderInterceptorTest.java    |  63 ++--
 .../plugin/solrj/SolrClientInterceptorTest.java    |  16 +-
 .../patch/AopExpressionMatchInterceptorTest.java   |   4 +-
 .../patch/CreateAopProxyInterceptorTest.java       |   2 +-
 .../v3/define/AbstractSpring3Instrumentation.java  |   6 +-
 .../v3/ControllerConstructorInterceptorTest.java   |   9 +-
 .../v4/define/AbstractSpring4Instrumentation.java  |  10 +-
 .../ControllerForLowVersionInstrumentation.java    |  12 +-
 ...RestControllerForLowVersionInstrumentation.java |  12 +-
 .../v4/define/RestControllerInstrumentation.java   |  12 +-
 .../v4/ControllerConstructorInterceptorTest.java   |   5 +-
 .../plugin/spring/mvc/v4/PathMappingCacheTest.java |   7 +-
 .../v4/RequestMappingMethodInterceptorTest.java    |  18 +-
 .../mvc/v4/RestMappingMethodInterceptorTest.java   |  16 +-
 .../v4/define/ControllerInstrumentationTest.java   |  16 +-
 .../define/RestControllerInstrumentationTest.java  |  10 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../AbstractSpring5ReactiveInstrumentation.java    |   7 +-
 .../AbstractSpring5ReactiveInstrumentationV2.java  |   7 +-
 .../pom.xml                                        |  34 +-
 .../mvc/v6/ControllerConstructorInterceptor.java   |  58 ++++
 .../plugin/spring/mvc/v6/GetBeanInterceptor.java   |  68 ++++
 .../plugin/spring/mvc/v6/InvokeInterceptor.java    |  88 +++++
 .../define/AbstractControllerInstrumentation.java  | 113 +++++++
 .../v6/define/AbstractSpring5Instrumentation.java} |   6 +-
 .../mvc/v6/define/ControllerInstrumentation.java}  |  11 +-
 .../v6/define/HandlerMethodInstrumentation.java    |  69 ++++
 .../v6}/define/RestControllerInstrumentation.java  |  13 +-
 .../AbstractReactiveControllerInstrumentation.java | 120 +++++++
 .../AbstractSpring5ReactiveInstrumentation.java    |   2 +-
 .../AbstractSpring5ReactiveInstrumentationV2.java  |   2 +-
 .../InvocableHandlerMethodInstrumentation.java     |  63 ++++
 .../ReactiveControllerInstrumentation.java}        |  11 +-
 .../ReactiveRestControllerInstrumentation.java}    |  15 +-
 .../src/main/resources/skywalking-plugin.def       |  22 ++
 .../spring-plugins/mvc-annotation-commons/pom.xml  |   6 +
 .../apm/plugin/spring/mvc/commons/RequestUtil.java |  29 ++
 .../interceptor/AbstractMethodInterceptor.java     |  59 +++-
 apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml  |   2 +
 .../ResponseExtractorFutureInstrumentation.java    |   7 +
 .../async/define/RestTemplateInstrumentation.java  |   7 +
 .../sync/define/RestTemplateInstrumentation.java   |   7 +
 .../resttemplate-6.x-plugin}/pom.xml               |  22 +-
 .../helper/RestTemplateRuntimeContextHelper.java   |  53 +++
 .../v6x/sync/RestExecuteInterceptor.java}          |  48 +--
 .../v6x/sync/RestRequestInterceptor.java}          |  42 ++-
 .../v6x/sync/RestResponseInterceptor.java}         |  35 +-
 .../sync/define/RestTemplateInstrumentation.java   |  15 +-
 .../src/main/resources/skywalking-plugin.def       |  17 +
 ...ithInetSocketAddressListArgInterceptorTest.java |   2 +-
 .../v2/MemcachedMethodInterceptorTest.java         |  21 +-
 .../apm/plugin/struts2/Struts2InterceptorTest.java |  62 ++--
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../tomcat78x/TomcatInvokeInterceptorTest.java     |  35 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../undertow/v2x/ForwardInterceptorTest.java       |  26 +-
 .../undertow/v2x/RootHandlerInterceptorTest.java   |  25 +-
 .../v2x/RoutingHandlerInterceptorTest.java         |  41 ++-
 .../plugin/undertow/v2x/TracingHandlerTest.java    |  36 +-
 .../vertx3/HttpServerResponseImplInterceptor.java  |   4 +-
 ...edConstructorWithComplexArgInterceptorTest.java |   2 +-
 ...dConstructorWithHostPortArgInterceptorTest.java |   2 +-
 ...torWithInetSocketAddressArgInterceptorTest.java |   2 +-
 ...ithInetSocketAddressListArgInterceptorTest.java |   2 +-
 .../v2/XMemcachedMethodInterceptorTest.java        |  20 +-
 .../meter/CounterConstructInterceptorTest.java     |   7 +-
 .../meter/GaugeConstructInterceptorTest.java       |   7 +-
 .../meter/HistogramConstructInterceptorTest.java   |   7 +-
 .../ConstructorWithSpanBuilderInterceptor.java     |   2 +-
 .../opentracing/SkywalkingSpanActivationTest.java  |  24 +-
 .../toolkit/activation/trace/ActiveSpanTest.java   |  17 +-
 .../trace/CallableOrRunnableInterceptorTest.java   |  22 +-
 .../activation/trace/TagAnnotationTest.java        |  17 +-
 .../activation/trace/TraceAnnotationTest.java      |  16 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../plugin/ehcache/v2/EhcacheInterceptorTest.java  |  55 +--
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../plugin/fastjson/ParseArrayInterceptorTest.java |  23 +-
 .../apm/plugin/fastjson/ParseInterceptorTest.java  |  23 +-
 .../fastjson/ParseObjectInterceptorTest.java       |  23 +-
 .../fastjson/ToJavaObjectInterceptorTest.java      |  25 +-
 .../fastjson/ToJsonBytesInterceptorTest.java       |  27 +-
 .../apm/plugin/fastjson/ToJsonInterceptorTest.java |  27 +-
 .../fastjson/ToJsonStringInterceptorTest.java      |  27 +-
 .../fastjson/WriteJsonStringInterceptorTest.java   |  29 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../plugin/gson/GsonFromJsonInterceptorTest.java   |  21 +-
 .../apm/plugin/gson/GsonToJsonInterceptorTest.java |  17 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../guava/cache/GuavaCacheInterceptorTest.java     |  34 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../jackson/BasicMethodsInterceptorTest.java       |  25 +-
 .../plugin/jackson/ReadValueInterceptorTest.java   |  23 +-
 .../jackson/WriteValueAsBytesInterceptorTest.java  |  25 +-
 .../jackson/WriteValueAsStringInterceptorTest.java |  25 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../v21x/NettyRoutingFilterInterceptorTest.java    |  10 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 ...pClientFinalizerConstructorInterceptorTest.java |  17 +-
 .../v3x/HttpClientFinalizerInterceptorTest.java    |  28 +-
 .../v3x/NettyRoutingFilterInterceptorTest.java     |  15 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../define/ServerWebExchangeInstrumentation.java   |   1 -
 .../trace/ignore/matcher/FastPathMatcher.java      |   2 +-
 .../ignore/TraceIgnorePatternWatcherTest.java      |  14 +-
 .../apm/plugin/trace/ignore/TraceIgnoreTest.java   |  15 +-
 .../zookeeper/ClientCnxnInterceptorTest.java       |  21 +-
 .../org.mockito.plugins.MockMaker                  |   1 +
 .../agent/core/kafka/KafkaProducerManagerTest.java |  14 +-
 .../setup/service-agent/java-agent/Plugin-list.md  |   2 +
 pom.xml                                            | 129 ++++---
 .../tomcat-container/src/main/docker/catalina.sh   |   2 +-
 .../plugin/scenarios/spring-4.3.x-scenario/pom.xml |  11 +-
 .../apm/testcase/restapi/RestCaseController.java   |   1 -
 .../spring-6.x-scenario/config/expectedData.yaml   | 375 +++++++++++++++++++++
 .../spring-6.x-scenario/configuration.yml          |  23 ++
 .../pom.xml                                        |  25 +-
 .../skywalking/apm/testcase/entity/User.java       |  40 ++-
 .../testcase/implinterface/TestCaseController.java |  20 +-
 .../testcase/implinterface/TestCaseInterface.java  |  20 +-
 .../apm/testcase/inherit/ChildController.java      |  17 +-
 .../apm/testcase/inherit/ParentController.java     |  19 +-
 .../apm/testcase/restapi/RestCaseController.java   |   1 -
 .../resttemplate/RestTemplateController.java       |  85 +++++
 .../apm/testcase/spring3/CaseController.java       |  28 +-
 .../spring3/component/TestComponentBean.java       |  16 +-
 .../testcase/spring3/dao/TestRepositoryBean.java   |  16 +-
 .../testcase/spring3/service/TestServiceBean.java  |  25 +-
 .../src/main/resources/log4j2.xml                  |  32 +-
 .../src/main/webapp/WEB-INF/spring-mvc-servlet.xml |  30 +-
 .../src/main/webapp/WEB-INF/web.xml                |  35 +-
 .../spring-6.x-scenario/support-version.list       |  17 +
 327 files changed, 3965 insertions(+), 2595 deletions(-)

diff --git a/.github/actions/build/action.yml b/.github/actions/build/action.yml
index affd2a3201..a844afc2ca 100644
--- a/.github/actions/build/action.yml
+++ b/.github/actions/build/action.yml
@@ -44,6 +44,10 @@ runs:
         path: ~/.m2/repository
         key: ${{ runner.os }}-maven-agent-test-${{ hashFiles('**/pom.xml') }}
         restore-keys: ${{ runner.os }}-maven-agent-test-
+    - uses: actions/setup-java@v2
+      with:
+        distribution: temurin
+        java-version: 17
     - name: Build SkyWalking Agent
       shell: bash
       run: |
diff --git a/.github/actions/run/action.yml b/.github/actions/run/action.yml
index 57b711de0a..8010f38efa 100644
--- a/.github/actions/run/action.yml
+++ b/.github/actions/run/action.yml
@@ -51,5 +51,11 @@ runs:
       shell: bash
       run: |
         echo "::group::Run Plugin Test ${{ inputs.test_case }}"
-        bash test/plugin/run.sh --image_version=${{ inputs.java_version }}-1.0.0 ${{ inputs.test_case }}
+        bash test/plugin/run.sh ${{ inputs.test_case }}
         echo "::endgroup::"
+    - uses: actions/upload-artifact@v2
+      name: Upload Agent
+      if: always()
+      with:
+        name: test/plugin/workspace
+        path: test-plugin-workspace
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index b643ada247..467672af1d 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -51,10 +51,7 @@ jobs:
       fail-fast: true
       matrix:
         os: [ ubuntu, macos, windows ]
-        java-version: [ 8 ]
-        include:
-          - os: ubuntu
-            java-version: 11
+        java-version: [ 17 ]
     steps:
       - uses: actions/checkout@v2
         with:
@@ -67,15 +64,15 @@ jobs:
           restore-keys: ${{ runner.os }}-maven-ci-
       - uses: actions/setup-java@v2
         with:
-          distribution: adopt
+          distribution: temurin
           java-version: ${{ matrix.java-version }}
       - name: Check Javaagent Plugin List
         run: tools/plugin/check-javaagent-plugin-list.sh
       - name: Install and Test
-        if: matrix.java-version == '8' && matrix.os != 'windows'
+        if: matrix.os != 'windows'
         run: ./mvnw -q --batch-mode clean verify install javadoc:javadoc
       - name: Install and Test
-        if: matrix.java-version == '11' || matrix.os == 'windows'
+        if: matrix.os == 'windows'
         run: ./mvnw -q --batch-mode clean verify install
 
   ci:
diff --git a/.github/workflows/plugins-tomcat10-test.0.yaml b/.github/workflows/plugins-jdk17-test.1.yaml
similarity index 85%
copy from .github/workflows/plugins-tomcat10-test.0.yaml
copy to .github/workflows/plugins-jdk17-test.1.yaml
index cc16810d28..fce64be04a 100644
--- a/.github/workflows/plugins-tomcat10-test.0.yaml
+++ b/.github/workflows/plugins-jdk17-test.1.yaml
@@ -32,7 +32,7 @@ on:
       - test/ci/*
 
 concurrency:
-  group: plugins-tomcat10-${{ github.event.pull_request.number || github.ref }}
+  group: plugins-jdk17-${{ github.event.pull_request.number || github.ref }}
   cancel-in-progress: true
 
 jobs:
@@ -47,7 +47,8 @@ jobs:
       - name: Build
         uses: ./.github/actions/build
         with:
-          base_image_tomcat: tomcat:10.0.22-jdk8
+          base_image_java: eclipse-temurin:17-jdk
+          base_image_tomcat: tomcat:10.1-jdk17-temurin
 
   test:
     needs: [ build ]
@@ -57,16 +58,16 @@ jobs:
     strategy:
       matrix:
         case:
-          - tomcat-10x-scenario
+          - spring-6.x-scenario
     steps:
       - uses: actions/checkout@v2
         with:
           submodules: true
       - uses: actions/setup-java@v2
         with:
-          distribution: adopt
-          java-version: 8
-      - name: Run Plugin Test
+          distribution: 'temurin'
+          java-version: '17'
+      - name: Run Test
         uses: ./.github/actions/run
         with:
           test_case: ${{ matrix.case }}
diff --git a/.github/workflows/plugins-test.0.yaml b/.github/workflows/plugins-test.0.yaml
index ab768b74a3..e1df6d6732 100644
--- a/.github/workflows/plugins-test.0.yaml
+++ b/.github/workflows/plugins-test.0.yaml
@@ -94,8 +94,8 @@ jobs:
           submodules: true
       - uses: actions/setup-java@v2
         with:
-          distribution: adopt
-          java-version: 8
+          distribution: temurin
+          java-version: 17
       - name: Run Plugin Test
         uses: ./.github/actions/run
         with:
diff --git a/.github/workflows/plugins-test.1.yaml b/.github/workflows/plugins-test.1.yaml
index 2b4bfa926c..c2b1c17efb 100644
--- a/.github/workflows/plugins-test.1.yaml
+++ b/.github/workflows/plugins-test.1.yaml
@@ -87,8 +87,8 @@ jobs:
           submodules: true
       - uses: actions/setup-java@v2
         with:
-          distribution: adopt
-          java-version: 8
+          distribution: temurin
+          java-version: 17
       - name: Run Plugin Test
         uses: ./.github/actions/run
         with:
diff --git a/.github/workflows/plugins-test.2.yaml b/.github/workflows/plugins-test.2.yaml
index cb076b5fe1..713f0a2bb8 100644
--- a/.github/workflows/plugins-test.2.yaml
+++ b/.github/workflows/plugins-test.2.yaml
@@ -86,8 +86,8 @@ jobs:
           submodules: true
       - uses: actions/setup-java@v2
         with:
-          distribution: adopt
-          java-version: 8
+          distribution: temurin
+          java-version: 17
       - name: Run Plugin Test
         uses: ./.github/actions/run
         with:
diff --git a/.github/workflows/plugins-test.3.yaml b/.github/workflows/plugins-test.3.yaml
index 0a8cdab1d9..f467b1cfa0 100644
--- a/.github/workflows/plugins-test.3.yaml
+++ b/.github/workflows/plugins-test.3.yaml
@@ -114,8 +114,8 @@ jobs:
           submodules: true
       - uses: actions/setup-java@v2
         with:
-          distribution: adopt
-          java-version: 8
+          distribution: temurin
+          java-version: 17
       - name: Install Oracle Libs
         if: matrix.case == 'oracle-scenario'
         run: |
diff --git a/.github/workflows/plugins-tomcat10-test.0.yaml b/.github/workflows/plugins-tomcat10-test.0.yaml
index cc16810d28..adce1404ee 100644
--- a/.github/workflows/plugins-tomcat10-test.0.yaml
+++ b/.github/workflows/plugins-tomcat10-test.0.yaml
@@ -64,8 +64,8 @@ jobs:
           submodules: true
       - uses: actions/setup-java@v2
         with:
-          distribution: adopt
-          java-version: 8
+          distribution: temurin
+          java-version: 17
       - name: Run Plugin Test
         uses: ./.github/actions/run
         with:
diff --git a/.licenserc.yaml b/.licenserc.yaml
index 5c9130433f..ae96eaac94 100644
--- a/.licenserc.yaml
+++ b/.licenserc.yaml
@@ -22,6 +22,7 @@ header:
     copyright-owner: Apache Software Foundation
 
   paths-ignore:
+    - 'org.mockito.plugins.MockMaker'
     - '.github/PULL_REQUEST_TEMPLATE'
     - '**/.gitignore'
     - '.gitmodules'
diff --git a/apm-application-toolkit/apm-toolkit-micrometer-registry/pom.xml b/apm-application-toolkit/apm-toolkit-micrometer-registry/pom.xml
index 29d8220a38..f6122c212e 100644
--- a/apm-application-toolkit/apm-toolkit-micrometer-registry/pom.xml
+++ b/apm-application-toolkit/apm-toolkit-micrometer-registry/pom.xml
@@ -44,5 +44,11 @@
             <artifactId>micrometer-core</artifactId>
             <version>${micrometer-core.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>apm-test-tools</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/apm-application-toolkit/apm-toolkit-micrometer-registry/src/test/java/org/apache/skywalking/apm/meter/micrometer/SkywalkingCounterTest.java b/apm-application-toolkit/apm-toolkit-micrometer-registry/src/test/java/org/apache/skywalking/apm/meter/micrometer/SkywalkingCounterTest.java
index a0dbd1ee4a..a03e7bd50b 100644
--- a/apm-application-toolkit/apm-toolkit-micrometer-registry/src/test/java/org/apache/skywalking/apm/meter/micrometer/SkywalkingCounterTest.java
+++ b/apm-application-toolkit/apm-toolkit-micrometer-registry/src/test/java/org/apache/skywalking/apm/meter/micrometer/SkywalkingCounterTest.java
@@ -18,17 +18,16 @@
 
 package org.apache.skywalking.apm.meter.micrometer;
 
-import io.micrometer.core.instrument.Counter;
+import java.util.Arrays;
+import org.apache.skywalking.apm.agent.test.helper.FieldGetter;
 import org.junit.Assert;
 import org.junit.Test;
-import org.powermock.reflect.Whitebox;
-
-import java.util.Arrays;
+import io.micrometer.core.instrument.Counter;
 
 public class SkywalkingCounterTest {
 
     @Test
-    public void testCounter() {
+    public void testCounter() throws IllegalAccessException, NoSuchFieldException {
         // Creating a simplified micrometer counter
         final SkywalkingMeterRegistry registry = new SkywalkingMeterRegistry();
         Counter counter = registry.counter("test_counter", "skywalking", "test");
@@ -36,21 +35,19 @@ public class SkywalkingCounterTest {
         // Check Skywalking counter type
         Assert.assertTrue(counter instanceof SkywalkingCounter);
         final SkywalkingCounter skywalkingCounter = (SkywalkingCounter) counter;
-        final org.apache.skywalking.apm.toolkit.meter.Counter realCounter =
-            Whitebox.getInternalState(skywalkingCounter, "counter");
+        final org.apache.skywalking.apm.toolkit.meter.Counter realCounter = FieldGetter.getValue(skywalkingCounter, "counter");
         Assert.assertNotNull(realCounter);
     }
 
     @Test
-    public void testRateCounter() {
+    public void testRateCounter() throws IllegalAccessException, NoSuchFieldException {
         final SkywalkingMeterRegistry registry = new SkywalkingMeterRegistry(new SkywalkingConfig(Arrays.asList("test_rate_counter")));
         final Counter counter = registry.counter("test_rate_counter", "skywalking", "test");
 
         // Check Skywalking counter type
         Assert.assertTrue(counter instanceof SkywalkingCounter);
         final SkywalkingCounter skywalkingCounter = (SkywalkingCounter) counter;
-        final org.apache.skywalking.apm.toolkit.meter.Counter realCounter =
-            Whitebox.getInternalState(skywalkingCounter, "counter");
+        final org.apache.skywalking.apm.toolkit.meter.Counter realCounter = FieldGetter.getValue(skywalkingCounter, "counter");
         Assert.assertNotNull(realCounter);
     }
 }
diff --git a/apm-application-toolkit/apm-toolkit-micrometer-registry/src/test/java/org/apache/skywalking/apm/meter/micrometer/SkywalkingMeterRegistryTest.java b/apm-application-toolkit/apm-toolkit-micrometer-registry/src/test/java/org/apache/skywalking/apm/meter/micrometer/SkywalkingMeterRegistryTest.java
index 3d237803e0..d958de404f 100644
--- a/apm-application-toolkit/apm-toolkit-micrometer-registry/src/test/java/org/apache/skywalking/apm/meter/micrometer/SkywalkingMeterRegistryTest.java
+++ b/apm-application-toolkit/apm-toolkit-micrometer-registry/src/test/java/org/apache/skywalking/apm/meter/micrometer/SkywalkingMeterRegistryTest.java
@@ -88,7 +88,6 @@ public class SkywalkingMeterRegistryTest {
             .register(registry);
     }
 
-
     /**
      * Working on {@link io.micrometer.core.instrument.Gauge} check
      */
diff --git a/apm-commons/apm-datacarrier/pom.xml b/apm-commons/apm-datacarrier/pom.xml
index e7d67d7af3..85e4527821 100644
--- a/apm-commons/apm-datacarrier/pom.xml
+++ b/apm-commons/apm-datacarrier/pom.xml
@@ -1,23 +1,33 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ 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.
+  ~ 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
+  ~
+(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.
+  ~
+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.
+  ~
+limitations under the License.
   ~
   -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <artifactId>java-agent-commons</artifactId>
         <groupId>org.apache.skywalking</groupId>
@@ -33,6 +43,12 @@
             <artifactId>jmh-generator-annprocess</artifactId>
             <scope>test</scope>
         </dependency>
+
+        <dependency>
+            <groupId>uk.org.webcompere</groupId>
+            <artifactId>system-stubs-junit4</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/DataCarrierTest.java b/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/DataCarrierTest.java
index 5d20cce8e1..d548af55e9 100644
--- a/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/DataCarrierTest.java
+++ b/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/DataCarrierTest.java
@@ -29,43 +29,37 @@ import org.apache.skywalking.apm.commons.datacarrier.partition.ProducerThreadPar
 import org.apache.skywalking.apm.commons.datacarrier.partition.SimpleRollingPartitioner;
 import org.junit.Assert;
 import org.junit.Test;
-import org.powermock.api.support.membermodification.MemberModifier;
 
 public class DataCarrierTest {
     @Test
-    public void testCreateDataCarrier() throws IllegalAccessException {
+    public void testCreateDataCarrier() throws IllegalAccessException, NoSuchFieldException {
         DataCarrier<SampleData> carrier = new DataCarrier<>(5, 100, BufferStrategy.IF_POSSIBLE);
 
-        Channels<SampleData> channels = (Channels<SampleData>) (MemberModifier.field(DataCarrier.class, "channels")
-                                                                              .get(carrier));
+        Channels<SampleData> channels = FieldGetter.getValue(carrier, "channels");
         Assert.assertEquals(5, channels.getChannelSize());
 
         QueueBuffer<SampleData> buffer = channels.getBuffer(0);
         Assert.assertEquals(100, buffer.getBufferSize());
 
-        Assert.assertEquals(MemberModifier.field(buffer.getClass(), "strategy").get(buffer), BufferStrategy.IF_POSSIBLE);
-        Assert.assertEquals(MemberModifier.field(buffer.getClass(), "strategy")
-                                          .get(buffer), BufferStrategy.IF_POSSIBLE);
+        Assert.assertEquals(FieldGetter.getValue(buffer, "strategy"), BufferStrategy.IF_POSSIBLE);
+        Assert.assertEquals(FieldGetter.getValue(buffer, "strategy"), BufferStrategy.IF_POSSIBLE);
 
-        Assert.assertEquals(MemberModifier.field(Channels.class, "dataPartitioner")
-                                          .get(channels)
-                                          .getClass(), SimpleRollingPartitioner.class);
+        Assert.assertEquals(FieldGetter.getValue(channels, "dataPartitioner")
+                                       .getClass(), SimpleRollingPartitioner.class);
         carrier.setPartitioner(new ProducerThreadPartitioner<SampleData>());
-        Assert.assertEquals(MemberModifier.field(Channels.class, "dataPartitioner")
-                                          .get(channels)
-                                          .getClass(), ProducerThreadPartitioner.class);
+        Assert.assertEquals(FieldGetter.getValue(channels, "dataPartitioner")
+                                       .getClass(), ProducerThreadPartitioner.class);
     }
 
     @Test
-    public void testProduce() throws IllegalAccessException {
+    public void testProduce() throws IllegalAccessException, NoSuchFieldException {
         DataCarrier<SampleData> carrier = new DataCarrier<SampleData>(2, 100);
         Assert.assertTrue(carrier.produce(new SampleData().setName("a")));
         Assert.assertTrue(carrier.produce(new SampleData().setName("b")));
         Assert.assertTrue(carrier.produce(new SampleData().setName("c")));
         Assert.assertTrue(carrier.produce(new SampleData().setName("d")));
 
-        Channels<SampleData> channels = (Channels<SampleData>) (MemberModifier.field(DataCarrier.class, "channels")
-                                                                              .get(carrier));
+        Channels<SampleData> channels = FieldGetter.getValue(carrier, "channels");
         QueueBuffer<SampleData> buffer1 = channels.getBuffer(0);
 
         List result = new ArrayList();
@@ -80,7 +74,7 @@ public class DataCarrierTest {
     }
 
     @Test
-    public void testIfPossibleProduce() throws IllegalAccessException {
+    public void testIfPossibleProduce() throws IllegalAccessException, NoSuchFieldException {
         DataCarrier<SampleData> carrier = new DataCarrier<SampleData>(2, 100, BufferStrategy.IF_POSSIBLE);
 
         for (int i = 0; i < 200; i++) {
@@ -91,8 +85,7 @@ public class DataCarrierTest {
             Assert.assertFalse(carrier.produce(new SampleData().setName("d" + i + "_2")));
         }
 
-        Channels<SampleData> channels = (Channels<SampleData>) (MemberModifier.field(DataCarrier.class, "channels")
-                                                                              .get(carrier));
+        Channels<SampleData> channels = FieldGetter.getValue(carrier, "channels");
         QueueBuffer<SampleData> buffer1 = channels.getBuffer(0);
         List result = new ArrayList();
         buffer1.obtain(result);
diff --git a/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/EnvUtilTest.java b/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/EnvUtilTest.java
index 9b1a8525a8..435fda9a9b 100644
--- a/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/EnvUtilTest.java
+++ b/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/EnvUtilTest.java
@@ -18,29 +18,25 @@
 
 package org.apache.skywalking.apm.commons.datacarrier;
 
+import static org.junit.Assert.assertEquals;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnitRunner;
+import uk.org.webcompere.systemstubs.rules.EnvironmentVariablesRule;
 
-@RunWith(PowerMockRunner.class)
-@PrepareForTest(EnvUtil.class)
+@RunWith(MockitoJUnitRunner.class)
 public class EnvUtilTest {
+    @Rule
+    public EnvironmentVariablesRule environmentVariablesRule = new EnvironmentVariablesRule();
 
     @Before
     public void before() {
-
-        PowerMockito.mockStatic(System.class);
-
-        when(System.getenv("myInt")).thenReturn("123");
-        when(System.getenv("wrongInt")).thenReturn("wrong123");
-        when(System.getenv("myLong")).thenReturn("12345678901234567");
-        when(System.getenv("wrongLong")).thenReturn("wrong123");
+        environmentVariablesRule.set("myInt", "123");
+        environmentVariablesRule.set("wrongInt", "wrong123");
+        environmentVariablesRule.set("myLong", "12345678901234567");
+        environmentVariablesRule.set("wrongLong", "wrong123");
     }
 
     @Test
@@ -55,4 +51,4 @@ public class EnvUtilTest {
         assertEquals(987654321987654321L, EnvUtil.getLong("wrongLong", 987654321987654321L));
     }
 
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/optional-plugins/shenyu-2.4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/shenyu/v24x/define/ServerWebExchangeInstrumentation.java b/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/FieldGetter.java
similarity index 60%
copy from apm-sniffer/optional-plugins/shenyu-2.4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/shenyu/v24x/define/ServerWebExchangeInstrumentation.java
copy to apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/FieldGetter.java
index d04e69f5e1..3c636c596e 100644
--- a/apm-sniffer/optional-plugins/shenyu-2.4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/shenyu/v24x/define/ServerWebExchangeInstrumentation.java
+++ b/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/FieldGetter.java
@@ -16,18 +16,15 @@
  *
  */
 
-package org.apache.skywalking.apm.plugin.shenyu.v24x.define;
+package org.apache.skywalking.apm.commons.datacarrier;
 
+import java.lang.reflect.Field;
 
-/**
- * Since all plugins have access to the ServerWebExchange and the plugins are processed in asynchronous threads,
- * we can put the snapshot into the enhanced ServerWebExchange object.
- */
-public class ServerWebExchangeInstrumentation extends
-        org.apache.skywalking.apm.plugin.spring.webflux.v5.define.ServerWebExchangeInstrumentation {
-
-    @Override
-    protected String[] witnessClasses() {
-        return new String[]{"org.apache.shenyu.plugin.global.GlobalPlugin"};
+public class FieldGetter {
+    public static <T> T getValue(Object instance,
+        String fieldName) throws IllegalAccessException, NoSuchFieldException {
+        Field field = instance.getClass().getDeclaredField(fieldName);
+        field.setAccessible(true);
+        return (T) field.get(instance);
     }
 }
diff --git a/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/consumer/ConsumeDriverTest.java b/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/consumer/ConsumeDriverTest.java
index b96e08bb2a..b78c9ade2f 100644
--- a/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/consumer/ConsumeDriverTest.java
+++ b/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/consumer/ConsumeDriverTest.java
@@ -18,41 +18,39 @@
 
 package org.apache.skywalking.apm.commons.datacarrier.consumer;
 
+import org.apache.skywalking.apm.commons.datacarrier.FieldGetter;
 import org.apache.skywalking.apm.commons.datacarrier.SampleData;
 import org.apache.skywalking.apm.commons.datacarrier.buffer.BufferStrategy;
 import org.apache.skywalking.apm.commons.datacarrier.buffer.Channels;
 import org.apache.skywalking.apm.commons.datacarrier.partition.SimpleRollingPartitioner;
 import org.junit.Assert;
 import org.junit.Test;
-import org.powermock.api.support.membermodification.MemberModifier;
 
 public class ConsumeDriverTest {
     @Test
-    public void testBeginConsumeDriver() throws IllegalAccessException {
+    public void testBeginConsumeDriver() throws IllegalAccessException, NoSuchFieldException {
         Channels<SampleData> channels = new Channels<SampleData>(2, 100, new SimpleRollingPartitioner<SampleData>(), BufferStrategy.BLOCKING);
         ConsumeDriver<SampleData> pool = new ConsumeDriver<SampleData>("default", channels, new SampleConsumer(), 2, 20);
         pool.begin(channels);
 
-        ConsumerThread[] threads = (ConsumerThread[]) MemberModifier.field(ConsumeDriver.class, "consumerThreads")
-                                                                    .get(pool);
+        ConsumerThread[] threads = FieldGetter.getValue(pool, "consumerThreads");
         Assert.assertEquals(2, threads.length);
         Assert.assertTrue(threads[0].isAlive());
         Assert.assertTrue(threads[1].isAlive());
     }
 
     @Test
-    public void testCloseConsumeDriver() throws InterruptedException, IllegalAccessException {
+    public void testCloseConsumeDriver() throws InterruptedException, IllegalAccessException, NoSuchFieldException {
         Channels<SampleData> channels = new Channels<SampleData>(2, 100, new SimpleRollingPartitioner<SampleData>(), BufferStrategy.BLOCKING);
         ConsumeDriver<SampleData> pool = new ConsumeDriver<SampleData>("default", channels, new SampleConsumer(), 2, 20);
         pool.begin(channels);
 
         Thread.sleep(5000);
         pool.close(channels);
-        ConsumerThread[] threads = (ConsumerThread[]) MemberModifier.field(ConsumeDriver.class, "consumerThreads")
-                                                                    .get(pool);
+        ConsumerThread[] threads = FieldGetter.getValue(pool, "consumerThreads");
 
         Assert.assertEquals(2, threads.length);
-        Assert.assertFalse((Boolean) MemberModifier.field(ConsumerThread.class, "running").get(threads[0]));
-        Assert.assertFalse((Boolean) MemberModifier.field(ConsumerThread.class, "running").get(threads[1]));
+        Assert.assertFalse(FieldGetter.getValue(threads[0], "running"));
+        Assert.assertFalse(FieldGetter.getValue(threads[1], "running"));
     }
 }
diff --git a/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/consumer/ConsumerTest.java b/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/consumer/ConsumerTest.java
index 17942d504b..173af5437a 100644
--- a/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/consumer/ConsumerTest.java
+++ b/apm-commons/apm-datacarrier/src/test/java/org/apache/skywalking/apm/commons/datacarrier/consumer/ConsumerTest.java
@@ -24,10 +24,10 @@ import java.util.List;
 import java.util.Properties;
 import java.util.concurrent.LinkedBlockingQueue;
 import org.apache.skywalking.apm.commons.datacarrier.DataCarrier;
+import org.apache.skywalking.apm.commons.datacarrier.FieldGetter;
 import org.apache.skywalking.apm.commons.datacarrier.SampleData;
 import org.junit.Assert;
 import org.junit.Test;
-import org.powermock.api.support.membermodification.MemberModifier;
 
 public class ConsumerTest {
     public static LinkedBlockingQueue<SampleData> BUFFER = new LinkedBlockingQueue<SampleData>();
@@ -35,7 +35,7 @@ public class ConsumerTest {
     public static boolean IS_OCCUR_ERROR = false;
 
     @Test
-    public void testConsumerLessThanChannel() throws IllegalAccessException {
+    public void testConsumerLessThanChannel() throws IllegalAccessException, NoSuchFieldException {
 
         final DataCarrier<SampleData> carrier = new DataCarrier<SampleData>(2, 100);
 
@@ -127,11 +127,10 @@ public class ConsumerTest {
         }
     }
 
-    private IConsumer getConsumer(DataCarrier<SampleData> carrier) throws IllegalAccessException {
-        ConsumeDriver pool = (ConsumeDriver) MemberModifier.field(DataCarrier.class, "driver").get(carrier);
-        ConsumerThread[] threads = (ConsumerThread[]) MemberModifier.field(ConsumeDriver.class, "consumerThreads")
-                                                                    .get(pool);
+    private IConsumer getConsumer(DataCarrier<SampleData> carrier) throws IllegalAccessException, NoSuchFieldException {
+        ConsumeDriver pool = FieldGetter.getValue(carrier, "driver");
+        ConsumerThread[] threads = FieldGetter.getValue(pool, "consumerThreads");
 
-        return (IConsumer) MemberModifier.field(ConsumerThread.class, "consumer").get(threads[0]);
+        return FieldGetter.getValue(threads[0], "consumer");
     }
 }
diff --git a/apm-commons/apm-datacarrier/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-commons/apm-datacarrier/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-commons/apm-datacarrier/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-commons/apm-util/src/main/java/org/apache/skywalking/apm/util/ConfigInitializer.java b/apm-commons/apm-util/src/main/java/org/apache/skywalking/apm/util/ConfigInitializer.java
index f09af7458a..c350b803ef 100644
--- a/apm-commons/apm-util/src/main/java/org/apache/skywalking/apm/util/ConfigInitializer.java
+++ b/apm-commons/apm-util/src/main/java/org/apache/skywalking/apm/util/ConfigInitializer.java
@@ -127,7 +127,6 @@ public class ConfigInitializer {
         return collection;
     }
 
-
     /**
      * Convert string value to typical type.
      *
diff --git a/apm-commons/apm-util/src/test/java/org/apache/skywalking/apm/util/ConfigInitializerTest.java b/apm-commons/apm-util/src/test/java/org/apache/skywalking/apm/util/ConfigInitializerTest.java
index 44420e4067..74d8ed5954 100644
--- a/apm-commons/apm-util/src/test/java/org/apache/skywalking/apm/util/ConfigInitializerTest.java
+++ b/apm-commons/apm-util/src/test/java/org/apache/skywalking/apm/util/ConfigInitializerTest.java
@@ -21,10 +21,10 @@ package org.apache.skywalking.apm.util;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.mockito.internal.util.collections.Sets;
 
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -68,8 +68,8 @@ public class ConfigInitializerTest {
         Assert.assertArrayEquals(new Integer[]{1, 2, 3, 4}, TestPropertiesObject.Level1Object.LIST_INT_ATTR_ED2.toArray());
         Assert.assertArrayEquals(new String[]{}, TestPropertiesObject.Level1Object.SET_STR_EMPTY_ATTR.toArray());
         Assert.assertArrayEquals(new Boolean[]{true, false}, TestPropertiesObject.Level1Object.LIST_BOOL_ATTR.toArray());
-        Assert.assertEquals(Sets.newSet("a", "b", "c", "d"), TestPropertiesObject.Level1Object.SET_STR_ATTR);
-        Assert.assertEquals(Sets.newSet(1, 2, 3, 4), TestPropertiesObject.Level1Object.SET_INT_ATTR);
+        Assert.assertEquals(new HashSet<>(Arrays.asList("a", "b", "c", "d")), TestPropertiesObject.Level1Object.SET_STR_ATTR);
+        Assert.assertEquals(new HashSet<>(Arrays.asList(1, 2, 3, 4)), TestPropertiesObject.Level1Object.SET_INT_ATTR);
         Assert.assertArrayEquals(new Boolean[]{true}, TestPropertiesObject.Level1Object.SET_BOOL_ATTR.toArray());
         Assert.assertEquals(TestColorEnum.RED, TestPropertiesObject.Level1Object.Level2Object.ENUM_ATTR);
         //make sure that when descs is empty,toString() work right;
diff --git a/apm-sniffer/apm-agent-core/pom.xml b/apm-sniffer/apm-agent-core/pom.xml
index 07fc67f556..193fad493c 100644
--- a/apm-sniffer/apm-agent-core/pom.xml
+++ b/apm-sniffer/apm-agent-core/pom.xml
@@ -1,22 +1,32 @@
 <!--
   ~ 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.
+  ~ 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
+  ~
+(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.
+  ~
+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.
+  ~
+limitations under the License.
   ~
   -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
@@ -33,7 +43,8 @@
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <generateGitPropertiesFilename>${project.build.outputDirectory}/skywalking-agent-version.properties</generateGitPropertiesFilename>
+        <generateGitPropertiesFilename>
+            ${project.build.outputDirectory}/skywalking-agent-version.properties</generateGitPropertiesFilename>
         <guava.version>30.1.1-jre</guava.version>
         <wiremock.version>2.6.0</wiremock.version>
         <netty-tcnative-boringssl-static.version>2.0.7.Final</netty-tcnative-boringssl-static.version>
@@ -118,6 +129,7 @@
             </exclusions>
             <scope>test</scope>
         </dependency>
+
         <dependency>
             <groupId>org.apache.skywalking</groupId>
             <artifactId>java-agent-datacarrier</artifactId>
@@ -187,12 +199,15 @@
                     </execution>
                 </executions>
                 <configuration>
-                    <failOnNoGitDirectory>false</failOnNoGitDirectory>
+                    <failOnNoGitDirectory>
+                        false</failOnNoGitDirectory>
                     <generateGitPropertiesFile>true</generateGitPropertiesFile>
-                    <generateGitPropertiesFilename>${generateGitPropertiesFilename}</generateGitPropertiesFilename>
+                    <generateGitPropertiesFilename>
+                        ${generateGitPropertiesFilename}</generateGitPropertiesFilename>
                     <commitIdGenerationMode>full</commitIdGenerationMode>
                     <includeOnlyProperties>
-                        <includeOnlyProperty>git.build.version</includeOnlyProperty>
+                        <includeOnlyProperty>
+                            git.build.version</includeOnlyProperty>
                         <includeOnlyProperty>^git.commit.id.(abbrev|full)$</includeOnlyProperty>
                     </includeOnlyProperties>
                 </configuration>
@@ -208,52 +223,72 @@
                         <configuration>
                             <artifactSet>
                                 <excludes>
-                                    <exclude>net.bytebuddy:byte-buddy:jar:</exclude>
-                                    <exclude>com.google.errorprone:error_prone_annotations:jar:</exclude>
-                                    <exclude>com.google.code.findbugs:jsr305:jar:</exclude>
-                                    <exclude>com.google.android:annotations:jar:</exclude>
-                                    <exclude>com.google.api.grpc:proto-google-common-protos:jar:</exclude>
-                                    <exclude>org.checkerframework:checker-compat-qual:jar:</exclude>
-                                    <exclude>org.codehaus.mojo:animal-sniffer-annotations:jar:</exclude>
+                                    <exclude>
+                                        net.bytebuddy:byte-buddy:jar:</exclude>
+                                    <exclude>
+                                        com.google.errorprone:error_prone_annotations:jar:</exclude>
+                                    <exclude>
+                                        com.google.code.findbugs:jsr305:jar:</exclude>
+                                    <exclude>
+                                        com.google.android:annotations:jar:</exclude>
+                                    <exclude>
+                                        com.google.api.grpc:proto-google-common-protos:jar:</exclude>
+                                    <exclude>
+                                        org.checkerframework:checker-compat-qual:jar:</exclude>
+                                    <exclude>
+                                        org.codehaus.mojo:animal-sniffer-annotations:jar:</exclude>
                                 </excludes>
                             </artifactSet>
                             <relocations>
                                 <relocation>
-                                    <pattern>${shade.com.google.source}</pattern>
-                                    <shadedPattern>${shade.com.google.target}</shadedPattern>
+                                    <pattern>
+                                        ${shade.com.google.source}</pattern>
+                                    <shadedPattern>
+                                        ${shade.com.google.target}</shadedPattern>
                                 </relocation>
                                 <relocation>
-                                    <pattern>${shade.io.grpc.source}</pattern>
+                                    <pattern>
+                                        ${shade.io.grpc.source}</pattern>
                                     <shadedPattern>${shade.io.grpc.target}</shadedPattern>
                                 </relocation>
                                 <relocation>
-                                    <pattern>${shade.io.netty.source}</pattern>
+                                    <pattern>
+                                        ${shade.io.netty.source}</pattern>
                                     <shadedPattern>${shade.io.netty.target}</shadedPattern>
                                 </relocation>
                                 <relocation>
-                                    <pattern>${shade.io.opencensus.source}</pattern>
-                                    <shadedPattern>${shade.io.opencensus.target}</shadedPattern>
+                                    <pattern>
+                                        ${shade.io.opencensus.source}</pattern>
+                                    <shadedPattern>
+                                        ${shade.io.opencensus.target}</shadedPattern>
                                 </relocation>
                                 <relocation>
-                                    <pattern>${shade.io.perfmark.source}</pattern>
-                                    <shadedPattern>${shade.io.perfmark.target}</shadedPattern>
+                                    <pattern>
+                                        ${shade.io.perfmark.source}</pattern>
+                                    <shadedPattern>
+                                        ${shade.io.perfmark.target}</shadedPattern>
                                 </relocation>
                                 <relocation>
-                                    <pattern>${shade.org.slf4j.source}</pattern>
+                                    <pattern>
+                                        ${shade.org.slf4j.source}</pattern>
                                     <shadedPattern>${shade.org.slf4j.target}</shadedPattern>
                                 </relocation>
                             </relocations>
                             <filters>
                                 <filter>
-                                    <artifact>com.google.protobuf:protobuf-java</artifact>
+                                    <artifact>
+                                        com.google.protobuf:protobuf-java</artifact>
                                     <excludes>
-                                        <exclude>google/protobuf/*.proto</exclude>
-                                        <exclude>google/protobuf/compiler/*.proto</exclude>
+                                        <exclude>
+                                            google/protobuf/*.proto</exclude>
+                                        <exclude>
+                                            google/protobuf/compiler/*.proto</exclude>
                                     </excludes>
                                 </filter>
                             </filters>
                             <transformers>
-                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
+                                <transformer
+                                    implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                             </transformers>
                         </configuration>
                     </execution>
@@ -279,15 +314,29 @@
                         <configuration>
                             <target>
                                 <echo message="unjar" />
-                                <unzip src="${project.build.directory}/${project.artifactId}-${project.version}.jar" dest="${project.build.directory}/unpacked/" />
+                                <unzip
+                                    src="${project.build.directory}/${project.artifactId}-${project.version}.jar"
+                                    dest="${project.build.directory}/unpacked/" />
                                 <echo message="rename service providers in META-INF/services" />
-                                <move file="${project.build.directory}/unpacked/META-INF/native/libnetty_tcnative_osx_aarch_64.jnilib" tofile="${project.build.directory}/unpacked/META-INF/native/liborg_apache_skywalking_apm_dependencies_netty_tcnative_osx_aarch_64.jnilib" />
-                                <move file="${project.build.directory}/unpacked/META-INF/native/libnetty_tcnative_linux_aarch_64.so" tofile="${project.build.directory}/unpacked/META-INF/native/liborg_apache_skywalking_apm_dependencies_netty_tcnative_linux_aarch_64.so" />
-                                <move file="${project.build.directory}/unpacked/META-INF/native/libnetty_tcnative_osx_x86_64.jnilib" tofile="${project.build.directory}/unpacked/META-INF/native/liborg_apache_skywalking_apm_dependencies_netty_tcnative_osx_x86_64.jnilib" />
-                                <move file="${project.build.directory}/unpacked/META-INF/native/libnetty_tcnative_linux_x86_64.so" tofile="${project.build.directory}/unpacked/META-INF/native/liborg_apache_skywalking_apm_dependencies_netty_tcnative_linux_x86_64.so" />
-                                <move file="${project.build.directory}/unpacked/META-INF/native/netty_tcnative_windows_x86_64.dll" tofile="${project.build.directory}/unpacked/META-INF/native/org_apache_skywalking_apm_dependencies_netty_tcnative_windows_x86_64.dll" />
+                                <move
+                                    file="${project.build.directory}/unpacked/META-INF/native/libnetty_tcnative_osx_aarch_64.jnilib"
+                                    tofile="${project.build.directory}/unpacked/META-INF/native/liborg_apache_skywalking_apm_dependencies_netty_tcnative_osx_aarch_64.jnilib" />
+                                <move
+                                    file="${project.build.directory}/unpacked/META-INF/native/libnetty_tcnative_linux_aarch_64.so"
+                                    tofile="${project.build.directory}/unpacked/META-INF/native/liborg_apache_skywalking_apm_dependencies_netty_tcnative_linux_aarch_64.so" />
+                                <move
+                                    file="${project.build.directory}/unpacked/META-INF/native/libnetty_tcnative_osx_x86_64.jnilib"
+                                    tofile="${project.build.directory}/unpacked/META-INF/native/liborg_apache_skywalking_apm_dependencies_netty_tcnative_osx_x86_64.jnilib" />
+                                <move
+                                    file="${project.build.directory}/unpacked/META-INF/native/libnetty_tcnative_linux_x86_64.so"
+                                    tofile="${project.build.directory}/unpacked/META-INF/native/liborg_apache_skywalking_apm_dependencies_netty_tcnative_linux_x86_64.so" />
+                                <move
+                                    file="${project.build.directory}/unpacked/META-INF/native/netty_tcnative_windows_x86_64.dll"
+                                    tofile="${project.build.directory}/unpacked/META-INF/native/org_apache_skywalking_apm_dependencies_netty_tcnative_windows_x86_64.dll" />
                                 <echo message="jar back" />
-                                <jar destfile="${project.build.directory}/${project.artifactId}-${project.version}.jar" basedir="${project.build.directory}/unpacked" />
+                                <jar
+                                    destfile="${project.build.directory}/${project.artifactId}-${project.version}.jar"
+                                    basedir="${project.build.directory}/unpacked" />
                             </target>
                         </configuration>
                         <goals>
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/status/ExceptionCheckContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/status/ExceptionCheckContext.java
index 7c9e1b407b..93e8522b4f 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/status/ExceptionCheckContext.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/status/ExceptionCheckContext.java
@@ -36,7 +36,7 @@ public enum ExceptionCheckContext {
 
     public boolean isError(Throwable throwable) {
         Class<? extends Throwable> clazz = throwable.getClass();
-        return errorStatusExceptions.contains(clazz) || (!ignoredExceptions.contains(clazz));
+        return errorStatusExceptions.contains(clazz) || !ignoredExceptions.contains(clazz);
     }
 
     public void registerIgnoredException(Throwable throwable) {
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/AbstractClassEnhancePluginDefine.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/AbstractClassEnhancePluginDefine.java
index 66147ab89a..949f8d5813 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/AbstractClassEnhancePluginDefine.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/plugin/AbstractClassEnhancePluginDefine.java
@@ -101,7 +101,6 @@ public abstract class AbstractClassEnhancePluginDefine {
         return newClassBuilder;
     }
 
-
     /**
      * Begin to define how to enhance class. After invoke this method, only means definition is finished.
      *
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/profile/ProfileTaskChannelService.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/profile/ProfileTaskChannelService.java
index 20d2a35fbf..cfe1465ad3 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/profile/ProfileTaskChannelService.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/profile/ProfileTaskChannelService.java
@@ -63,7 +63,6 @@ public class ProfileTaskChannelService implements BootService, Runnable, GRPCCha
     // gRPC stub
     private volatile ProfileTaskGrpc.ProfileTaskBlockingStub profileTaskBlockingStub;
 
-
     // segment snapshot sender
     private final BlockingQueue<TracingThreadSnapshot> snapshotQueue = new LinkedBlockingQueue<>(
         Config.Profile.SNAPSHOT_TRANSPORT_BUFFER_SIZE);
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/profile/ThreadProfiler.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/profile/ThreadProfiler.java
index 856f129002..e2425eb10c 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/profile/ThreadProfiler.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/profile/ThreadProfiler.java
@@ -103,7 +103,7 @@ public class ThreadProfiler {
         }
 
         // if is first dump, check is can start profiling
-        if (dumpSequence == 0 && (!executionContext.isStartProfileable())) {
+        if (dumpSequence == 0 && !executionContext.isStartProfileable()) {
             return null;
         }
 
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/util/IOUtils.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/util/IOUtils.java
index 0856f1bab2..5a907da1e3 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/util/IOUtils.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/util/IOUtils.java
@@ -56,7 +56,6 @@ public class IOUtils {
         return output.toByteArray();
     }
 
-
     /**
      * Copy bytes from an <code>InputStream</code> to an
      * <code>OutputStream</code>.
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/conf/watcher/IgnoreSuffixPatternsWatcherTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/conf/watcher/IgnoreSuffixPatternsWatcherTest.java
index a2e7108f8d..0ad42ee6cc 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/conf/watcher/IgnoreSuffixPatternsWatcherTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/conf/watcher/IgnoreSuffixPatternsWatcherTest.java
@@ -22,13 +22,13 @@ import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
 import org.apache.skywalking.apm.agent.core.conf.dynamic.AgentConfigChangeWatcher;
 import org.apache.skywalking.apm.agent.core.conf.dynamic.watcher.IgnoreSuffixPatternsWatcher;
 import org.apache.skywalking.apm.agent.core.context.ContextManagerExtendService;
+import org.apache.skywalking.apm.agent.core.context.util.FieldGetter;
 import org.apache.skywalking.apm.agent.core.test.tools.AgentServiceRule;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.powermock.reflect.Whitebox;
 
 public class IgnoreSuffixPatternsWatcherTest {
 
@@ -48,9 +48,9 @@ public class IgnoreSuffixPatternsWatcherTest {
     }
 
     @Test
-    public void testConfigModifyEvent() {
-        IgnoreSuffixPatternsWatcher ignoreSuffixPatternsWatcher = Whitebox.getInternalState(contextManagerExtendService
-            , "ignoreSuffixPatternsWatcher");
+    public void testConfigModifyEvent() throws IllegalAccessException, NoSuchFieldException {
+        IgnoreSuffixPatternsWatcher ignoreSuffixPatternsWatcher =
+            FieldGetter.getValue(contextManagerExtendService, "ignoreSuffixPatternsWatcher");
         ignoreSuffixPatternsWatcher.notify(new AgentConfigChangeWatcher.ConfigChangeEvent(
             ".txt,.log",
             AgentConfigChangeWatcher.EventType.MODIFY
@@ -60,9 +60,9 @@ public class IgnoreSuffixPatternsWatcherTest {
     }
 
     @Test
-    public void testConfigDeleteEvent() {
-        IgnoreSuffixPatternsWatcher ignoreSuffixPatternsWatcher = Whitebox.getInternalState(contextManagerExtendService
-            , "ignoreSuffixPatternsWatcher");
+    public void testConfigDeleteEvent() throws IllegalAccessException, NoSuchFieldException {
+        IgnoreSuffixPatternsWatcher ignoreSuffixPatternsWatcher =
+            FieldGetter.getValue(contextManagerExtendService, "ignoreSuffixPatternsWatcher");
         ignoreSuffixPatternsWatcher.notify(new AgentConfigChangeWatcher.ConfigChangeEvent(
             null,
             AgentConfigChangeWatcher.EventType.DELETE
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/conf/watcher/SamplingRateWatcherTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/conf/watcher/SamplingRateWatcherTest.java
index ab30946291..e06548e1b9 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/conf/watcher/SamplingRateWatcherTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/conf/watcher/SamplingRateWatcherTest.java
@@ -21,6 +21,7 @@ package org.apache.skywalking.apm.agent.core.conf.watcher;
 import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
 import org.apache.skywalking.apm.agent.core.conf.dynamic.AgentConfigChangeWatcher;
 import org.apache.skywalking.apm.agent.core.conf.dynamic.watcher.SamplingRateWatcher;
+import org.apache.skywalking.apm.agent.core.context.util.FieldGetter;
 import org.apache.skywalking.apm.agent.core.sampling.SamplingService;
 import org.apache.skywalking.apm.agent.core.test.tools.AgentServiceRule;
 import org.junit.AfterClass;
@@ -28,7 +29,6 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.powermock.reflect.Whitebox;
 
 public class SamplingRateWatcherTest {
 
@@ -48,9 +48,8 @@ public class SamplingRateWatcherTest {
     }
 
     @Test
-    public void testConfigModifyEvent() {
-        SamplingRateWatcher samplingRateWatcher = Whitebox.getInternalState(
-            samplingService, "samplingRateWatcher");
+    public void testConfigModifyEvent() throws IllegalAccessException, NoSuchFieldException {
+        SamplingRateWatcher samplingRateWatcher = FieldGetter.getValue(samplingService, "samplingRateWatcher");
         samplingRateWatcher.notify(new AgentConfigChangeWatcher.ConfigChangeEvent(
             "10",
             AgentConfigChangeWatcher.EventType.MODIFY
@@ -60,9 +59,9 @@ public class SamplingRateWatcherTest {
     }
 
     @Test
-    public void testConfigDeleteEvent() {
-        SamplingRateWatcher samplingRateWatcher = Whitebox.getInternalState(
-            samplingService, "samplingRateWatcher");
+    public void testConfigDeleteEvent() throws IllegalAccessException, NoSuchFieldException {
+        SamplingRateWatcher samplingRateWatcher =
+            FieldGetter.getValue(samplingService, "samplingRateWatcher");
         samplingRateWatcher.notify(new AgentConfigChangeWatcher.ConfigChangeEvent(
             null,
             AgentConfigChangeWatcher.EventType.DELETE
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/ExtensionContextTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/ExtensionContextTest.java
index 39b6732c0f..ba3fe78ad0 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/ExtensionContextTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/ExtensionContextTest.java
@@ -18,19 +18,18 @@
 
 package org.apache.skywalking.apm.agent.core.context;
 
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 import org.apache.skywalking.apm.agent.core.context.tag.Tags;
 import org.apache.skywalking.apm.agent.core.context.trace.NoopSpan;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
+import org.mockito.junit.MockitoJUnitRunner;
 
-@RunWith(PowerMockRunner.class)
+@RunWith(MockitoJUnitRunner.class)
 public class ExtensionContextTest {
 
     @Test
@@ -87,9 +86,7 @@ public class ExtensionContextTest {
         context.handle(span);
         verify(span, times(0)).skipAnalysis();
 
-        PowerMockito.mockStatic(System.class);
-        PowerMockito.when(System.currentTimeMillis()).thenReturn(1602743904804L + 500);
-        span = PowerMockito.mock(NoopSpan.class);
+        span = mock(NoopSpan.class);
         context.deserialize("0-1602743904804");
         context.handle(span);
         verify(span, times(0)).tag(Tags.TRANSMISSION_LATENCY, "500");
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/status/ExceptionCheckStrategyTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/status/ExceptionCheckStrategyTest.java
index e3bb9cb8a4..9f298365a7 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/status/ExceptionCheckStrategyTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/status/ExceptionCheckStrategyTest.java
@@ -21,11 +21,11 @@ package org.apache.skywalking.apm.agent.core.context.status;
 import java.util.Set;
 import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
 import org.apache.skywalking.apm.agent.core.conf.Config;
+import org.apache.skywalking.apm.agent.core.context.util.FieldGetter;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.powermock.api.support.membermodification.MemberModifier;
 
 public class ExceptionCheckStrategyTest {
 
@@ -37,13 +37,11 @@ public class ExceptionCheckStrategyTest {
     }
 
     @After
-    public void after() throws IllegalAccessException {
-        ((Set) MemberModifier
-            .field(ExceptionCheckContext.class, "ignoredExceptions")
-            .get(ExceptionCheckContext.INSTANCE)).clear();
-        ((Set) MemberModifier
-            .field(ExceptionCheckContext.class, "errorStatusExceptions")
-            .get(ExceptionCheckContext.INSTANCE)).clear();
+    public void after() throws IllegalAccessException, NoSuchFieldException {
+        ((Set) FieldGetter.getValue(
+            ExceptionCheckContext.INSTANCE, "ignoredExceptions")).clear();
+        ((Set) FieldGetter.getValue(
+            ExceptionCheckContext.INSTANCE, "errorStatusExceptions")).clear();
     }
 
     @Test
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/status/StatusCheckServiceCheckTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/status/StatusCheckServiceCheckTest.java
index a1bb5a40c8..9892884d0b 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/status/StatusCheckServiceCheckTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/status/StatusCheckServiceCheckTest.java
@@ -21,11 +21,11 @@ package org.apache.skywalking.apm.agent.core.context.status;
 import java.util.Set;
 import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
 import org.apache.skywalking.apm.agent.core.conf.Config;
+import org.apache.skywalking.apm.agent.core.context.util.FieldGetter;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.powermock.api.support.membermodification.MemberModifier;
 
 public class StatusCheckServiceCheckTest {
 
@@ -44,13 +44,11 @@ public class StatusCheckServiceCheckTest {
     }
 
     @After
-    public void after() throws IllegalAccessException {
-        ((Set) MemberModifier
-            .field(ExceptionCheckContext.class, "ignoredExceptions")
-            .get(ExceptionCheckContext.INSTANCE)).clear();
-        ((Set) MemberModifier
-            .field(ExceptionCheckContext.class, "errorStatusExceptions")
-            .get(ExceptionCheckContext.INSTANCE)).clear();
+    public void after() throws IllegalAccessException, NoSuchFieldException {
+        ((Set) FieldGetter.getValue(
+            ExceptionCheckContext.INSTANCE, "ignoredExceptions")).clear();
+        ((Set) FieldGetter.getValue(
+            ExceptionCheckContext.INSTANCE, "errorStatusExceptions")).clear();
     }
 
     @Test
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/status/StatusCheckerTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/status/StatusCheckerTest.java
index dc936946bd..f3b6f22082 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/status/StatusCheckerTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/context/status/StatusCheckerTest.java
@@ -18,17 +18,16 @@
 
 package org.apache.skywalking.apm.agent.core.context.status;
 
+import static org.apache.skywalking.apm.agent.core.context.status.StatusChecker.HIERARCHY_MATCH;
+import static org.apache.skywalking.apm.agent.core.context.status.StatusChecker.OFF;
 import java.util.Set;
 import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
 import org.apache.skywalking.apm.agent.core.conf.Config;
+import org.apache.skywalking.apm.agent.core.context.util.FieldGetter;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.powermock.api.support.membermodification.MemberModifier;
-
-import static org.apache.skywalking.apm.agent.core.context.status.StatusChecker.HIERARCHY_MATCH;
-import static org.apache.skywalking.apm.agent.core.context.status.StatusChecker.OFF;
 
 public class StatusCheckerTest {
 
@@ -40,13 +39,11 @@ public class StatusCheckerTest {
     }
 
     @After
-    public void after() throws IllegalAccessException {
-        ((Set) MemberModifier
-            .field(ExceptionCheckContext.class, "ignoredExceptions")
-            .get(ExceptionCheckContext.INSTANCE)).clear();
-        ((Set) MemberModifier
-            .field(ExceptionCheckContext.class, "errorStatusExceptions")
-            .get(ExceptionCheckContext.INSTANCE)).clear();
+    public void after() throws IllegalAccessException, NoSuchFieldException {
+        ((Set) FieldGetter.getValue(
+            ExceptionCheckContext.INSTANCE, "ignoredExceptions")).clear();
+        ((Set) FieldGetter.getValue(
+            ExceptionCheckContext.INSTANCE, "errorStatusExceptions")).clear();
     }
 
     @Test
@@ -58,20 +55,18 @@ public class StatusCheckerTest {
     }
 
     @Test
-    public void checkInheritNamedAndAnnotationMatchStatusChecker() throws IllegalAccessException {
+    public void checkInheritNamedAndAnnotationMatchStatusChecker() throws IllegalAccessException, NoSuchFieldException {
         Assert.assertTrue(HIERARCHY_MATCH.checkStatus(new Throwable()));
         Assert.assertTrue(HIERARCHY_MATCH.checkStatus(new IllegalArgumentException()));
         Assert.assertFalse(HIERARCHY_MATCH.checkStatus(new TestNamedMatchException()));
         Assert.assertFalse(HIERARCHY_MATCH.checkStatus(new TestHierarchyMatchException()));
         Assert.assertFalse(HIERARCHY_MATCH.checkStatus(new TestAnnotationMatchException()));
-        Set ignoredExceptions = (Set) MemberModifier
-            .field(ExceptionCheckContext.class, "ignoredExceptions")
-            .get(ExceptionCheckContext.INSTANCE);
-        Set errorStatusExceptions = (Set) MemberModifier
-            .field(ExceptionCheckContext.class, "errorStatusExceptions")
-            .get(ExceptionCheckContext.INSTANCE);
+        Set ignoredExceptions = FieldGetter.getValue(
+            ExceptionCheckContext.INSTANCE, "ignoredExceptions");
+        Set errorStatusExceptions = FieldGetter.getValue(
+            ExceptionCheckContext.INSTANCE, "errorStatusExceptions");
         Assert.assertTrue(ignoredExceptions.size() > 0);
         Assert.assertTrue(errorStatusExceptions.size() > 0);
     }
 
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/logging/core/SystemOutWriterTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/logging/core/SystemOutWriterTest.java
index b2dfd312fd..38ad476367 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/logging/core/SystemOutWriterTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/logging/core/SystemOutWriterTest.java
@@ -22,11 +22,9 @@ import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.mockito.Mockito;
-
+import static org.mockito.ArgumentMatchers.anyString;
 import java.io.PrintStream;
 
-import static org.mockito.Matchers.anyString;
-
 public class SystemOutWriterTest {
     private static PrintStream OUT_REF;
 
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/logging/core/WriterFactoryTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/logging/core/WriterFactoryTest.java
index cc3620a6e3..0ac8cbcb0b 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/logging/core/WriterFactoryTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/logging/core/WriterFactoryTest.java
@@ -18,36 +18,41 @@
 
 package org.apache.skywalking.apm.agent.core.logging.core;
 
+import static org.junit.Assert.assertTrue;
 import org.apache.skywalking.apm.agent.core.boot.AgentPackagePath;
 import org.apache.skywalking.apm.agent.core.conf.Config;
 import org.apache.skywalking.apm.agent.core.conf.SnifferConfigInitializer;
 import org.apache.skywalking.apm.agent.core.plugin.PluginFinder;
+import org.junit.After;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.BDDMockito;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-import static org.junit.Assert.assertTrue;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
 
-@RunWith(PowerMockRunner.class)
-@PrepareForTest(value = {
-    SnifferConfigInitializer.class,
-    PluginFinder.class,
-    AgentPackagePath.class
-})
+@RunWith(MockitoJUnitRunner.class)
 public class WriterFactoryTest {
+    private MockedStatic<SnifferConfigInitializer> mockedSnifferConfigInitializer =
+        Mockito.mockStatic(SnifferConfigInitializer.class);
+    private MockedStatic<PluginFinder> mockedPluginFinder =
+        Mockito.mockStatic(PluginFinder.class);
+    private MockedStatic<AgentPackagePath> mockedAgentPackagePath =
+        Mockito.mockStatic(AgentPackagePath.class);
+
+    @After
+    public void tearDown() {
+        mockedSnifferConfigInitializer.close();
+        mockedPluginFinder.close();
+        mockedAgentPackagePath.close();
+    }
 
     @Test
     public void alwaysReturnSystemLogWriteWithSetLoggingDir() {
         Config.Logging.OUTPUT = LogOutput.CONSOLE;
-        PowerMockito.mockStatic(SnifferConfigInitializer.class);
-        PowerMockito.mockStatic(PluginFinder.class);
-        PowerMockito.mockStatic(AgentPackagePath.class);
-        BDDMockito.given(SnifferConfigInitializer.isInitCompleted()).willReturn(true);
-        BDDMockito.given(PluginFinder.isPluginInitCompleted()).willReturn(true);
-        BDDMockito.given(AgentPackagePath.isPathFound()).willReturn(true);
+
+        mockedSnifferConfigInitializer.when(SnifferConfigInitializer::isInitCompleted).thenReturn(true);
+        mockedPluginFinder.when(PluginFinder::isPluginInitCompleted).thenReturn(true);
+        mockedAgentPackagePath.when(AgentPackagePath::isPathFound).thenReturn(true);
 
         assertTrue(SnifferConfigInitializer.isInitCompleted());
         assertTrue(PluginFinder.isPluginInitCompleted());
@@ -60,12 +65,9 @@ public class WriterFactoryTest {
     @Test
     public void returnFileWriterWriteWithBlankLoggingDir() {
         Config.Logging.OUTPUT = LogOutput.FILE;
-        PowerMockito.mockStatic(SnifferConfigInitializer.class);
-        PowerMockito.mockStatic(PluginFinder.class);
-        PowerMockito.mockStatic(AgentPackagePath.class);
-        BDDMockito.given(SnifferConfigInitializer.isInitCompleted()).willReturn(true);
-        BDDMockito.given(PluginFinder.isPluginInitCompleted()).willReturn(true);
-        BDDMockito.given(AgentPackagePath.isPathFound()).willReturn(true);
+        mockedSnifferConfigInitializer.when(SnifferConfigInitializer::isInitCompleted).thenReturn(true);
+        mockedPluginFinder.when(PluginFinder::isPluginInitCompleted).thenReturn(true);
+        mockedAgentPackagePath.when(AgentPackagePath::isPathFound).thenReturn(true);
 
         assertTrue(SnifferConfigInitializer.isInitCompleted());
         assertTrue(PluginFinder.isPluginInitCompleted());
@@ -74,4 +76,4 @@ public class WriterFactoryTest {
         IWriter logWriter = WriterFactory.getLogWriter();
         assertTrue(logWriter instanceof FileWriter);
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/CounterTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/CounterTest.java
index 117e449243..a61d007fe1 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/CounterTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/CounterTest.java
@@ -18,7 +18,11 @@
 
 package org.apache.skywalking.apm.agent.core.meter;
 
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
 import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
+import org.apache.skywalking.apm.agent.core.context.util.FieldGetter;
 import org.apache.skywalking.apm.agent.core.test.tools.AgentServiceRule;
 import org.apache.skywalking.apm.network.language.agent.v3.Label;
 import org.apache.skywalking.apm.network.language.agent.v3.MeterData;
@@ -29,11 +33,6 @@ import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-import org.powermock.reflect.Whitebox;
-
 public class CounterTest {
     @Rule
     public AgentServiceRule agentServiceRule = new AgentServiceRule();
@@ -44,9 +43,9 @@ public class CounterTest {
     }
 
     @After
-    public void after() {
+    public void after() throws IllegalAccessException, NoSuchFieldException {
         final MeterService meterService = ServiceManager.INSTANCE.findService(MeterService.class);
-        ((ConcurrentHashMap<MeterId, BaseMeter>) Whitebox.getInternalState(meterService, "meterMap")).clear();
+        ((ConcurrentHashMap<MeterId, BaseMeter>) FieldGetter.getValue(meterService, "meterMap")).clear();
     }
 
     @Test
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/GaugeTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/GaugeTest.java
index e0efaf5b16..f17bc174fa 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/GaugeTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/GaugeTest.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
+import org.apache.skywalking.apm.agent.core.context.util.FieldGetter;
 import org.apache.skywalking.apm.agent.core.test.tools.AgentServiceRule;
 import org.apache.skywalking.apm.network.language.agent.v3.Label;
 import org.apache.skywalking.apm.network.language.agent.v3.MeterData;
@@ -31,7 +32,6 @@ import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
-import org.powermock.reflect.Whitebox;
 
 public class GaugeTest {
     @Rule
@@ -43,9 +43,9 @@ public class GaugeTest {
     }
 
     @After
-    public void after() {
+    public void after() throws IllegalAccessException, NoSuchFieldException {
         final MeterService meterService = ServiceManager.INSTANCE.findService(MeterService.class);
-        ((ConcurrentHashMap<MeterId, BaseMeter>) Whitebox.getInternalState(meterService, "meterMap")).clear();
+        ((ConcurrentHashMap<MeterId, BaseMeter>) FieldGetter.getValue(meterService, "meterMap")).clear();
     }
 
     @Test
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/HistogramTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/HistogramTest.java
index bd6b2b8584..da6c8dc7a8 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/HistogramTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/HistogramTest.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
+import org.apache.skywalking.apm.agent.core.context.util.FieldGetter;
 import org.apache.skywalking.apm.agent.core.test.tools.AgentServiceRule;
 import org.apache.skywalking.apm.network.language.agent.v3.Label;
 import org.apache.skywalking.apm.network.language.agent.v3.MeterData;
@@ -31,7 +32,6 @@ import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
-import org.powermock.reflect.Whitebox;
 
 public class HistogramTest {
     @Rule
@@ -43,18 +43,18 @@ public class HistogramTest {
     }
 
     @After
-    public void after() {
+    public void after() throws IllegalAccessException, NoSuchFieldException {
         final MeterService meterService = ServiceManager.INSTANCE.findService(MeterService.class);
-        ((ConcurrentHashMap<MeterId, BaseMeter>) Whitebox.getInternalState(meterService, "meterMap")).clear();
+        ((ConcurrentHashMap<MeterId, BaseMeter>) FieldGetter.getValue(meterService, "meterMap")).clear();
     }
 
     @Test
-    public void testBuckets() {
+    public void testBuckets() throws IllegalAccessException, NoSuchFieldException {
         final MeterId meterId = new MeterId("test", MeterType.COUNTER, Arrays.asList(new MeterTag("k1", "v1")));
 
         // Check buckets
         final Histogram histogram = MeterFactory.histogram("test").steps(Arrays.asList(2d, 5d)).minValue(2d).build();
-        final Histogram.Bucket[] buckets = (Histogram.Bucket[]) Whitebox.getInternalState(histogram, "buckets");
+        final Histogram.Bucket[] buckets = FieldGetter.getValue(histogram, "buckets");
         Assert.assertEquals(2, buckets.length);
         Assert.assertEquals(buckets[0], new Histogram.Bucket(2));
         Assert.assertEquals(buckets[1], new Histogram.Bucket(5));
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/MeterIdTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/MeterIdTest.java
index 7ccc3a76b6..7db17c05d9 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/MeterIdTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/MeterIdTest.java
@@ -21,15 +21,15 @@ package org.apache.skywalking.apm.agent.core.meter;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import org.apache.skywalking.apm.agent.core.context.util.FieldGetter;
 import org.apache.skywalking.apm.network.language.agent.v3.Label;
 import org.junit.Assert;
 import org.junit.Test;
-import org.powermock.reflect.Whitebox;
 
 public class MeterIdTest {
 
     @Test
-    public void testTransformTags() {
+    public void testTransformTags() throws IllegalAccessException, NoSuchFieldException {
         MeterId meterId = new MeterId("test", MeterType.COUNTER, Arrays.asList(new MeterTag("k1", "v1")));
 
         // Label message check
@@ -41,7 +41,7 @@ public class MeterIdTest {
         Assert.assertEquals(MeterType.COUNTER, meterId.getType());
 
         // Must cache the Label message
-        final List<Label> cacheLabels = (List<Label>) Whitebox.getInternalState(meterId, "labels");
+        final List<Label> cacheLabels = FieldGetter.getValue(meterId, "labels");
         Assert.assertEquals(labels, cacheLabels);
 
         // Check empty tags
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/MeterServiceTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/MeterServiceTest.java
index adbd201ac5..cbe0fe1341 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/MeterServiceTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/meter/MeterServiceTest.java
@@ -18,10 +18,19 @@
 
 package org.apache.skywalking.apm.agent.core.meter;
 
-import io.grpc.stub.StreamObserver;
-import io.grpc.testing.GrpcServerRule;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.spy;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Stream;
 import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
 import org.apache.skywalking.apm.agent.core.conf.Config;
+import org.apache.skywalking.apm.agent.core.context.util.FieldGetter;
 import org.apache.skywalking.apm.agent.core.remote.GRPCChannelStatus;
 import org.apache.skywalking.apm.agent.core.test.tools.AgentServiceRule;
 import org.apache.skywalking.apm.agent.core.test.tools.TracingSegmentRunner;
@@ -38,26 +47,20 @@ import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.reflect.Whitebox;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Mockito.spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import io.grpc.stub.StreamObserver;
+import io.grpc.testing.GrpcServerRule;
 
 @RunWith(TracingSegmentRunner.class)
 public class MeterServiceTest {
 
     @Rule
     public AgentServiceRule agentServiceRule = new AgentServiceRule();
-
     @Rule
     public GrpcServerRule grpcServerRule = new GrpcServerRule().directExecutor();
+    @Rule
+    public MockitoRule mockitoRule = MockitoJUnit.rule();
 
     private MeterService registryService = new MeterService();
     private List<MeterData> upstreamMeters;
@@ -104,11 +107,17 @@ public class MeterServiceTest {
         spy(sender);
         spy(registryService);
 
-        Whitebox.setInternalState(
-            sender, "meterReportServiceStub", MeterReportServiceGrpc.newStub(grpcServerRule.getChannel()));
-        Whitebox.setInternalState(sender, "status", GRPCChannelStatus.CONNECTED);
+        Field meterReportServiceStub = MeterSender.class.getDeclaredField("meterReportServiceStub");
+        Field status = MeterSender.class.getDeclaredField("status");
+        Field senderField = MeterService.class.getDeclaredField("sender");
+        Stream.of(meterReportServiceStub, status, senderField).forEach(field -> {
+            field.setAccessible(true);
+        });
 
-        Whitebox.setInternalState(registryService, "sender", sender);
+        meterReportServiceStub.set(
+            sender, MeterReportServiceGrpc.newStub(grpcServerRule.getChannel()));
+        status.set(sender, GRPCChannelStatus.CONNECTED);
+        senderField.set(registryService, sender);
 
         upstreamMeters = new ArrayList<>();
     }
@@ -153,7 +162,7 @@ public class MeterServiceTest {
 
     @Test
     public void testMeterSizeAndShutdown() throws Throwable {
-        final Map<MeterId, BaseMeter> map = Whitebox.getInternalState(registryService, "meterMap");
+        final Map<MeterId, BaseMeter> map = FieldGetter.getValue(registryService, "meterMap");
         map.clear();
 
         // Check max meter size
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/remote/TraceSegmentServiceClientTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/remote/TraceSegmentServiceClientTest.java
index 419287e11e..011f9b1a80 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/remote/TraceSegmentServiceClientTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/remote/TraceSegmentServiceClientTest.java
@@ -21,6 +21,7 @@ package org.apache.skywalking.apm.agent.core.remote;
 import com.google.protobuf.InvalidProtocolBufferException;
 import io.grpc.stub.StreamObserver;
 import io.grpc.testing.GrpcServerRule;
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
@@ -29,6 +30,7 @@ import org.apache.skywalking.apm.agent.core.context.ContextManager;
 import org.apache.skywalking.apm.agent.core.context.tag.Tags;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
+import org.apache.skywalking.apm.agent.core.context.util.FieldGetter;
 import org.apache.skywalking.apm.agent.core.test.tools.AgentServiceRule;
 import org.apache.skywalking.apm.agent.core.test.tools.SegmentStorage;
 import org.apache.skywalking.apm.agent.core.test.tools.SegmentStoragePoint;
@@ -45,7 +47,6 @@ import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.reflect.Whitebox;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -101,12 +102,17 @@ public class TraceSegmentServiceClientTest {
 
     @Before
     public void setUp() throws Throwable {
-        Whitebox.setInternalState(ServiceManager.INSTANCE.findService(GRPCChannelManager.class), "reconnect", false);
+        Field reconnect = GRPCChannelManager.class.getDeclaredField("reconnect");
+        reconnect.setAccessible(true);
+        reconnect.setBoolean(ServiceManager.INSTANCE.findService(GRPCChannelManager.class), false);
         spy(serviceClient);
 
-        Whitebox.setInternalState(
-            serviceClient, "serviceStub", TraceSegmentReportServiceGrpc.newStub(grpcServerRule.getChannel()));
-        Whitebox.setInternalState(serviceClient, "status", GRPCChannelStatus.CONNECTED);
+        Field serviceStub = TraceSegmentServiceClient.class.getDeclaredField("serviceStub");
+        Field status = TraceSegmentServiceClient.class.getDeclaredField("status");
+        serviceStub.setAccessible(true);
+        status.setAccessible(true);
+        serviceStub.set(serviceClient, TraceSegmentReportServiceGrpc.newStub(grpcServerRule.getChannel()));
+        status.set(serviceClient, GRPCChannelStatus.CONNECTED);
 
         upstreamSegments = new ArrayList<>();
     }
@@ -136,7 +142,7 @@ public class TraceSegmentServiceClientTest {
     }
 
     @Test
-    public void testSendTraceSegmentWithException() throws InvalidProtocolBufferException {
+    public void testSendTraceSegmentWithException() throws InvalidProtocolBufferException, IllegalAccessException, NoSuchFieldException {
         grpcServerRule.getServiceRegistry().addService(serviceImplBase);
 
         AbstractSpan firstEntrySpan = ContextManager.createEntrySpan("/testFirstEntry", null);
@@ -150,7 +156,7 @@ public class TraceSegmentServiceClientTest {
 
         assertThat(upstreamSegments.size(), is(0));
 
-        boolean reconnect = Whitebox.getInternalState(
+        boolean reconnect = FieldGetter.getValue(
             ServiceManager.INSTANCE.findService(GRPCChannelManager.class), "reconnect");
         assertThat(reconnect, is(true));
 
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/test/tools/AgentServiceRule.java b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/test/tools/AgentServiceRule.java
index 80dfb187e9..7df00cc7c4 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/test/tools/AgentServiceRule.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/apache/skywalking/apm/agent/core/test/tools/AgentServiceRule.java
@@ -18,38 +18,56 @@
 
 package org.apache.skywalking.apm.agent.core.test.tools;
 
+import java.lang.reflect.Field;
 import java.util.HashMap;
 import java.util.LinkedList;
-
-import org.apache.skywalking.apm.agent.core.context.TracingThreadListener;
-import org.junit.rules.ExternalResource;
-import org.powermock.reflect.Whitebox;
 import org.apache.skywalking.apm.agent.core.boot.BootService;
 import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
 import org.apache.skywalking.apm.agent.core.context.IgnoredTracerContext;
 import org.apache.skywalking.apm.agent.core.context.TracingContext;
 import org.apache.skywalking.apm.agent.core.context.TracingContextListener;
+import org.apache.skywalking.apm.agent.core.context.TracingThreadListener;
+import org.junit.rules.ExternalResource;
 
 public class AgentServiceRule extends ExternalResource {
 
     @Override
     protected void after() {
         super.after();
-        Whitebox.setInternalState(ServiceManager.INSTANCE, "bootedServices", new HashMap<Class, BootService>());
-        Whitebox.setInternalState(TracingContext.ListenerManager.class, "LISTENERS", new LinkedList<TracingContextListener>());
-        Whitebox.setInternalState(IgnoredTracerContext.ListenerManager.class, "LISTENERS", new LinkedList<TracingContextListener>());
-        Whitebox.setInternalState(TracingContext.TracingThreadListenerManager.class, "LISTENERS", new LinkedList<TracingThreadListener>());
+        reset();
     }
 
     @Override
     protected void before() throws Throwable {
         super.before();
 
-        Whitebox.setInternalState(ServiceManager.INSTANCE, "bootedServices", new HashMap<Class, BootService>());
-        Whitebox.setInternalState(TracingContext.ListenerManager.class, "LISTENERS", new LinkedList<TracingContextListener>());
-        Whitebox.setInternalState(IgnoredTracerContext.ListenerManager.class, "LISTENERS", new LinkedList<TracingContextListener>());
-        Whitebox.setInternalState(TracingContext.TracingThreadListenerManager.class, "LISTENERS", new LinkedList<TracingThreadListener>());
+        reset();
 
         ServiceManager.INSTANCE.boot();
     }
+
+    private void reset() {
+        try {
+            Field bootedServices = ServiceManager.class.getDeclaredField("bootedServices");
+            bootedServices.setAccessible(true);
+            bootedServices.set(ServiceManager.INSTANCE, new HashMap<Class<?>, BootService>());
+
+            Field listeners = TracingContext.ListenerManager.class.getDeclaredField("LISTENERS");
+            listeners.setAccessible(true);
+            listeners.set(TracingContext.ListenerManager.class,
+                new LinkedList<TracingContextListener>());
+
+            listeners = IgnoredTracerContext.ListenerManager.class.getDeclaredField("LISTENERS");
+            listeners.setAccessible(true);
+            listeners.set(IgnoredTracerContext.ListenerManager.class,
+                new LinkedList<TracingContextListener>());
+
+            listeners =
+                TracingContext.TracingThreadListenerManager.class.getDeclaredField("LISTENERS");
+            listeners.setAccessible(true);
+            listeners.set(TracingContext.TracingThreadListenerManager.class, new LinkedList<TracingThreadListener>());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
 }
diff --git a/apm-sniffer/apm-agent-core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-agent-core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-agent-core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptorTest.java
index 5efb858212..37d6eb183e 100644
--- a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/ActiveMQProducerInterceptorTest.java
@@ -36,8 +36,6 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
 import javax.jms.Destination;
 import javax.jms.JMSException;
@@ -48,8 +46,7 @@ import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class ActiveMQProducerInterceptorTest {
 
     @SegmentStoragePoint
diff --git a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/MessageConsumerDequeueInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/MessageConsumerDequeueInterceptorTest.java
index 8ee87677b8..46b0f8cbdc 100644
--- a/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/MessageConsumerDequeueInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/activemq/MessageConsumerDequeueInterceptorTest.java
@@ -35,13 +35,10 @@ import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
 import static org.hamcrest.CoreMatchers.is;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class MessageConsumerDequeueInterceptorTest {
 
     @SegmentStoragePoint
@@ -124,4 +121,4 @@ public class MessageConsumerDequeueInterceptorTest {
         Assert.assertThat(traceSegments.size(), is(1));
     }
 
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/asynchttpclient-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/asynchttpclient/v2/ExecuteInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/asynchttpclient-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/asynchttpclient/v2/ExecuteInterceptorTest.java
index 9e7f8edae2..0b3aa9ac32 100644
--- a/apm-sniffer/apm-sdk-plugin/asynchttpclient-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/asynchttpclient/v2/ExecuteInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/asynchttpclient-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/asynchttpclient/v2/ExecuteInterceptorTest.java
@@ -17,6 +17,9 @@
 
 package org.apache.skywalking.apm.plugin.asynchttpclient.v2;
 
+import static org.apache.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.ContextCarrier;
 import org.apache.skywalking.apm.agent.core.context.ContextManager;
@@ -35,24 +38,14 @@ import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.apache.skywalking.apm.network.trace.component.OfficialComponent;
 import org.asynchttpclient.Request;
 import org.asynchttpclient.RequestBuilder;
-import org.asynchttpclient.Response;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.apache.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest(Response.class)
+@RunWith(TracingSegmentRunner.class)
 public class ExecuteInterceptorTest {
 
     @SegmentStoragePoint
diff --git a/apm-sniffer/apm-sdk-plugin/avro-plugin/src/test/java/org/apache/skywalking/apm/plugin/avro/GenericRequestorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/avro-plugin/src/test/java/org/apache/skywalking/apm/plugin/avro/GenericRequestorInterceptorTest.java
index 1defcc44d5..041f9db70e 100644
--- a/apm-sniffer/apm-sdk-plugin/avro-plugin/src/test/java/org/apache/skywalking/apm/plugin/avro/GenericRequestorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/avro-plugin/src/test/java/org/apache/skywalking/apm/plugin/avro/GenericRequestorInterceptorTest.java
@@ -38,17 +38,18 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class GenericRequestorInterceptorTest {
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     public GenericRequestorInterceptor interceptor = new GenericRequestorInterceptor();
 
diff --git a/apm-sniffer/apm-sdk-plugin/avro-plugin/src/test/java/org/apache/skywalking/apm/plugin/avro/SpecificRequestorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/avro-plugin/src/test/java/org/apache/skywalking/apm/plugin/avro/SpecificRequestorInterceptorTest.java
index 24d5792b13..9ee99c48ff 100644
--- a/apm-sniffer/apm-sdk-plugin/avro-plugin/src/test/java/org/apache/skywalking/apm/plugin/avro/SpecificRequestorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/avro-plugin/src/test/java/org/apache/skywalking/apm/plugin/avro/SpecificRequestorInterceptorTest.java
@@ -39,11 +39,8 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class SpecificRequestorInterceptorTest {
 
     @SegmentStoragePoint
diff --git a/apm-sniffer/apm-sdk-plugin/baidu-brpc-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/baidu/brpc3/ClientInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/baidu-brpc-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/baidu/brpc3/ClientInterceptorTest.java
index 66a76870d9..a852224eb5 100644
--- a/apm-sniffer/apm-sdk-plugin/baidu-brpc-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/baidu/brpc3/ClientInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/baidu-brpc-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/baidu/brpc3/ClientInterceptorTest.java
@@ -21,10 +21,8 @@ package org.apache.skywalking.apm.plugin.baidu.brpc3;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
-import static org.powermock.api.mockito.PowerMockito.when;
-
+import static org.mockito.Mockito.when;
 import java.util.List;
-
 import org.apache.skywalking.apm.agent.core.conf.Config;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
@@ -44,18 +42,18 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import com.baidu.brpc.protocol.Request;
 import com.baidu.brpc.protocol.Response;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class ClientInterceptorTest {
     @Rule
     public AgentServiceRule agentServiceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule mockitoRule = MockitoJUnit.rule();
+
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
     @Mock
@@ -63,8 +61,10 @@ public class ClientInterceptorTest {
 
     private ClientInterceptor clientInterceptor;
 
-    private Request request = PowerMockito.mock(Request.class);
-    private Response response = PowerMockito.mock(Response.class);
+    @Mock
+    private Request request;
+    @Mock
+    private Response response;
 
     @Mock
     private MethodInterceptResult methodInterceptResult;
diff --git a/apm-sniffer/apm-sdk-plugin/baidu-brpc-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/baidu/brpc3/ServerInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/baidu-brpc-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/baidu/brpc3/ServerInterceptorTest.java
index bcc4c7f50d..b6eef9ab82 100644
--- a/apm-sniffer/apm-sdk-plugin/baidu-brpc-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/baidu/brpc3/ServerInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/baidu-brpc-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/baidu/brpc3/ServerInterceptorTest.java
@@ -21,11 +21,10 @@ package org.apache.skywalking.apm.plugin.baidu.brpc3;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
-import static org.powermock.api.mockito.PowerMockito.when;
-
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import java.util.Map;
-
 import org.apache.skywalking.apm.agent.core.conf.Config;
 import org.apache.skywalking.apm.agent.core.context.SW8CarrierItem;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
@@ -48,19 +47,19 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import com.baidu.brpc.interceptor.InterceptorChain;
 import com.baidu.brpc.protocol.Request;
 import com.baidu.brpc.protocol.Response;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class ServerInterceptorTest {
     @Rule
     public AgentServiceRule agentServiceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
     @Mock
@@ -68,10 +67,13 @@ public class ServerInterceptorTest {
 
     private ServerInterceptor serverInterceptor;
 
-    private Request request = PowerMockito.mock(Request.class);
-    private Response response = PowerMockito.mock(Response.class);
+    @Mock
+    private Request request;
+    @Mock
+    private Response response;
 
-    private InterceptorChain interceptorChain = PowerMockito.mock(InterceptorChain.class);
+    @Mock
+    private InterceptorChain interceptorChain;
 
     @Mock
     private MethodInterceptResult methodInterceptResult;
@@ -83,7 +85,7 @@ public class ServerInterceptorTest {
     public void setUp() throws Exception {
         serverInterceptor = new ServerInterceptor();
 
-        Map<String, Object> kvAttachment = PowerMockito.mock(Map.class);
+        Map<String, Object> kvAttachment = mock(Map.class);
         when(kvAttachment.get(SW8CarrierItem.HEADER_NAME)).thenReturn("1-My40LjU=-MS4yLjM=-3-c2VydmljZQ"
                 + "==-aW5zdGFuY2U=-L2FwcA==-MTI3LjAuMC4xOjgwODA=");
         when(request.getKvAttachment()).thenReturn(kvAttachment);
diff --git a/apm-sniffer/apm-sdk-plugin/canal-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/canal/CanalInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/canal-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/canal/CanalInterceptorTest.java
index f71a5d7f74..1781bf760d 100644
--- a/apm-sniffer/apm-sdk-plugin/canal-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/canal/CanalInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/canal-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/canal/CanalInterceptorTest.java
@@ -32,8 +32,6 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
@@ -42,8 +40,7 @@ import java.util.List;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class CanalInterceptorTest {
 
     private CanalInterceptor canalInterceptor;
diff --git a/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/ClusterConnectInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/ClusterConnectInterceptorTest.java
index 0a8dc9f1cd..d3c5b9ea25 100644
--- a/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/ClusterConnectInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/ClusterConnectInterceptorTest.java
@@ -25,11 +25,11 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 
 import java.lang.reflect.Method;
 
-@RunWith(PowerMockRunner.class)
+@RunWith(MockitoJUnitRunner.class)
 public class ClusterConnectInterceptorTest {
 
     private ClusterConnectInterceptor interceptor;
@@ -62,4 +62,4 @@ public class ClusterConnectInterceptorTest {
         ConnectionInfo connectionInfo = (ConnectionInfo) ret.getSkyWalkingDynamicField();
         Assert.assertThat(connectionInfo.getKeyspace(), Is.is("test"));
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/ClusterConstructorWithStateListenerArgInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/ClusterConstructorWithStateListenerArgInterceptorTest.java
index 23b83bffff..5b646b2804 100644
--- a/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/ClusterConstructorWithStateListenerArgInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/ClusterConstructorWithStateListenerArgInterceptorTest.java
@@ -25,19 +25,19 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
 import java.net.InetSocketAddress;
 import java.util.ArrayList;
 import java.util.List;
 
-@RunWith(PowerMockRunner.class)
+@RunWith(MockitoJUnitRunner.class)
 public class ClusterConstructorWithStateListenerArgInterceptorTest {
 
     @Mock
     private ClusterConstructorWithStateListenerArgInterceptor interceptor;
 
-    @Mock
+    @Spy
     private EnhancedInstance enhancedInstance = new EnhancedInstance() {
         private ConnectionInfo connectionInfo;
 
@@ -71,4 +71,4 @@ public class ClusterConstructorWithStateListenerArgInterceptorTest {
         ConnectionInfo connectionInfo = (ConnectionInfo) enhancedInstance.getSkyWalkingDynamicField();
         Assert.assertThat(connectionInfo.getContactPoints(), Is.is("172.20.0.2:9042"));
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/DefaultResultSetFutureGetUninterruptiblyInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/DefaultResultSetFutureGetUninterruptiblyInterceptorTest.java
index 8b4a316651..3a6c51a2db 100644
--- a/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/DefaultResultSetFutureGetUninterruptiblyInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/DefaultResultSetFutureGetUninterruptiblyInterceptorTest.java
@@ -18,6 +18,9 @@
 
 package org.apache.skywalking.apm.plugin.cassandra.java.driver.v3;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.lang.reflect.Method;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
@@ -34,19 +37,17 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class DefaultResultSetFutureGetUninterruptiblyInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
 
@@ -73,7 +74,7 @@ public class DefaultResultSetFutureGetUninterruptiblyInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is(Constants.CASSANDRA_OP_PREFIX));
+        assertThat(span.getOperationName(), is(Constants.CASSANDRA_OP_PREFIX + "executeAsync"));
         SpanAssert.assertTag(span, 0, Constants.CASSANDRA_DB_TYPE);
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/SessionManagerExecuteAndExecuteAsyncWithStatementArgInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/SessionManagerExecuteAndExecuteAsyncWithStatementArgInterceptorTest.java
index 212ef92165..1091fbea0a 100644
--- a/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/SessionManagerExecuteAndExecuteAsyncWithStatementArgInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/cassandra-java-driver-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/cassandra/java/driver/v3/SessionManagerExecuteAndExecuteAsyncWithStatementArgInterceptorTest.java
@@ -18,7 +18,9 @@
 
 package org.apache.skywalking.apm.plugin.cassandra.java.driver.v3;
 
-import com.datastax.driver.core.SimpleStatement;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.lang.reflect.Method;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
@@ -35,19 +37,18 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.datastax.driver.core.SimpleStatement;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class SessionManagerExecuteAndExecuteAsyncWithStatementArgInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
 
@@ -80,9 +81,9 @@ public class SessionManagerExecuteAndExecuteAsyncWithStatementArgInterceptorTest
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is(Constants.CASSANDRA_OP_PREFIX));
+        assertThat(span.getOperationName(), is(Constants.CASSANDRA_OP_PREFIX + "executeAsync"));
         SpanAssert.assertTag(span, 0, Constants.CASSANDRA_DB_TYPE);
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, "SELECT * FROM test");
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/clickhouse-0.3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/clickhouse/ClickHouseStatementMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/clickhouse-0.3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/clickhouse/ClickHouseStatementMethodInterceptorTest.java
index 60abd47625..f361fed12f 100644
--- a/apm-sniffer/apm-sdk-plugin/clickhouse-0.3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/clickhouse/ClickHouseStatementMethodInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/clickhouse-0.3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/clickhouse/ClickHouseStatementMethodInterceptorTest.java
@@ -25,8 +25,6 @@ import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.when;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
@@ -45,12 +43,12 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import ru.yandex.clickhouse.ClickHouseStatementImpl;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class ClickHouseStatementMethodInterceptorTest {
 
     private final static String SQL = "SELECT 1";
@@ -70,6 +68,9 @@ public class ClickHouseStatementMethodInterceptorTest {
     private final ClickHouseStatementMethodInterceptor interceptor = new ClickHouseStatementMethodInterceptor();
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
     @Mock
@@ -125,4 +126,4 @@ public class ClickHouseStatementMethodInterceptorTest {
         SpanAssert.assertTag(span, 1, "default");
         SpanAssert.assertTag(span, 2, SQL);
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/clickhouse-0.3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/clickhouse/InitConnectionMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/clickhouse-0.3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/clickhouse/InitConnectionMethodInterceptorTest.java
index 3c13240835..6aef6ae42d 100644
--- a/apm-sniffer/apm-sdk-plugin/clickhouse-0.3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/clickhouse/InitConnectionMethodInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/clickhouse-0.3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/clickhouse/InitConnectionMethodInterceptorTest.java
@@ -21,17 +21,16 @@ package org.apache.skywalking.apm.plugin.jdbc.clickhouse;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.mockito.Mockito.when;
-
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 import ru.yandex.clickhouse.settings.ClickHouseProperties;
 
-@RunWith(PowerMockRunner.class)
+@RunWith(MockitoJUnitRunner.class)
 public class InitConnectionMethodInterceptorTest {
 
     private final EnhancedInstance enhancedInstance = new EnhancedInstance() {
@@ -69,4 +68,4 @@ public class InitConnectionMethodInterceptorTest {
         assertEquals("default", connectionInfo.getDatabaseName());
         assertEquals("ClickHouse", connectionInfo.getDBType());
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asf/dubbo/DubboInterceptor.java b/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asf/dubbo/DubboInterceptor.java
index d35bb0baf5..1dff43352b 100644
--- a/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asf/dubbo/DubboInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asf/dubbo/DubboInterceptor.java
@@ -49,10 +49,10 @@ public class DubboInterceptor implements InstanceMethodsAroundInterceptor {
     public static final String ARGUMENTS = "arguments";
 
     /**
-     * <h2>Consumer:</h2> The serialized trace context data will
+     * Consumer: The serialized trace context data will
      * inject to the {@link RpcContext#attachments} for transport to provider side.
      * <p>
-     * <h2>Provider:</h2> The serialized trace context data will extract from
+     * Provider: The serialized trace context data will extract from
      * {@link RpcContext#attachments}. current trace segment will ref if the serialization context data is not null.
      */
     @Override
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java
index 02f8e2064e..a7b0fffce9 100644
--- a/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java
@@ -18,12 +18,17 @@
 
 package org.apache.skywalking.apm.plugin.dubbo;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
+import java.util.List;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Result;
 import org.apache.dubbo.rpc.RpcContext;
-import java.util.List;
 import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
 import org.apache.skywalking.apm.agent.core.conf.Config;
 import org.apache.skywalking.apm.agent.core.context.ContextManagerExtendService;
@@ -45,26 +50,20 @@ import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.apache.skywalking.apm.plugin.asf.dubbo.DubboInterceptor;
 import org.hamcrest.CoreMatchers;
+import org.junit.AfterClass;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.springframework.util.Assert;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest({RpcContext.class})
+@RunWith(TracingSegmentRunner.class)
 public class DubboInterceptorTest {
 
     @SegmentStoragePoint
@@ -72,6 +71,10 @@ public class DubboInterceptorTest {
 
     @Rule
     public AgentServiceRule agentServiceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
+    private static MockedStatic<RpcContext> RPC_CONTEXT_MOCK;
 
     @Mock
     private EnhancedInstance enhancedInstance;
@@ -92,18 +95,22 @@ public class DubboInterceptorTest {
     private Object[] allArguments;
     private Class[] argumentTypes;
 
+    @BeforeClass
+    public static void beforeClass() {
+        RPC_CONTEXT_MOCK = Mockito.mockStatic(RpcContext.class);
+    }
+
     @Before
     public void setUp() throws Exception {
         dubboInterceptor = new DubboInterceptor();
 
-        PowerMockito.mockStatic(RpcContext.class);
-
         when(invoker.getUrl()).thenReturn(URL.valueOf("dubbo://127.0.0.1:20880/org.apache.skywalking.apm.test.TestDubboService"));
         when(invocation.getMethodName()).thenReturn("test");
         when(invocation.getParameterTypes()).thenReturn(new Class[] {String.class});
         when(invocation.getArguments()).thenReturn(new Object[] {"abc"});
-        PowerMockito.when(RpcContext.getContext()).thenReturn(rpcContext);
+        RPC_CONTEXT_MOCK.when(RpcContext::getContext).thenReturn(rpcContext);
         when(rpcContext.isConsumerSide()).thenReturn(true);
+        when(rpcContext.getUrl()).thenReturn(URL.valueOf("dubbo://127.0.0.1:20880/org.apache.skywalking.apm.test.TestDubboService"));
         allArguments = new Object[] {
             invoker,
             invocation
@@ -115,6 +122,11 @@ public class DubboInterceptorTest {
         Config.Agent.SERVICE_NAME = "DubboTestCases-APP";
     }
 
+    @AfterClass
+    public static void afterClass() {
+        RPC_CONTEXT_MOCK.close();
+    }
+
     @Test
     public void testServiceFromPlugin() {
         PluginBootService service = ServiceManager.INSTANCE.findService(PluginBootService.class);
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asf/dubbo3/DubboInterceptor.java b/apm-sniffer/apm-sdk-plugin/dubbo-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asf/dubbo3/DubboInterceptor.java
index 9ff83561e2..219f8dadf5 100644
--- a/apm-sniffer/apm-sdk-plugin/dubbo-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asf/dubbo3/DubboInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asf/dubbo3/DubboInterceptor.java
@@ -50,10 +50,10 @@ public class DubboInterceptor implements InstanceMethodsAroundInterceptor {
     public static final String ARGUMENTS = "arguments";
 
     /**
-     * <h2>Consumer:</h2> The serialized trace context data will
+     * Consumer: The serialized trace context data will
      * inject to the {@link RpcContext#getClientAttachment} for transport to provider side.
      * <p>
-     * <h2>Provider:</h2> The serialized trace context data will extract from
+     * Provider: The serialized trace context data will extract from
      * {@link RpcContext#getServerAttachment}. current trace segment will ref if the serialization context data is not
      * null.
      */
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/dubbo3/DubboInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/dubbo-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/dubbo3/DubboInterceptorTest.java
index 1ab5dd9b01..87413b8b66 100644
--- a/apm-sniffer/apm-sdk-plugin/dubbo-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/dubbo3/DubboInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/dubbo3/DubboInterceptorTest.java
@@ -18,14 +18,17 @@
 
 package org.apache.skywalking.apm.plugin.dubbo3;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
+import java.util.List;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.rpc.Invocation;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Result;
 import org.apache.dubbo.rpc.RpcContext;
-
-import java.util.List;
-
 import org.apache.dubbo.rpc.RpcContextAttachment;
 import org.apache.dubbo.rpc.RpcServiceContext;
 import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
@@ -49,26 +52,20 @@ import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.apache.skywalking.apm.plugin.asf.dubbo3.DubboInterceptor;
 import org.hamcrest.CoreMatchers;
+import org.junit.AfterClass;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.springframework.util.Assert;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest({RpcContext.class})
+@RunWith(TracingSegmentRunner.class)
 public class DubboInterceptorTest {
 
     @SegmentStoragePoint
@@ -76,6 +73,10 @@ public class DubboInterceptorTest {
 
     @Rule
     public AgentServiceRule agentServiceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
+    private static MockedStatic<RpcContext> RPC_CONTEXT_MOCK;
 
     @Mock
     private EnhancedInstance enhancedInstance;
@@ -105,11 +106,20 @@ public class DubboInterceptorTest {
     private static final URL CONSUMER_URL = URL.valueOf("dubbo://127.0.0.1:20880/org.apache.skywalking.apm.test.TestDubboService?side=consumer");
     private static final URL PROVIDER_URL = URL.valueOf("dubbo://127.0.0.1:20880/org.apache.skywalking.apm.test.TestDubboService?side=provider");
 
+    @BeforeClass
+    public static void beforeClass() {
+        RPC_CONTEXT_MOCK = Mockito.mockStatic(RpcContext.class);
+    }
+
+    @AfterClass
+    public static void afterClass() {
+        RPC_CONTEXT_MOCK.close();
+    }
+
     @Before
     public void setUp() throws Exception {
         dubboInterceptor = new DubboInterceptor();
 
-        PowerMockito.mockStatic(RpcContext.class);
         when(consumerInvoker.getUrl()).thenReturn(CONSUMER_URL);
         when(consumerInvocation.getMethodName()).thenReturn("test");
         when(consumerInvocation.getParameterTypes()).thenReturn(new Class[] {String.class});
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptor.java b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptor.java
index 37b9e330c9..8c85ab4a60 100644
--- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptor.java
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptor.java
@@ -44,10 +44,10 @@ import org.apache.skywalking.apm.util.StringUtil;
  */
 public class DubboInterceptor implements InstanceMethodsAroundInterceptor {
     /**
-     * <h2>Consumer:</h2> The serialized trace context data will
+     * Consumer: The serialized trace context data will
      * inject to the {@link RpcContext#attachments} for transport to provider side.
      * <p>
-     * <h2>Provider:</h2> The serialized trace context data will extract from
+     * Provider: The serialized trace context data will extract from
      * {@link RpcContext#attachments}. current trace segment will ref if the serialize context data is not null.
      */
     @Override
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java
index fa8cdc0513..9d8b5735b2 100644
--- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/apache/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java
@@ -18,11 +18,11 @@
 
 package org.apache.skywalking.apm.plugin.dubbo;
 
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.rpc.Invocation;
-import com.alibaba.dubbo.rpc.Invoker;
-import com.alibaba.dubbo.rpc.Result;
-import com.alibaba.dubbo.rpc.RpcContext;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
 import org.apache.skywalking.apm.agent.core.conf.Config;
@@ -44,26 +44,25 @@ import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
 import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.hamcrest.CoreMatchers;
+import org.junit.AfterClass;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.springframework.util.Assert;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.rpc.Invocation;
+import com.alibaba.dubbo.rpc.Invoker;
+import com.alibaba.dubbo.rpc.Result;
+import com.alibaba.dubbo.rpc.RpcContext;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest({RpcContext.class})
+@RunWith(TracingSegmentRunner.class)
 public class DubboInterceptorTest {
 
     @SegmentStoragePoint
@@ -71,6 +70,10 @@ public class DubboInterceptorTest {
 
     @Rule
     public AgentServiceRule agentServiceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
+    private static MockedStatic<RpcContext> RPC_CONTEXT_MOCK;
 
     @Mock
     private EnhancedInstance enhancedInstance;
@@ -91,17 +94,20 @@ public class DubboInterceptorTest {
     private Object[] allArguments;
     private Class[] argumentTypes;
 
+    @BeforeClass
+    public static void beforeClass() {
+        RPC_CONTEXT_MOCK = Mockito.mockStatic(RpcContext.class);
+    }
+
     @Before
     public void setUp() throws Exception {
         dubboInterceptor = new DubboInterceptor();
 
-        PowerMockito.mockStatic(RpcContext.class);
-
         when(invoker.getUrl()).thenReturn(URL.valueOf("dubbo://127.0.0.1:20880/org.apache.skywalking.apm.test.TestDubboService"));
         when(invocation.getMethodName()).thenReturn("test");
         when(invocation.getParameterTypes()).thenReturn(new Class[] {String.class});
         when(invocation.getArguments()).thenReturn(new Object[] {"abc"});
-        PowerMockito.when(RpcContext.getContext()).thenReturn(rpcContext);
+        RPC_CONTEXT_MOCK.when(RpcContext::getContext).thenReturn(rpcContext);
         when(rpcContext.isConsumerSide()).thenReturn(true);
         allArguments = new Object[] {
             invoker,
@@ -114,6 +120,11 @@ public class DubboInterceptorTest {
         Config.Agent.SERVICE_NAME = "DubboTestCases-APP";
     }
 
+    @AfterClass
+    public static void afterClass() {
+        RPC_CONTEXT_MOCK.close();
+    }
+
     @Test
     public void testServiceFromPlugin() {
         PluginBootService service = ServiceManager.INSTANCE.findService(PluginBootService.class);
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/esjob/JobExecutorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/esjob/JobExecutorInterceptorTest.java
index 3304f6e036..b7bc4a2ae0 100644
--- a/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/esjob/JobExecutorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/esjob/JobExecutorInterceptorTest.java
@@ -34,16 +34,13 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class JobExecutorInterceptorTest {
 
     @SegmentStoragePoint
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/AdapterActionFutureActionGetMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/AdapterActionFutureActionGetMethodsInterceptorTest.java
index 5d7a7a58f8..c263028b29 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/AdapterActionFutureActionGetMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/AdapterActionFutureActionGetMethodsInterceptorTest.java
@@ -18,6 +18,12 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.TRANSPORT_CLIENT;
+import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.LocalSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
@@ -39,19 +45,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import java.util.List;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
-import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.TRANSPORT_CLIENT;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class AdapterActionFutureActionGetMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -59,6 +56,8 @@ public class AdapterActionFutureActionGetMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/ClusterClientGetSettingsMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/ClusterClientGetSettingsMethodsInterceptorTest.java
index 64aecd090c..a756911446 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/ClusterClientGetSettingsMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/ClusterClientGetSettingsMethodsInterceptorTest.java
@@ -20,8 +20,7 @@ package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.ExitSpan;
@@ -43,11 +42,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class ClusterClientGetSettingsMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -55,6 +53,8 @@ public class ClusterClientGetSettingsMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/ClusterClientHealthMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/ClusterClientHealthMethodsInterceptorTest.java
index a78157a5aa..2ddb460e70 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/ClusterClientHealthMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/ClusterClientHealthMethodsInterceptorTest.java
@@ -20,8 +20,7 @@ package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.ExitSpan;
@@ -43,11 +42,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class ClusterClientHealthMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -55,6 +53,8 @@ public class ClusterClientHealthMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/ClusterClientPutSettingsMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/ClusterClientPutSettingsMethodsInterceptorTest.java
index 471e3dfa73..3eff5a18fb 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/ClusterClientPutSettingsMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/ClusterClientPutSettingsMethodsInterceptorTest.java
@@ -21,8 +21,7 @@ package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.ExitSpan;
@@ -45,15 +44,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest(value = {
-    Settings.class
-})
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+@RunWith(TracingSegmentRunner.class)
 public class ClusterClientPutSettingsMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -61,6 +55,8 @@ public class ClusterClientPutSettingsMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/IndicesClientAnalyzeMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/IndicesClientAnalyzeMethodsInterceptorTest.java
index 5f3c5d0236..faa1779f7d 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/IndicesClientAnalyzeMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/IndicesClientAnalyzeMethodsInterceptorTest.java
@@ -17,6 +17,11 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.ExitSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
@@ -37,18 +42,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import java.util.List;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class IndicesClientAnalyzeMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -56,6 +53,8 @@ public class IndicesClientAnalyzeMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/IndicesClientCreateMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/IndicesClientCreateMethodsInterceptorTest.java
index b5519bdb4f..a3c4ae5894 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/IndicesClientCreateMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/IndicesClientCreateMethodsInterceptorTest.java
@@ -17,6 +17,10 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.ExitSpan;
@@ -39,16 +43,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class IndicesClientCreateMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -56,6 +54,8 @@ public class IndicesClientCreateMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/IndicesClientDeleteMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/IndicesClientDeleteMethodsInterceptorTest.java
index 8d1dbf4748..e5938e0dcb 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/IndicesClientDeleteMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/IndicesClientDeleteMethodsInterceptorTest.java
@@ -17,6 +17,9 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.ExitSpan;
@@ -38,15 +41,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class IndicesClientDeleteMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -54,6 +52,8 @@ public class IndicesClientDeleteMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientClearScrollMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientClearScrollMethodsInterceptorTest.java
index 48afd0a891..c60a60c52c 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientClearScrollMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientClearScrollMethodsInterceptorTest.java
@@ -17,6 +17,12 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+import java.util.ArrayList;
+import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.ExitSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
@@ -37,19 +43,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class RestHighLevelClientClearScrollMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -57,6 +54,8 @@ public class RestHighLevelClientClearScrollMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientConInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientConInterceptorTest.java
index eda7e16d0f..6b38b88478 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientConInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientConInterceptorTest.java
@@ -17,6 +17,9 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.http.HttpHost;
@@ -27,24 +30,17 @@ import org.elasticsearch.client.Node;
 import org.elasticsearch.client.RestClient;
 import org.elasticsearch.client.RestClientBuilder;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest(value = {
-    RestClientBuilder.class,
-    HttpHost.class
-})
+@RunWith(TracingSegmentRunner.class)
 public class RestHighLevelClientConInterceptorTest {
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private RestClientBuilder restClientBuilder;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientDeleteByQueryMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientDeleteByQueryMethodsInterceptorTest.java
index dec8638ba5..8ee7e22f35 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientDeleteByQueryMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientDeleteByQueryMethodsInterceptorTest.java
@@ -17,6 +17,11 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.ExitSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
@@ -37,18 +42,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import java.util.List;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class RestHighLevelClientDeleteByQueryMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -56,6 +53,8 @@ public class RestHighLevelClientDeleteByQueryMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientGetMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientGetMethodsInterceptorTest.java
index 2a0aee398d..c67fa8b8f7 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientGetMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientGetMethodsInterceptorTest.java
@@ -17,6 +17,10 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.ExitSpan;
@@ -38,16 +42,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class RestHighLevelClientGetMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -55,6 +53,8 @@ public class RestHighLevelClientGetMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientIndexMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientIndexMethodsInterceptorTest.java
index 35e999ff95..5d0af33fc7 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientIndexMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientIndexMethodsInterceptorTest.java
@@ -17,6 +17,10 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.ExitSpan;
@@ -38,16 +42,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class RestHighLevelClientIndexMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -55,6 +53,8 @@ public class RestHighLevelClientIndexMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientSearchMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientSearchMethodsInterceptorTest.java
index 264de2a899..152674b5b5 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientSearchMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientSearchMethodsInterceptorTest.java
@@ -17,6 +17,10 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.ExitSpan;
@@ -38,18 +42,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest(SearchRequest.class)
+@RunWith(TracingSegmentRunner.class)
 public class RestHighLevelClientSearchMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -57,6 +53,8 @@ public class RestHighLevelClientSearchMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientSearchScrollMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientSearchScrollMethodsInterceptorTest.java
index 87c087836c..80ffc0aa15 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientSearchScrollMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientSearchScrollMethodsInterceptorTest.java
@@ -17,6 +17,11 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.ExitSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
@@ -37,18 +42,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import java.util.List;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class RestHighLevelClientSearchScrollMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -56,6 +53,8 @@ public class RestHighLevelClientSearchScrollMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientSearchTemplateMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientSearchTemplateMethodsInterceptorTest.java
index c4081878fd..a1c0c68ad5 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientSearchTemplateMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientSearchTemplateMethodsInterceptorTest.java
@@ -17,6 +17,11 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.ExitSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
@@ -37,18 +42,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import java.util.List;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class RestHighLevelClientSearchTemplateMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -56,6 +53,8 @@ public class RestHighLevelClientSearchTemplateMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientUpdateMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientUpdateMethodsInterceptorTest.java
index 4b61ed3f84..52c1ddf8b3 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientUpdateMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/RestHighLevelClientUpdateMethodsInterceptorTest.java
@@ -17,6 +17,10 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.ExitSpan;
@@ -38,16 +42,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class RestHighLevelClientUpdateMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -55,6 +53,8 @@ public class RestHighLevelClientUpdateMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/TransportActionNodeProxyExecuteMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/TransportActionNodeProxyExecuteMethodsInterceptorTest.java
index e803acadd2..cafd86233d 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/TransportActionNodeProxyExecuteMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/TransportActionNodeProxyExecuteMethodsInterceptorTest.java
@@ -18,6 +18,11 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.TRANSPORT_CLIENT;
+import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.net.InetSocketAddress;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
@@ -47,17 +52,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.TRANSPORT_CLIENT;
-import static org.apache.skywalking.apm.plugin.elasticsearch.v6.ElasticsearchPluginConfig.Plugin.Elasticsearch.TRACE_DSL;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class TransportActionNodeProxyExecuteMethodsInterceptorTest {
 
     @SegmentStoragePoint
@@ -65,6 +63,8 @@ public class TransportActionNodeProxyExecuteMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/TransportServiceConInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/TransportServiceConInterceptorTest.java
index 96346825a2..af176ec282 100644
--- a/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/TransportServiceConInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/elasticsearch-6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/elasticsearch/v6/interceptor/TransportServiceConInterceptorTest.java
@@ -18,28 +18,25 @@
 
 package org.apache.skywalking.apm.plugin.elasticsearch.v6.interceptor;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.apache.skywalking.apm.plugin.elasticsearch.v6.TransportClientEnhanceInfo;
 import org.elasticsearch.common.settings.Settings;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest(value = {
-        Settings.class
-})
+@RunWith(TracingSegmentRunner.class)
 public class TransportServiceConInterceptorTest {
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private Settings settings;
diff --git a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptorTest.java
index cb2e79ae0a..8855cac66b 100644
--- a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptorTest.java
@@ -41,9 +41,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
 import java.nio.charset.Charset;
 import java.util.Collection;
@@ -57,9 +54,7 @@ import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest({Response.class})
+@RunWith(TracingSegmentRunner.class)
 public class DefaultHttpClientInterceptorTest {
 
     @SegmentStoragePoint
diff --git a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/feign/http/v9/PathVarInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/feign/http/v9/PathVarInterceptorTest.java
index 7c803c8aa3..856a19e52c 100644
--- a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/feign/http/v9/PathVarInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/feign/http/v9/PathVarInterceptorTest.java
@@ -18,7 +18,10 @@
 
 package org.apache.skywalking.apm.plugin.feign.http.v9;
 
-import feign.RequestTemplate;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import java.util.HashMap;
+import java.util.Map;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
 import org.junit.After;
@@ -26,15 +29,10 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import org.mockito.junit.MockitoJUnitRunner;
+import feign.RequestTemplate;
 
-@RunWith(PowerMockRunner.class)
+@RunWith(MockitoJUnitRunner.class)
 public class PathVarInterceptorTest {
 
     private PathVarInterceptor pathVarInterceptor;
diff --git a/apm-sniffer/apm-sdk-plugin/finagle-6.25.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/finagle/CodecUtils.java b/apm-sniffer/apm-sdk-plugin/finagle-6.25.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/finagle/CodecUtils.java
index d9c5503b50..ae2d17c44f 100644
--- a/apm-sniffer/apm-sdk-plugin/finagle-6.25.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/finagle/CodecUtils.java
+++ b/apm-sniffer/apm-sdk-plugin/finagle-6.25.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/finagle/CodecUtils.java
@@ -68,7 +68,6 @@ public class CodecUtils {
      * CarrierItem}, and so on.
      *
      * @param swContextCarrier the swContextCarrier to encode
-     * @return
      */
     static Buf encode(SWContextCarrier swContextCarrier) {
         if (StringUtil.isNotEmpty(swContextCarrier.getOperationName())
@@ -105,7 +104,6 @@ public class CodecUtils {
      * For convenient, we use {@link ByteBuffer} to wrap byte array.
      *
      * @param buf the byte array to decode
-     * @return
      */
     static SWContextCarrier decode(Buf buf) {
         try {
diff --git a/apm-sniffer/apm-sdk-plugin/finagle-6.25.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/finagle/ClientTracingFilterInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/finagle-6.25.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/finagle/ClientTracingFilterInterceptorTest.java
index 84dc1edff7..c83fdca80d 100644
--- a/apm-sniffer/apm-sdk-plugin/finagle-6.25.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/finagle/ClientTracingFilterInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/finagle-6.25.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/finagle/ClientTracingFilterInterceptorTest.java
@@ -28,8 +28,6 @@ import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
 import java.net.Inet4Address;
 import java.net.InetSocketAddress;
@@ -38,8 +36,7 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class ClientTracingFilterInterceptorTest extends AbstractTracingFilterTest {
 
     @SegmentStoragePoint
diff --git a/apm-sniffer/apm-sdk-plugin/finagle-6.25.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/finagle/ServerTracingFilterInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/finagle-6.25.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/finagle/ServerTracingFilterInterceptorTest.java
index d09ddf4190..83035a62e1 100644
--- a/apm-sniffer/apm-sdk-plugin/finagle-6.25.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/finagle/ServerTracingFilterInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/finagle-6.25.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/finagle/ServerTracingFilterInterceptorTest.java
@@ -31,16 +31,13 @@ import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import scala.runtime.AbstractFunction0;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class ServerTracingFilterInterceptorTest extends AbstractTracingFilterTest {
 
     @SegmentStoragePoint
diff --git a/apm-sniffer/apm-sdk-plugin/guava-eventbus-plugin/src/test/java/org/apache/skywalking/apm/plugin/guava/eventbus/EventBusDispatchInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/guava-eventbus-plugin/src/test/java/org/apache/skywalking/apm/plugin/guava/eventbus/EventBusDispatchInterceptorTest.java
index fe891ddf7c..dc5056ffd8 100644
--- a/apm-sniffer/apm-sdk-plugin/guava-eventbus-plugin/src/test/java/org/apache/skywalking/apm/plugin/guava/eventbus/EventBusDispatchInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/guava-eventbus-plugin/src/test/java/org/apache/skywalking/apm/plugin/guava/eventbus/EventBusDispatchInterceptorTest.java
@@ -21,33 +21,45 @@ package org.apache.skywalking.apm.plugin.guava.eventbus;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
-import static org.powermock.api.mockito.PowerMockito.mockStatic;
-import static org.powermock.api.mockito.PowerMockito.when;
-
 import org.apache.skywalking.apm.agent.core.context.ContextManager;
 import org.apache.skywalking.apm.agent.core.context.ContextSnapshot;
+import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PrepareForTest(ContextManager.class)
+@RunWith(MockitoJUnitRunner.class)
 public class EventBusDispatchInterceptorTest {
 
     private EventBusDispatchInterceptor interceptor;
     private Object originalEventObj;
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
     @Mock
     private ContextSnapshot contextSnapshot;
 
+    private MockedStatic<ContextManager> mockedContextManager;
+
     @Before
     public void setUp() throws Exception {
         interceptor = new EventBusDispatchInterceptor();
         originalEventObj = new Object();
-        mockStatic(ContextManager.class);
-        when(ContextManager.capture()).thenReturn(contextSnapshot);
+
+        mockedContextManager = Mockito.mockStatic(ContextManager.class);
+        mockedContextManager.when(ContextManager::capture).thenReturn(contextSnapshot);
+    }
+
+    @After
+    public void tearDown() {
+        mockedContextManager.close();
     }
 
     @Test
@@ -66,4 +78,4 @@ public class EventBusDispatchInterceptorTest {
         assertNull(arguments[0]);
     }
 
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/guava-eventbus-plugin/src/test/java/org/apache/skywalking/apm/plugin/guava/eventbus/EventBusSubscriberConstructorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/guava-eventbus-plugin/src/test/java/org/apache/skywalking/apm/plugin/guava/eventbus/EventBusSubscriberConstructorInterceptorTest.java
index 2ac63b8365..e5998d4e19 100644
--- a/apm-sniffer/apm-sdk-plugin/guava-eventbus-plugin/src/test/java/org/apache/skywalking/apm/plugin/guava/eventbus/EventBusSubscriberConstructorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/guava-eventbus-plugin/src/test/java/org/apache/skywalking/apm/plugin/guava/eventbus/EventBusSubscriberConstructorInterceptorTest.java
@@ -20,15 +20,14 @@ package org.apache.skywalking.apm.plugin.guava.eventbus;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-
 import java.lang.reflect.Method;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 
-@RunWith(PowerMockRunner.class)
+@RunWith(MockitoJUnitRunner.class)
 public class EventBusSubscriberConstructorInterceptorTest {
 
     private EventBusSubscriberConstructorInterceptor interceptor;
@@ -65,4 +64,4 @@ public class EventBusSubscriberConstructorInterceptorTest {
         assertEquals("test", subscriberInfo.getMethodName());
         assertEquals(Object.class.getName(), subscriberInfo.getClassName());
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/guava-eventbus-plugin/src/test/java/org/apache/skywalking/apm/plugin/guava/eventbus/EventBusSubscriberInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/guava-eventbus-plugin/src/test/java/org/apache/skywalking/apm/plugin/guava/eventbus/EventBusSubscriberInterceptorTest.java
index 1d6a5ea11f..fb0e547712 100644
--- a/apm-sniffer/apm-sdk-plugin/guava-eventbus-plugin/src/test/java/org/apache/skywalking/apm/plugin/guava/eventbus/EventBusSubscriberInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/guava-eventbus-plugin/src/test/java/org/apache/skywalking/apm/plugin/guava/eventbus/EventBusSubscriberInterceptorTest.java
@@ -36,11 +36,8 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class EventBusSubscriberInterceptorTest {
 
     @Rule
@@ -87,4 +84,4 @@ public class EventBusSubscriberInterceptorTest {
         assertThat(spans, notNullValue());
         assertThat(spans.size(), is(1));
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptorTest.java
index 4e139e735a..6d120b4183 100644
--- a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptorTest.java
@@ -18,6 +18,13 @@
 
 package org.apache.skywalking.apm.plugin.httpClient.v4;
 
+import static junit.framework.TestCase.assertNotNull;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import java.net.URI;
 import java.util.List;
 import org.apache.http.HttpHost;
@@ -46,22 +53,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static junit.framework.TestCase.assertNotNull;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest(HttpHost.class)
+@RunWith(TracingSegmentRunner.class)
 public class HttpClientExecuteInterceptorTest {
 
     @SegmentStoragePoint
@@ -69,6 +64,8 @@ public class HttpClientExecuteInterceptorTest {
 
     @Rule
     public AgentServiceRule agentServiceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private HttpClientExecuteInterceptor httpClientExecuteInterceptor;
     @Mock
@@ -93,7 +90,6 @@ public class HttpClientExecuteInterceptorTest {
         httpClientExecuteInterceptor = new HttpClientExecuteInterceptor();
         HttpClientPluginConfig.Plugin.HttpClient.COLLECT_HTTP_PARAMS = true;
 
-        PowerMockito.mock(HttpHost.class);
         when(statusLine.getStatusCode()).thenReturn(200);
         when(httpResponse.getStatusLine()).thenReturn(statusLine);
         when(httpHost.getHostName()).thenReturn("127.0.0.1");
diff --git a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/httpasyncclient/v4/HttpAsyncClientInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/httpasyncclient/v4/HttpAsyncClientInterceptorTest.java
index 22695420d1..0c334eea11 100644
--- a/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/httpasyncclient/v4/HttpAsyncClientInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/httpasyncclient/v4/HttpAsyncClientInterceptorTest.java
@@ -17,6 +17,12 @@
 
 package org.apache.skywalking.apm.plugin.httpasyncclient.v4;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import java.net.URI;
 import java.util.List;
 import org.apache.http.HttpHost;
@@ -57,20 +63,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest(HttpHost.class)
+@RunWith(TracingSegmentRunner.class)
 public class HttpAsyncClientInterceptorTest {
 
     @SegmentStoragePoint
@@ -78,6 +74,8 @@ public class HttpAsyncClientInterceptorTest {
 
     @Rule
     public AgentServiceRule agentServiceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private EnhancedInstance enhancedInstance;
 
diff --git a/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/httpclient-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/httpclient/v5/HttpClientExecuteInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/httpclient-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/httpclient/v5/HttpClientExecuteInterceptorTest.java
index b5eb47905d..b4c1972d1e 100644
--- a/apm-sniffer/apm-sdk-plugin/httpclient-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/httpclient/v5/HttpClientExecuteInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/httpclient-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/httpclient/v5/HttpClientExecuteInterceptorTest.java
@@ -18,6 +18,15 @@
 
 package org.apache.skywalking.apm.plugin.httpclient.v5;
 
+import static junit.framework.TestCase.assertNotNull;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import java.net.URI;
+import java.util.List;
 import org.apache.hc.core5.http.ClassicHttpRequest;
 import org.apache.hc.core5.http.ClassicHttpResponse;
 import org.apache.hc.core5.http.HttpHost;
@@ -40,25 +49,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import java.net.URI;
-import java.util.List;
-
-import static junit.framework.TestCase.assertNotNull;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest(HttpHost.class)
+@RunWith(TracingSegmentRunner.class)
 public class HttpClientExecuteInterceptorTest {
 
     @SegmentStoragePoint
@@ -66,6 +60,8 @@ public class HttpClientExecuteInterceptorTest {
 
     @Rule
     public AgentServiceRule agentServiceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private HttpClientDoExecuteInterceptor httpClientDoExecuteInterceptor;
 
@@ -88,7 +84,6 @@ public class HttpClientExecuteInterceptorTest {
         ServiceManager.INSTANCE.boot();
         httpClientDoExecuteInterceptor = new HttpClientDoExecuteInterceptor();
 
-        PowerMockito.mock(HttpHost.class);
         when(httpResponse.getCode()).thenReturn(200);
         when(httpHost.getHostName()).thenReturn("127.0.0.1");
         when(httpHost.getSchemeName()).thenReturn("http");
diff --git a/apm-sniffer/apm-sdk-plugin/httpclient-5.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-sdk-plugin/httpclient-5.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/httpclient-5.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/CreateCallableStatementInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/CreateCallableStatementInterceptorTest.java
index 908a57e3ab..e8ead36f60 100644
--- a/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/CreateCallableStatementInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/CreateCallableStatementInterceptorTest.java
@@ -18,18 +18,17 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.impala;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnitRunner;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CreateCallableStatementInterceptorTest {
@@ -57,12 +56,12 @@ public class CreateCallableStatementInterceptorTest {
     @Test
     public void testResultIsEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, ret);
-        verify(ret).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret).setSkyWalkingDynamicField(any());
     }
 
     @Test
     public void testResultIsNotEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, new Object());
-        verify(ret, times(0)).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/CreatePreparedStatementInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/CreatePreparedStatementInterceptorTest.java
index 81e5d03e6e..37080fbc55 100644
--- a/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/CreatePreparedStatementInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/CreatePreparedStatementInterceptorTest.java
@@ -18,18 +18,17 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.impala;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnitRunner;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CreatePreparedStatementInterceptorTest {
@@ -57,12 +56,12 @@ public class CreatePreparedStatementInterceptorTest {
     @Test
     public void testResultIsEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, ret);
-        verify(ret).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret).setSkyWalkingDynamicField(any());
     }
 
     @Test
     public void testResultIsNotEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, new Object());
-        verify(ret, times(0)).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/CreateStatementInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/CreateStatementInterceptorTest.java
index 5c813435e8..61469e2410 100644
--- a/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/CreateStatementInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/CreateStatementInterceptorTest.java
@@ -18,18 +18,17 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.impala;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnitRunner;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CreateStatementInterceptorTest {
@@ -57,12 +56,12 @@ public class CreateStatementInterceptorTest {
     @Test
     public void testResultIsEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, ret);
-        verify(ret).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret).setSkyWalkingDynamicField(any());
     }
 
     @Test
     public void testResultIsNotEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, new Object());
-        verify(ret, times(0)).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/PreparedStatementExecuteMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/PreparedStatementExecuteMethodsInterceptorTest.java
index 33a651c137..02f45c0531 100644
--- a/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/PreparedStatementExecuteMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/PreparedStatementExecuteMethodsInterceptorTest.java
@@ -18,6 +18,10 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.impala;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+import java.lang.reflect.Method;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
@@ -39,17 +43,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import java.lang.reflect.Method;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class PreparedStatementExecuteMethodsInterceptorTest {
 
     private static final String SQL = "Select * from test where id = ?";
@@ -59,6 +56,8 @@ public class PreparedStatementExecuteMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private PreparedStatementExecuteMethodsInterceptor serviceMethodInterceptor;
 
@@ -114,7 +113,7 @@ public class PreparedStatementExecuteMethodsInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is("Impala/JDBC/PreparedStatement/"));
+        assertThat(span.getOperationName(), is("Impala/JDBC/PreparedStatement/executeQuery"));
         SpanAssert.assertTag(span, 0, "Impala");
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, SQL);
@@ -144,7 +143,7 @@ public class PreparedStatementExecuteMethodsInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is("Impala/JDBC/PreparedStatement/"));
+        assertThat(span.getOperationName(), is("Impala/JDBC/PreparedStatement/executeQuery"));
         SpanAssert.assertTag(span, 0, "Impala");
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, "Select * f...");
diff --git a/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/StatementExecuteMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/StatementExecuteMethodsInterceptorTest.java
index 052b59f004..a19ee57c0a 100644
--- a/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/StatementExecuteMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/impala-jdbc-2.6.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/impala/StatementExecuteMethodsInterceptorTest.java
@@ -18,6 +18,10 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.impala;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+import java.lang.reflect.Method;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
@@ -32,23 +36,15 @@ import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
 import org.apache.skywalking.apm.plugin.jdbc.JDBCPluginConfig;
 import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import java.lang.reflect.Method;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class StatementExecuteMethodsInterceptorTest {
 
     private static final String SQL = "Select * from test";
@@ -58,6 +54,8 @@ public class StatementExecuteMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private StatementExecuteMethodsInterceptor serviceMethodInterceptor;
 
@@ -71,6 +69,7 @@ public class StatementExecuteMethodsInterceptorTest {
 
     @Before
     public void setUp() {
+        JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 2048;
         serviceMethodInterceptor = new StatementExecuteMethodsInterceptor();
 
         enhanceRequireCacheObject = new StatementEnhanceInfos(connectionInfo, SQL, "CallableStatement");
@@ -82,11 +81,6 @@ public class StatementExecuteMethodsInterceptorTest {
         when(connectionInfo.getDatabasePeer()).thenReturn("localhost:21050");
     }
 
-    @After
-    public void clean() {
-        JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 2048;
-    }
-
     @Test
     public void testExecuteStatement() {
         serviceMethodInterceptor.beforeMethod(objectInstance, method, new Object[]{SQL}, null, null);
@@ -97,7 +91,7 @@ public class StatementExecuteMethodsInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is("Impala/JDBC/CallableStatement/"));
+        assertThat(span.getOperationName(), is("Impala/JDBC/CallableStatement/executeQuery"));
         SpanAssert.assertTag(span, 0, "Impala");
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, SQL);
@@ -114,7 +108,7 @@ public class StatementExecuteMethodsInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is("Impala/JDBC/CallableStatement/"));
+        assertThat(span.getOperationName(), is("Impala/JDBC/CallableStatement/executeQuery"));
         SpanAssert.assertTag(span, 0, "Impala");
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, "Select * f...");
diff --git a/apm-sniffer/apm-sdk-plugin/influxdb-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/influxdb/define/InfluxDBInstrumentation.java b/apm-sniffer/apm-sdk-plugin/influxdb-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/influxdb/define/InfluxDBInstrumentation.java
index 3570975f44..19ffcd82a0 100644
--- a/apm-sniffer/apm-sdk-plugin/influxdb-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/influxdb/define/InfluxDBInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/influxdb-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/influxdb/define/InfluxDBInstrumentation.java
@@ -32,7 +32,6 @@ import java.util.Set;
 import static net.bytebuddy.matcher.ElementMatchers.named;
 import static net.bytebuddy.matcher.ElementMatchers.none;
 
-
 /**
  * Enhance InfluxDB InfluxDBFactory
  * Really impl class {@link org.influxdb.impl.InfluxDBImpl}
diff --git a/apm-sniffer/apm-sdk-plugin/influxdb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/influxdb/InfluxDBConstructorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/influxdb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/influxdb/InfluxDBConstructorInterceptorTest.java
index 434dff094d..6e07ec466c 100644
--- a/apm-sniffer/apm-sdk-plugin/influxdb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/influxdb/InfluxDBConstructorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/influxdb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/influxdb/InfluxDBConstructorInterceptorTest.java
@@ -24,7 +24,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 
 import static org.mockito.Mockito.verify;
 
diff --git a/apm-sniffer/apm-sdk-plugin/influxdb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/influxdb/InfluxDBMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/influxdb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/influxdb/InfluxDBMethodInterceptorTest.java
index 342b0a446f..56f3007c3f 100644
--- a/apm-sniffer/apm-sdk-plugin/influxdb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/influxdb/InfluxDBMethodInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/influxdb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/influxdb/InfluxDBMethodInterceptorTest.java
@@ -18,6 +18,13 @@
 
 package org.apache.skywalking.apm.plugin.influxdb;
 
+import static junit.framework.TestCase.assertNotNull;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.when;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.LogDataEntity;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
@@ -44,20 +51,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import java.lang.reflect.Method;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-import static junit.framework.TestCase.assertNotNull;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Mockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class InfluxDBMethodInterceptorTest {
 
     @SegmentStoragePoint
@@ -65,6 +62,8 @@ public class InfluxDBMethodInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SWCallableStatementTest.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SWCallableStatementTest.java
index 7f51ef8402..89745008ea 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SWCallableStatementTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SWCallableStatementTest.java
@@ -18,7 +18,20 @@
 
 package org.apache.skywalking.apm.plugin.jdbc;
 
-import com.mysql.cj.api.jdbc.JdbcConnection;
+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.anyByte;
+import static org.mockito.ArgumentMatchers.anyDouble;
+import static org.mockito.ArgumentMatchers.anyFloat;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyShort;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import java.io.InputStream;
 import java.io.Reader;
 import java.math.BigDecimal;
@@ -43,42 +56,26 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Properties;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
+import org.apache.skywalking.apm.agent.core.context.trace.LogDataEntity;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
 import org.apache.skywalking.apm.agent.test.helper.SegmentHelper;
 import org.apache.skywalking.apm.agent.test.helper.SpanHelper;
 import org.apache.skywalking.apm.agent.test.tools.AgentServiceRule;
 import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
 import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
+import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.hamcrest.CoreMatchers;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-import org.apache.skywalking.apm.agent.core.context.trace.LogDataEntity;
-import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyByte;
-import static org.mockito.Matchers.anyDouble;
-import static org.mockito.Matchers.anyFloat;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.anyShort;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.mysql.cj.api.jdbc.JdbcConnection;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class SWCallableStatementTest extends AbstractStatementTest {
 
     @SegmentStoragePoint
@@ -86,6 +83,8 @@ public class SWCallableStatementTest extends AbstractStatementTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private Array array;
@@ -331,9 +330,9 @@ public class SWCallableStatementTest extends AbstractStatementTest {
         verify(mysqlCallableStatement).setNCharacterStream(anyInt(), any(Reader.class), anyLong());
         verify(mysqlCallableStatement).setNClob(27, nClob);
         verify(mysqlCallableStatement).setNClob(28, reader, 1);
-        verify(mysqlCallableStatement).setObject(anyInt(), Matchers.anyObject());
-        verify(mysqlCallableStatement).setObject(anyInt(), Matchers.anyObject(), anyInt());
-        verify(mysqlCallableStatement).setObject(anyInt(), Matchers.anyObject(), anyInt(), anyInt());
+        verify(mysqlCallableStatement).setObject(anyInt(), any());
+        verify(mysqlCallableStatement).setObject(anyInt(), any(), anyInt());
+        verify(mysqlCallableStatement).setObject(anyInt(), any(), anyInt(), anyInt());
         verify(mysqlCallableStatement).setRef(anyInt(), any(Ref.class));
         verify(mysqlCallableStatement).setRowId(anyInt(), any(RowId.class));
         verify(mysqlCallableStatement).setSQLXML(anyInt(), any(SQLXML.class));
@@ -383,9 +382,9 @@ public class SWCallableStatementTest extends AbstractStatementTest {
         verify(mysqlCallableStatement).setNCharacterStream(anyString(), any(Reader.class), anyLong());
         verify(mysqlCallableStatement).setNClob(27, nClob);
         verify(mysqlCallableStatement).setNClob(28, reader, 1);
-        verify(mysqlCallableStatement).setObject(anyString(), Matchers.anyObject());
-        verify(mysqlCallableStatement).setObject(anyString(), Matchers.anyObject(), anyInt());
-        verify(mysqlCallableStatement).setObject(anyString(), Matchers.anyObject(), anyInt(), anyInt());
+        verify(mysqlCallableStatement).setObject(anyString(), any());
+        verify(mysqlCallableStatement).setObject(anyString(), any(), anyInt());
+        verify(mysqlCallableStatement).setObject(anyString(), any(), anyInt(), anyInt());
         verify(mysqlCallableStatement).setRowId(anyString(), any(RowId.class));
         verify(mysqlCallableStatement).setSQLXML(anyString(), any(SQLXML.class));
         verify(mysqlCallableStatement).setTime(anyString(), any(Time.class));
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SWConnectionTest.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SWConnectionTest.java
index 976c8272da..df40e5d4eb 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SWConnectionTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SWConnectionTest.java
@@ -18,7 +18,15 @@
 
 package org.apache.skywalking.apm.plugin.jdbc;
 
-import com.mysql.cj.api.jdbc.JdbcConnection;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.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.Mockito.doThrow;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.Savepoint;
@@ -26,34 +34,24 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Properties;
 import java.util.concurrent.Executor;
-import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
 import org.apache.skywalking.apm.agent.test.helper.SegmentHelper;
 import org.apache.skywalking.apm.agent.test.helper.SpanHelper;
 import org.apache.skywalking.apm.agent.test.tools.AgentServiceRule;
+import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
 import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.mysql.cj.api.jdbc.JdbcConnection;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class SWConnectionTest extends AbstractStatementTest {
 
     @SegmentStoragePoint
@@ -61,6 +59,8 @@ public class SWConnectionTest extends AbstractStatementTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private com.mysql.cj.jdbc.PreparedStatement mysqlPreparedStatement;
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SWStatementTest.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SWStatementTest.java
index babed04396..05a3c7255c 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SWStatementTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SWStatementTest.java
@@ -18,7 +18,13 @@
 
 package org.apache.skywalking.apm.plugin.jdbc;
 
-import com.mysql.cj.api.jdbc.JdbcConnection;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import java.net.MalformedURLException;
 import java.sql.Connection;
 import java.sql.ResultSet;
@@ -26,33 +32,25 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.List;
 import java.util.Properties;
-import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
-import org.hamcrest.CoreMatchers;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
 import org.apache.skywalking.apm.agent.test.helper.SegmentHelper;
 import org.apache.skywalking.apm.agent.test.helper.SpanHelper;
 import org.apache.skywalking.apm.agent.test.tools.AgentServiceRule;
+import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
 import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
+import org.hamcrest.CoreMatchers;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.mysql.cj.api.jdbc.JdbcConnection;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class SWStatementTest extends AbstractStatementTest {
 
     @SegmentStoragePoint
@@ -60,6 +58,8 @@ public class SWStatementTest extends AbstractStatementTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private com.mysql.cj.jdbc.StatementImpl mysqlStatement;
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SwPreparedStatementTest.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SwPreparedStatementTest.java
index 63c6d0fcf6..d848a3cad6 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SwPreparedStatementTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/SwPreparedStatementTest.java
@@ -18,7 +18,20 @@
 
 package org.apache.skywalking.apm.plugin.jdbc;
 
-import com.mysql.cj.api.jdbc.JdbcConnection;
+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.anyByte;
+import static org.mockito.ArgumentMatchers.anyDouble;
+import static org.mockito.ArgumentMatchers.anyFloat;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyShort;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import java.io.InputStream;
 import java.io.Reader;
 import java.math.BigDecimal;
@@ -56,34 +69,20 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyByte;
-import static org.mockito.Matchers.anyDouble;
-import static org.mockito.Matchers.anyFloat;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.anyShort;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.mysql.cj.api.jdbc.JdbcConnection;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class SwPreparedStatementTest extends AbstractStatementTest {
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private Array array;
@@ -212,9 +211,9 @@ public class SwPreparedStatementTest extends AbstractStatementTest {
         verify(mysqlPreparedStatement).setNCharacterStream(anyInt(), any(Reader.class), anyLong());
         verify(mysqlPreparedStatement).setNClob(27, nClob);
         verify(mysqlPreparedStatement).setNClob(28, reader, 1);
-        verify(mysqlPreparedStatement).setObject(anyInt(), Matchers.anyObject());
-        verify(mysqlPreparedStatement).setObject(anyInt(), Matchers.anyObject(), anyInt());
-        verify(mysqlPreparedStatement).setObject(anyInt(), Matchers.anyObject(), anyInt(), anyInt());
+        verify(mysqlPreparedStatement).setObject(anyInt(), any());
+        verify(mysqlPreparedStatement).setObject(anyInt(), any(), anyInt());
+        verify(mysqlPreparedStatement).setObject(anyInt(), any(), anyInt(), anyInt());
         verify(mysqlPreparedStatement).setRef(anyInt(), any(Ref.class));
         verify(mysqlPreparedStatement).setRowId(anyInt(), any(RowId.class));
         verify(mysqlPreparedStatement).setSQLXML(anyInt(), any(SQLXML.class));
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/jedis-plugins/jedis-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v4/JedisPluginConfig.java b/apm-sniffer/apm-sdk-plugin/jedis-plugins/jedis-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v4/JedisPluginConfig.java
index 2ca6ca34b1..3921fb7eba 100644
--- a/apm-sniffer/apm-sdk-plugin/jedis-plugins/jedis-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v4/JedisPluginConfig.java
+++ b/apm-sniffer/apm-sdk-plugin/jedis-plugins/jedis-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jedis/v4/JedisPluginConfig.java
@@ -41,7 +41,6 @@ public class JedisPluginConfig {
              */
             public static int REDIS_PARAMETER_MAX_LENGTH = 128;
 
-
             /**
              * Operation represent a cache span is "write" or "read" action , and "op"(operation) is tagged with key "cache.op" usually
              * This config term define which command should be converted to write Operation .
diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.0-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v90/client/SyncHttpRequestSendInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.0-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v90/client/SyncHttpRequestSendInterceptorTest.java
index 78f5977c0f..b146ca16e6 100644
--- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.0-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v90/client/SyncHttpRequestSendInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.0-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v90/client/SyncHttpRequestSendInterceptorTest.java
@@ -18,6 +18,8 @@
 
 package org.apache.skywalking.apm.plugin.jetty.v90.client;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 import java.net.URI;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
@@ -40,20 +42,19 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class SyncHttpRequestSendInterceptorTest {
 
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
     @Mock
     private HttpClient httpClient;
     @Mock
diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/SyncHttpRequestSendInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/SyncHttpRequestSendInterceptorTest.java
index ded7e3d58d..e4a861fbc7 100644
--- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/SyncHttpRequestSendInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/SyncHttpRequestSendInterceptorTest.java
@@ -18,6 +18,8 @@
 
 package org.apache.skywalking.apm.plugin.jetty.v9.client;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 import java.net.URI;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
@@ -39,20 +41,19 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class SyncHttpRequestSendInterceptorTest {
 
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
     @Mock
     private HttpClient httpClient;
     @Mock
diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/server/HandleInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/server/HandleInterceptorTest.java
index 2db772135f..f4c8fef0dd 100644
--- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/server/HandleInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/server/HandleInterceptorTest.java
@@ -18,6 +18,10 @@
 
 package org.apache.skywalking.apm.plugin.jetty.v9.server;
 
+import static org.apache.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.SW8CarrierItem;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
@@ -49,16 +53,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.apache.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class HandleInterceptorTest {
 
     private HandleInterceptor jettyInvokeInterceptor;
@@ -67,6 +65,8 @@ public class HandleInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private Request request;
diff --git a/apm-sniffer/apm-sdk-plugin/jsonrpc4j-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jsonrpc4j/JsonRpcHttpClientTests.java b/apm-sniffer/apm-sdk-plugin/jsonrpc4j-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jsonrpc4j/JsonRpcHttpClientTests.java
index 9296391c28..2c674fcc2f 100644
--- a/apm-sniffer/apm-sdk-plugin/jsonrpc4j-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jsonrpc4j/JsonRpcHttpClientTests.java
+++ b/apm-sniffer/apm-sdk-plugin/jsonrpc4j-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jsonrpc4j/JsonRpcHttpClientTests.java
@@ -18,8 +18,13 @@
 
 package org.apache.skywalking.apm.plugin.jsonrpc4j;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.googlecode.jsonrpc4j.JsonRpcHttpClient;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import org.apache.skywalking.apm.agent.core.boot.OverrideImplementor;
 import org.apache.skywalking.apm.agent.core.context.ContextManagerExtendService;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
@@ -37,20 +42,12 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.googlecode.jsonrpc4j.JsonRpcHttpClient;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class JsonRpcHttpClientTests {
 
     @SegmentStoragePoint
@@ -58,6 +55,8 @@ public class JsonRpcHttpClientTests {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private MockJsonRpcHttpClient enhancedInstance;
     private ObjectMapper objectMapper = new ObjectMapper();
diff --git a/apm-sniffer/apm-sdk-plugin/jsonrpc4j-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jsonrpc4j/JsonRpcServerTests.java b/apm-sniffer/apm-sdk-plugin/jsonrpc4j-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jsonrpc4j/JsonRpcServerTests.java
index e50b7d389b..05e27f6c99 100644
--- a/apm-sniffer/apm-sdk-plugin/jsonrpc4j-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jsonrpc4j/JsonRpcServerTests.java
+++ b/apm-sniffer/apm-sdk-plugin/jsonrpc4j-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jsonrpc4j/JsonRpcServerTests.java
@@ -18,8 +18,13 @@
 
 package org.apache.skywalking.apm.plugin.jsonrpc4j;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.googlecode.jsonrpc4j.JsonRpcBasicServer;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
 import org.apache.skywalking.apm.agent.core.context.util.TagValuePair;
@@ -35,21 +40,12 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.util.List;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.googlecode.jsonrpc4j.JsonRpcBasicServer;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class JsonRpcServerTests {
 
     @SegmentStoragePoint
@@ -57,6 +53,8 @@ public class JsonRpcServerTests {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private MockJsonRpcBasicServer mockJsonRpcBasicServer;
 
diff --git a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/AssignMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/AssignMethodInterceptorTest.java
index 8a516fa6ac..c902cc9222 100644
--- a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/AssignMethodInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/AssignMethodInterceptorTest.java
@@ -24,7 +24,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -67,4 +67,4 @@ public class AssignMethodInterceptorTest {
         ConsumerEnhanceRequiredInfo requiredInfo = (ConsumerEnhanceRequiredInfo) enhancedInstance.getSkyWalkingDynamicField();
         assertThat(requiredInfo.getTopics(), is("test;test-1"));
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/CallbackInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/CallbackInterceptorTest.java
index 62c54bff09..f80cd689d9 100644
--- a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/CallbackInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/CallbackInterceptorTest.java
@@ -18,6 +18,8 @@
 
 package org.apache.skywalking.apm.plugin.kafka;
 
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
 import java.util.List;
 import org.apache.kafka.clients.producer.RecordMetadata;
 import org.apache.skywalking.apm.agent.core.context.MockContextSnapshot;
@@ -39,16 +41,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest({RecordMetadata.class})
+@RunWith(TracingSegmentRunner.class)
 public class CallbackInterceptorTest {
 
     @SegmentStoragePoint
@@ -56,6 +52,8 @@ public class CallbackInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private RecordMetadata recordMetadata;
@@ -180,4 +178,4 @@ public class CallbackInterceptorTest {
     private void assertCallbackSpan(AbstractTracingSpan span) {
         assertThat(span.getOperationName(), is("Kafka/Producer/Callback"));
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ConstructorWithConsumerConfigInterceptPointTest.java b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ConstructorWithConsumerConfigInterceptPointTest.java
index 5ac604b069..bcdea90a1e 100644
--- a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ConstructorWithConsumerConfigInterceptPointTest.java
+++ b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ConstructorWithConsumerConfigInterceptPointTest.java
@@ -24,7 +24,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ConstructorWithMapInterceptPointTest.java b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ConstructorWithMapInterceptPointTest.java
index 2b3c4b8fd6..ba6c2dc102 100644
--- a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ConstructorWithMapInterceptPointTest.java
+++ b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ConstructorWithMapInterceptPointTest.java
@@ -23,7 +23,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 
 import java.util.Map;
 
diff --git a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/KafkaConsumerInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/KafkaConsumerInterceptorTest.java
index 929e73293e..eb3fc3752b 100644
--- a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/KafkaConsumerInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/KafkaConsumerInterceptorTest.java
@@ -18,6 +18,10 @@
 
 package org.apache.skywalking.apm.plugin.kafka;
 
+import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.KAFKA_CONSUMER;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -42,16 +46,10 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.KAFKA_CONSUMER;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class KafkaConsumerInterceptorTest {
 
     @SegmentStoragePoint
@@ -59,6 +57,8 @@ public class KafkaConsumerInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private ConsumerEnhanceRequiredInfo consumerEnhanceRequiredInfo;
 
@@ -147,4 +147,4 @@ public class KafkaConsumerInterceptorTest {
         MatcherAssert.assertThat(SegmentRefHelper.getSpanId(ref), is(3));
         MatcherAssert.assertThat(SegmentRefHelper.getTraceSegmentId(ref).toString(), is("3.4.5"));
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/KafkaProducerInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/KafkaProducerInterceptorTest.java
index daf2311951..cf42e9f194 100644
--- a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/KafkaProducerInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/KafkaProducerInterceptorTest.java
@@ -18,8 +18,10 @@
 
 package org.apache.skywalking.apm.plugin.kafka;
 
+import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.KAFKA_PRODUCER;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import java.util.List;
-
 import org.apache.kafka.clients.producer.Callback;
 import org.apache.kafka.clients.producer.ProducerRecord;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
@@ -36,21 +38,18 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.KAFKA_PRODUCER;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class KafkaProducerInterceptorTest {
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private KafkaProducerInterceptor producerInterceptor;
 
@@ -150,4 +149,4 @@ public class KafkaProducerInterceptorTest {
         SpanAssert.assertComponent(span, KAFKA_PRODUCER);
         assertThat(span.getOperationName(), is("Kafka/Producer/Callback"));
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ProducerConstructorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ProducerConstructorInterceptorTest.java
index c1f195ef89..7b51da63c0 100644
--- a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ProducerConstructorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ProducerConstructorInterceptorTest.java
@@ -24,7 +24,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -69,4 +69,4 @@ public class ProducerConstructorInterceptorTest {
         constructorInterceptor.onConstruct(enhancedInstance, new Object[] {producerConfig});
         assertThat(enhancedInstance.getSkyWalkingDynamicField().toString(), is("localhost:9092;localhost:19092"));
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ProducerConstructorMapInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ProducerConstructorMapInterceptorTest.java
index 8cc91452a9..44711c6718 100644
--- a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ProducerConstructorMapInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/ProducerConstructorMapInterceptorTest.java
@@ -24,7 +24,7 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -87,4 +87,4 @@ public class ProducerConstructorMapInterceptorTest {
         constructorMapInterceptor.onConstruct(enhancedInstance, new Object[]{PRODUCER_CONFIG_WITH_STRING_BOOTSTRAP_SERVERS});
         assertThat(enhancedInstance.getSkyWalkingDynamicField().toString(), is("localhost:9092;localhost:19092"));
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/SubscribeMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/SubscribeMethodInterceptorTest.java
index b221a4ef0c..17e686aab1 100644
--- a/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/SubscribeMethodInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/kafka-plugin/src/test/java/org/apache/skywalking/apm/plugin/kafka/SubscribeMethodInterceptorTest.java
@@ -23,7 +23,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -77,4 +77,4 @@ public class SubscribeMethodInterceptorTest {
         ConsumerEnhanceRequiredInfo requiredInfo = (ConsumerEnhanceRequiredInfo) enhancedInstance.getSkyWalkingDynamicField();
         assertThat(requiredInfo.getTopics(), is("test-.*"));
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/CreateCallableStatementInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/CreateCallableStatementInterceptorTest.java
index f44f2c2e45..91eed5ddf0 100644
--- a/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/CreateCallableStatementInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/CreateCallableStatementInterceptorTest.java
@@ -18,18 +18,17 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.kylin;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
-
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CreateCallableStatementInterceptorTest {
@@ -57,12 +56,12 @@ public class CreateCallableStatementInterceptorTest {
     @Test
     public void testResultIsEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, ret);
-        verify(ret).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret).setSkyWalkingDynamicField(any());
     }
 
     @Test
     public void testResultIsNotEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, new Object());
-        verify(ret, times(0)).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/CreatePreparedStatementInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/CreatePreparedStatementInterceptorTest.java
index 595eae0b87..2bc0b0989a 100644
--- a/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/CreatePreparedStatementInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/CreatePreparedStatementInterceptorTest.java
@@ -18,18 +18,17 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.kylin;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
-
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CreatePreparedStatementInterceptorTest {
@@ -57,12 +56,12 @@ public class CreatePreparedStatementInterceptorTest {
     @Test
     public void testResultIsEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, ret);
-        verify(ret).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret).setSkyWalkingDynamicField(any());
     }
 
     @Test
     public void testResultIsNotEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, new Object());
-        verify(ret, times(0)).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/CreateStatementInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/CreateStatementInterceptorTest.java
index 4d610f8ee3..f1a7883ea1 100644
--- a/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/CreateStatementInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/CreateStatementInterceptorTest.java
@@ -18,18 +18,17 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.kylin;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
-
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CreateStatementInterceptorTest {
@@ -57,12 +56,12 @@ public class CreateStatementInterceptorTest {
     @Test
     public void testResultIsEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, ret);
-        verify(ret).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret).setSkyWalkingDynamicField(any());
     }
 
     @Test
     public void testResultIsNotEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, new Object());
-        verify(ret, times(0)).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/PreparedStatementExecuteMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/PreparedStatementExecuteMethodsInterceptorTest.java
index 78e17281c0..43bbc99194 100644
--- a/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/PreparedStatementExecuteMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/PreparedStatementExecuteMethodsInterceptorTest.java
@@ -20,8 +20,7 @@ package org.apache.skywalking.apm.plugin.jdbc.kylin;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
+import static org.mockito.Mockito.when;
 import java.lang.reflect.Method;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
@@ -44,11 +43,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class PreparedStatementExecuteMethodsInterceptorTest {
 
     private static final String SQL = "Select * from test where id = ?";
@@ -58,6 +56,8 @@ public class PreparedStatementExecuteMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private PreparedStatementExecuteMethodsInterceptor serviceMethodInterceptor;
 
@@ -113,7 +113,7 @@ public class PreparedStatementExecuteMethodsInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is("kylin/JDBC/PreparedStatement/"));
+        assertThat(span.getOperationName(), is("kylin/JDBC/PreparedStatement/executeQuery"));
         SpanAssert.assertTag(span, 0, "kylin");
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, SQL);
@@ -143,7 +143,7 @@ public class PreparedStatementExecuteMethodsInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is("kylin/JDBC/PreparedStatement/"));
+        assertThat(span.getOperationName(), is("kylin/JDBC/PreparedStatement/executeQuery"));
         SpanAssert.assertTag(span, 0, "kylin");
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, "Select * f...");
diff --git a/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/StatementExecuteMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/StatementExecuteMethodsInterceptorTest.java
index d0847b8e26..293d7d2189 100644
--- a/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/StatementExecuteMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/kylin-jdbc-2.6.x-3.x-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/kylin/StatementExecuteMethodsInterceptorTest.java
@@ -20,8 +20,7 @@ package org.apache.skywalking.apm.plugin.jdbc.kylin;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
+import static org.mockito.Mockito.when;
 import java.lang.reflect.Method;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
@@ -37,17 +36,15 @@ import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
 import org.apache.skywalking.apm.plugin.jdbc.JDBCPluginConfig;
 import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class StatementExecuteMethodsInterceptorTest {
 
     private static final String SQL = "Select * from test";
@@ -57,6 +54,8 @@ public class StatementExecuteMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private StatementExecuteMethodsInterceptor serviceMethodInterceptor;
 
@@ -70,6 +69,7 @@ public class StatementExecuteMethodsInterceptorTest {
 
     @Before
     public void setUp() {
+        JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 2048;
         serviceMethodInterceptor = new StatementExecuteMethodsInterceptor();
 
         enhanceRequireCacheObject = new StatementEnhanceInfos(connectionInfo, SQL, "CallableStatement");
@@ -81,11 +81,6 @@ public class StatementExecuteMethodsInterceptorTest {
         when(connectionInfo.getDatabasePeer()).thenReturn("localhost:3306");
     }
 
-    @After
-    public void clean() {
-        JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 2048;
-    }
-
     @Test
     public void testExecuteStatement() {
         serviceMethodInterceptor.beforeMethod(objectInstance, method, new Object[]{SQL}, null, null);
@@ -96,7 +91,7 @@ public class StatementExecuteMethodsInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is("kylin/JDBC/CallableStatement/"));
+        assertThat(span.getOperationName(), is("kylin/JDBC/CallableStatement/executeQuery"));
         SpanAssert.assertTag(span, 0, "kylin");
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, SQL);
@@ -113,7 +108,7 @@ public class StatementExecuteMethodsInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is("kylin/JDBC/CallableStatement/"));
+        assertThat(span.getOperationName(), is("kylin/JDBC/CallableStatement/executeQuery"));
         SpanAssert.assertTag(span, 0, "kylin");
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, "Select * f...");
diff --git a/apm-sniffer/apm-sdk-plugin/lettuce-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/lettuce/v5/RedisChannelWriterInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/lettuce-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/lettuce/v5/RedisChannelWriterInterceptorTest.java
index 95d50afec8..74750c51e7 100644
--- a/apm-sniffer/apm-sdk-plugin/lettuce-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/lettuce/v5/RedisChannelWriterInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/lettuce-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/lettuce/v5/RedisChannelWriterInterceptorTest.java
@@ -18,13 +18,14 @@
 
 package org.apache.skywalking.apm.plugin.lettuce.v5;
 
-import io.lettuce.core.codec.ByteArrayCodec;
-import io.lettuce.core.output.CommandOutput;
-import io.lettuce.core.protocol.Command;
-import io.lettuce.core.protocol.CommandArgs;
-import io.lettuce.core.protocol.CommandType;
-import io.lettuce.core.protocol.ProtocolKeyword;
-import io.lettuce.core.protocol.RedisCommand;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
@@ -42,21 +43,17 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-import org.powermock.reflect.Whitebox;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import io.lettuce.core.codec.ByteArrayCodec;
+import io.lettuce.core.output.CommandOutput;
+import io.lettuce.core.protocol.Command;
+import io.lettuce.core.protocol.CommandArgs;
+import io.lettuce.core.protocol.CommandType;
+import io.lettuce.core.protocol.ProtocolKeyword;
+import io.lettuce.core.protocol.RedisCommand;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class RedisChannelWriterInterceptorTest {
 
     public static final String PEER = "192.168.1.12:6379";
@@ -66,6 +63,8 @@ public class RedisChannelWriterInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private MockInstance mockRedisChannelWriterInstance;
@@ -88,14 +87,16 @@ public class RedisChannelWriterInterceptorTest {
         }
     }
 
-    private static class MockRedisCommand<K, V, T> extends Command<K, V, T> implements EnhancedInstance {
+    private static class MockRedisCommand<K, V, T> extends Command<K, V, T>
+        implements EnhancedInstance {
         private Object object;
 
         public MockRedisCommand(ProtocolKeyword type, CommandOutput<K, V, T> output) {
             super(type, output);
         }
 
-        public MockRedisCommand(ProtocolKeyword type, CommandOutput<K, V, T> output, CommandArgs<K, V> args) {
+        public MockRedisCommand(ProtocolKeyword type, CommandOutput<K, V, T> output,
+            CommandArgs<K, V> args) {
             super(type, output, args);
         }
 
@@ -121,9 +122,12 @@ public class RedisChannelWriterInterceptorTest {
 
     @Test
     public void testInterceptor() {
-        CommandArgs<?, ?> args = new CommandArgs<>(new ByteArrayCodec()).addKey("name".getBytes()).addValue("Tom".getBytes());
-        MockRedisCommand<?, ?, ?> redisCommand = new MockRedisCommand<>(CommandType.SET, null, args);
-        interceptor.beforeMethod(mockRedisChannelWriterInstance, null, new Object[]{redisCommand}, null, null);
+        CommandArgs<?, ?> args = new CommandArgs<>(new ByteArrayCodec()).addKey("name".getBytes())
+            .addValue("Tom".getBytes());
+        MockRedisCommand<?, ?, ?> redisCommand =
+            new MockRedisCommand<>(CommandType.SET, null, args);
+        interceptor.beforeMethod(mockRedisChannelWriterInstance, null, new Object[] {redisCommand},
+            null, null);
         interceptor.afterMethod(mockRedisChannelWriterInstance, null, null, null, null);
         redisCommandCompleteMethodInterceptor.afterMethod(redisCommand, null, null, null, null);
 
@@ -144,19 +148,27 @@ public class RedisChannelWriterInterceptorTest {
     @Test
     public void testGetSpanCarrierCommand() throws Exception {
         Command<?, ?, ?> command = new Command<>(CommandType.SET, null, null);
-        RedisCommand<?, ?, ?> redisCommand = Whitebox.invokeMethod(interceptor, "getSpanCarrierCommand", command);
+        Method getSpanCarrierCommandMethod = interceptor.getClass()
+            .getDeclaredMethod("getSpanCarrierCommand", Object.class);
+        getSpanCarrierCommandMethod.setAccessible(true);
+
+        RedisCommand<?, ?, ?> redisCommand =
+            (RedisCommand<?, ?, ?>) getSpanCarrierCommandMethod.invoke(interceptor, command);
         assertEquals(command, redisCommand);
         List<RedisCommand<?, ?, ?>> list = new ArrayList<>();
         for (int i = 0; i < 10; i++) {
             list.add(new Command<>(CommandType.SET, null, null));
         }
         list.add(command);
-        RedisCommand<?, ?, ?> last = Whitebox.invokeMethod(interceptor, "getSpanCarrierCommand", list);
+        RedisCommand<?, ?, ?> last =
+            (RedisCommand<?, ?, ?>) getSpanCarrierCommandMethod.invoke(interceptor, list);
         assertEquals(command, last);
-        RedisCommand<?, ?, ?> nullValue1 = Whitebox.invokeMethod(interceptor, "getSpanCarrierCommand", (Object) null);
+        RedisCommand<?, ?, ?> nullValue1 =
+            (RedisCommand<?, ?, ?>) getSpanCarrierCommandMethod.invoke(interceptor, (Object) null);
         assertNull(nullValue1);
         list.add(null);
-        RedisCommand<?, ?, ?> nullValue2 = Whitebox.invokeMethod(interceptor, "getSpanCarrierCommand", list);
+        RedisCommand<?, ?, ?> nullValue2 =
+            (RedisCommand<?, ?, ?>) getSpanCarrierCommandMethod.invoke(interceptor, list);
         assertNull(nullValue2);
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/light4j-plugins/light4j-plugin/src/test/java/org/apache/skywalking/apm/plugin/light4j/HandleRequestInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/light4j-plugins/light4j-plugin/src/test/java/org/apache/skywalking/apm/plugin/light4j/HandleRequestInterceptorTest.java
index aeb225ed0f..80c6c30080 100644
--- a/apm-sniffer/apm-sdk-plugin/light4j-plugins/light4j-plugin/src/test/java/org/apache/skywalking/apm/plugin/light4j/HandleRequestInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/light4j-plugins/light4j-plugin/src/test/java/org/apache/skywalking/apm/plugin/light4j/HandleRequestInterceptorTest.java
@@ -18,8 +18,8 @@
 
 package org.apache.skywalking.apm.plugin.light4j;
 
-import com.networknt.exception.ExceptionHandler;
-import io.undertow.server.HttpServerExchange;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 import java.lang.reflect.Method;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
@@ -32,14 +32,12 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.networknt.exception.ExceptionHandler;
+import io.undertow.server.HttpServerExchange;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class HandleRequestInterceptorTest {
 
     private HandleRequestInterceptor handleRequestInterceptor;
@@ -49,6 +47,8 @@ public class HandleRequestInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private MethodInterceptResult methodInterceptResult;
diff --git a/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/CreateCallableStatementInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/CreateCallableStatementInterceptorTest.java
index 5979c2cc59..171b335a66 100644
--- a/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/CreateCallableStatementInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/CreateCallableStatementInterceptorTest.java
@@ -18,18 +18,17 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.mariadb.v2;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnitRunner;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CreateCallableStatementInterceptorTest {
@@ -57,12 +56,12 @@ public class CreateCallableStatementInterceptorTest {
     @Test
     public void testResultIsEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, ret);
-        verify(ret).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret).setSkyWalkingDynamicField(any());
     }
 
     @Test
     public void testResultIsNotEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, new Object());
-        verify(ret, times(0)).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/CreatePreparedStatementInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/CreatePreparedStatementInterceptorTest.java
index 4141c0486d..cb224ccb31 100644
--- a/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/CreatePreparedStatementInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/CreatePreparedStatementInterceptorTest.java
@@ -18,18 +18,17 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.mariadb.v2;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnitRunner;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CreatePreparedStatementInterceptorTest {
@@ -57,12 +56,12 @@ public class CreatePreparedStatementInterceptorTest {
     @Test
     public void testResultIsEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, ret);
-        verify(ret).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret).setSkyWalkingDynamicField(any());
     }
 
     @Test
     public void testResultIsNotEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, new Object());
-        verify(ret, times(0)).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/CreateStatementInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/CreateStatementInterceptorTest.java
index 6292a4b9a5..b862163465 100644
--- a/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/CreateStatementInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/CreateStatementInterceptorTest.java
@@ -18,18 +18,17 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.mariadb.v2;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnitRunner;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CreateStatementInterceptorTest {
@@ -57,12 +56,12 @@ public class CreateStatementInterceptorTest {
     @Test
     public void testResultIsEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, ret);
-        verify(ret).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret).setSkyWalkingDynamicField(any());
     }
 
     @Test
     public void testResultIsNotEnhanceInstance() {
         interceptor.afterMethod(objectInstance, null, new Object[]{SQL}, null, new Object());
-        verify(ret, times(0)).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/PreparedStatementExecuteMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/PreparedStatementExecuteMethodsInterceptorTest.java
index a50bab1234..4fcdb28296 100644
--- a/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/PreparedStatementExecuteMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/PreparedStatementExecuteMethodsInterceptorTest.java
@@ -18,6 +18,9 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.mariadb.v2;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.lang.reflect.Method;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
@@ -40,15 +43,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class PreparedStatementExecuteMethodsInterceptorTest {
 
     private static final String SQL = "Select * from test where id = ?";
@@ -58,6 +56,8 @@ public class PreparedStatementExecuteMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private PreparedStatementExecuteMethodsInterceptor serviceMethodInterceptor;
 
@@ -113,7 +113,7 @@ public class PreparedStatementExecuteMethodsInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is("Mariadb/JDBC/PreparedStatement/"));
+        assertThat(span.getOperationName(), is("Mariadb/JDBC/PreparedStatement/executeQuery"));
         SpanAssert.assertTag(span, 0, "Mariadb");
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, SQL);
@@ -143,7 +143,7 @@ public class PreparedStatementExecuteMethodsInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is("Mariadb/JDBC/PreparedStatement/"));
+        assertThat(span.getOperationName(), is("Mariadb/JDBC/PreparedStatement/executeQuery"));
         SpanAssert.assertTag(span, 0, "Mariadb");
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, "Select * f...");
diff --git a/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/StatementExecuteMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/StatementExecuteMethodsInterceptorTest.java
index 593dc65f99..99e993e9ca 100644
--- a/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/StatementExecuteMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mariadb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mariadb/v2/StatementExecuteMethodsInterceptorTest.java
@@ -18,6 +18,10 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.mariadb.v2;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+import java.lang.reflect.Method;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
@@ -26,29 +30,21 @@ import org.apache.skywalking.apm.agent.test.helper.SegmentHelper;
 import org.apache.skywalking.apm.agent.test.tools.AgentServiceRule;
 import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
 import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
-import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.apache.skywalking.apm.agent.test.tools.SpanAssert;
+import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
 import org.apache.skywalking.apm.plugin.jdbc.JDBCPluginConfig;
 import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import java.lang.reflect.Method;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class StatementExecuteMethodsInterceptorTest {
 
     private static final String SQL = "Select * from test";
@@ -58,6 +54,8 @@ public class StatementExecuteMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private StatementExecuteMethodsInterceptor serviceMethodInterceptor;
 
@@ -71,6 +69,8 @@ public class StatementExecuteMethodsInterceptorTest {
 
     @Before
     public void setUp() {
+        JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 2048;
+
         serviceMethodInterceptor = new StatementExecuteMethodsInterceptor();
 
         enhanceRequireCacheObject = new StatementEnhanceInfos(connectionInfo, SQL, "CallableStatement");
@@ -82,11 +82,6 @@ public class StatementExecuteMethodsInterceptorTest {
         when(connectionInfo.getDatabasePeer()).thenReturn("localhost:3306");
     }
 
-    @After
-    public void clean() {
-        JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 2048;
-    }
-
     @Test
     public void testExecuteStatement() {
         serviceMethodInterceptor.beforeMethod(objectInstance, method, new Object[]{SQL}, null, null);
@@ -97,7 +92,7 @@ public class StatementExecuteMethodsInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is("Mariadb/JDBC/CallableStatement/"));
+        assertThat(span.getOperationName(), is("Mariadb/JDBC/CallableStatement/executeQuery"));
         SpanAssert.assertTag(span, 0, "Mariadb");
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, SQL);
@@ -114,7 +109,7 @@ public class StatementExecuteMethodsInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is("Mariadb/JDBC/CallableStatement/"));
+        assertThat(span.getOperationName(), is("Mariadb/JDBC/CallableStatement/executeQuery"));
         SpanAssert.assertTag(span, 0, "Mariadb");
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, "Select * f...");
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v2/MongoDBCollectionMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v2/MongoDBCollectionMethodInterceptorTest.java
index 8fb7267b4d..e6d93f6017 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v2/MongoDBCollectionMethodInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v2/MongoDBCollectionMethodInterceptorTest.java
@@ -18,8 +18,9 @@
 
 package org.apache.skywalking.apm.plugin.mongodb.v2;
 
-import com.mongodb.DBCollection;
-import com.mongodb.DBObject;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.lang.reflect.Method;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
@@ -42,15 +43,12 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.mongodb.DBCollection;
+import com.mongodb.DBObject;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class MongoDBCollectionMethodInterceptorTest {
 
     @SegmentStoragePoint
@@ -58,6 +56,8 @@ public class MongoDBCollectionMethodInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private MongoDBCollectionMethodInterceptor interceptor;
 
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v3/interceptor/v30/MongoDBInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v3/interceptor/v30/MongoDBInterceptorTest.java
index f556ed2449..62d28a6c14 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v3/interceptor/v30/MongoDBInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v3/interceptor/v30/MongoDBInterceptorTest.java
@@ -18,9 +18,10 @@
 
 package org.apache.skywalking.apm.plugin.mongodb.v3.interceptor.v30;
 
-import com.mongodb.Mongo;
-import com.mongodb.MongoNamespace;
-import com.mongodb.operation.FindOperation;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 import java.lang.reflect.Method;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
@@ -47,16 +48,13 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.mongodb.Mongo;
+import com.mongodb.MongoNamespace;
+import com.mongodb.operation.FindOperation;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class MongoDBInterceptorTest {
 
     @SegmentStoragePoint
@@ -64,6 +62,8 @@ public class MongoDBInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private MongoDBInterceptor interceptor;
 
@@ -89,7 +89,7 @@ public class MongoDBInterceptorTest {
         BsonDocument document = new BsonDocument();
         document.append("name", new BsonString("by"));
         MongoNamespace mongoNamespace = new MongoNamespace("test.user");
-        Decoder decoder = PowerMockito.mock(Decoder.class);
+        Decoder decoder = mock(Decoder.class);
         FindOperation findOperation = new FindOperation(mongoNamespace, decoder);
         findOperation.filter(document);
 
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v3/interceptor/v37/MongoDBClientDelegateInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v3/interceptor/v37/MongoDBClientDelegateInterceptorTest.java
index ad60120077..5121ef3bca 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v3/interceptor/v37/MongoDBClientDelegateInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v3/interceptor/v37/MongoDBClientDelegateInterceptorTest.java
@@ -18,17 +18,16 @@
 
 package org.apache.skywalking.apm.plugin.mongodb.v3.interceptor.v37;
 
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnitRunner;
 
-@RunWith(PowerMockRunner.class)
+@RunWith(MockitoJUnitRunner.class)
 public class MongoDBClientDelegateInterceptorTest {
 
     private MongoDBClientDelegateInterceptor interceptor;
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v3/interceptor/v37/MongoDBOperationExecutorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v3/interceptor/v37/MongoDBOperationExecutorInterceptorTest.java
index a0779ee915..60de9f5c21 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v3/interceptor/v37/MongoDBOperationExecutorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v3/interceptor/v37/MongoDBOperationExecutorInterceptorTest.java
@@ -18,11 +18,10 @@
 
 package org.apache.skywalking.apm.plugin.mongodb.v3.interceptor.v37;
 
-import com.mongodb.MongoNamespace;
-import com.mongodb.ReadConcern;
-import com.mongodb.client.internal.OperationExecutor;
-import com.mongodb.operation.FindOperation;
-import com.mongodb.operation.WriteOperation;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 import java.lang.reflect.Method;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
@@ -49,16 +48,15 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.mongodb.MongoNamespace;
+import com.mongodb.ReadConcern;
+import com.mongodb.client.internal.OperationExecutor;
+import com.mongodb.operation.FindOperation;
+import com.mongodb.operation.WriteOperation;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class MongoDBOperationExecutorInterceptorTest {
 
     @SegmentStoragePoint
@@ -66,6 +64,8 @@ public class MongoDBOperationExecutorInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
@@ -88,7 +88,7 @@ public class MongoDBOperationExecutorInterceptorTest {
         BsonDocument document = new BsonDocument();
         document.append("name", new BsonString("by"));
         MongoNamespace mongoNamespace = new MongoNamespace("test.user");
-        Decoder decoder = PowerMockito.mock(Decoder.class);
+        Decoder decoder = mock(Decoder.class);
         FindOperation findOperation = new FindOperation(mongoNamespace, decoder);
         findOperation.filter(document);
 
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v4/MongoDBClientDelegateInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v4/MongoDBClientDelegateInterceptorTest.java
index 16c2e31ed5..c92d6a653c 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v4/MongoDBClientDelegateInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v4/MongoDBClientDelegateInterceptorTest.java
@@ -18,6 +18,7 @@
 
 package org.apache.skywalking.apm.plugin.mongodb.v4;
 
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.mongodb.v4.interceptor.MongoDBClientDelegateInterceptor;
 import org.junit.Assert;
@@ -25,11 +26,9 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnitRunner;
 
-@RunWith(PowerMockRunner.class)
+@RunWith(MockitoJUnitRunner.class)
 public class MongoDBClientDelegateInterceptorTest {
 
     private MongoDBClientDelegateInterceptor interceptor;
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v4/MongoDBOperationExecutorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v4/MongoDBOperationExecutorInterceptorTest.java
index d5dc3e57f5..ed2154056e 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v4/MongoDBOperationExecutorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/mongodb/v4/MongoDBOperationExecutorInterceptorTest.java
@@ -18,11 +18,12 @@
 
 package org.apache.skywalking.apm.plugin.mongodb.v4;
 
-import com.mongodb.MongoNamespace;
-import com.mongodb.ReadConcern;
-import com.mongodb.client.internal.OperationExecutor;
-import com.mongodb.internal.operation.FindOperation;
-import com.mongodb.internal.operation.WriteOperation;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import java.lang.reflect.Method;
+import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.LogDataEntity;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
@@ -48,19 +49,15 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import java.lang.reflect.Method;
-import java.util.List;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.mongodb.MongoNamespace;
+import com.mongodb.ReadConcern;
+import com.mongodb.client.internal.OperationExecutor;
+import com.mongodb.internal.operation.FindOperation;
+import com.mongodb.internal.operation.WriteOperation;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class MongoDBOperationExecutorInterceptorTest {
 
     @SegmentStoragePoint
@@ -68,6 +65,8 @@ public class MongoDBOperationExecutorInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
@@ -90,7 +89,7 @@ public class MongoDBOperationExecutorInterceptorTest {
         BsonDocument document = new BsonDocument();
         document.append("name", new BsonString("by"));
         MongoNamespace mongoNamespace = new MongoNamespace("test.user");
-        Decoder decoder = PowerMockito.mock(Decoder.class);
+        Decoder decoder = mock(Decoder.class);
         FindOperation findOperation = new FindOperation(mongoNamespace, decoder);
         findOperation.filter(document);
 
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-4.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/apache/skywalking/apm/plugin/motan/MotanConsumerInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/apache/skywalking/apm/plugin/motan/MotanConsumerInterceptorTest.java
index 8b5a7f630d..4ece3fd7d7 100644
--- a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/apache/skywalking/apm/plugin/motan/MotanConsumerInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/apache/skywalking/apm/plugin/motan/MotanConsumerInterceptorTest.java
@@ -18,9 +18,13 @@
 
 package org.apache.skywalking.apm.plugin.motan;
 
-import com.weibo.api.motan.rpc.Request;
-import com.weibo.api.motan.rpc.Response;
-import com.weibo.api.motan.rpc.URL;
+import static org.apache.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.LogDataEntity;
@@ -41,19 +45,13 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-import static org.apache.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.weibo.api.motan.rpc.Request;
+import com.weibo.api.motan.rpc.Response;
+import com.weibo.api.motan.rpc.URL;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class MotanConsumerInterceptorTest {
 
     @SegmentStoragePoint
@@ -61,6 +59,8 @@ public class MotanConsumerInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private MotanConsumerInterceptor invokeInterceptor;
     @Mock
diff --git a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/apache/skywalking/apm/plugin/motan/MotanProviderInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/apache/skywalking/apm/plugin/motan/MotanProviderInterceptorTest.java
index dfcd746472..e0678b926c 100644
--- a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/apache/skywalking/apm/plugin/motan/MotanProviderInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/apache/skywalking/apm/plugin/motan/MotanProviderInterceptorTest.java
@@ -18,9 +18,11 @@
 
 package org.apache.skywalking.apm.plugin.motan;
 
-import com.weibo.api.motan.rpc.Request;
-import com.weibo.api.motan.rpc.Response;
-import com.weibo.api.motan.rpc.URL;
+import static org.apache.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.util.HashMap;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.SW8CarrierItem;
@@ -45,17 +47,13 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.apache.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.weibo.api.motan.rpc.Request;
+import com.weibo.api.motan.rpc.Response;
+import com.weibo.api.motan.rpc.URL;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class MotanProviderInterceptorTest {
 
     @SegmentStoragePoint
@@ -63,6 +61,8 @@ public class MotanProviderInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private MotanProviderInterceptor invokeInterceptor;
     @Mock
diff --git a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/v5/ConnectionImplCreateInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/v5/ConnectionImplCreateInterceptorTest.java
index f752dabd9d..ac53adabe6 100644
--- a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/v5/ConnectionImplCreateInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/v5/ConnectionImplCreateInterceptorTest.java
@@ -18,15 +18,14 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.mysql.v5;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.verify;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.mockito.Mockito.verify;
+import org.mockito.junit.MockitoJUnitRunner;
 
 @RunWith(MockitoJUnitRunner.class)
 public class ConnectionImplCreateInterceptorTest {
@@ -49,7 +48,7 @@ public class ConnectionImplCreateInterceptorTest {
             "test",
             "jdbc:mysql:replication://localhost:3360,localhost:3360,localhost:3360/test?useUnicode=true&characterEncoding=utf8&useSSL=false&roundRobinLoadBalance=true"
         }, null, objectInstance);
-        verify(objectInstance).setSkyWalkingDynamicField(Matchers.any());
+        verify(objectInstance).setSkyWalkingDynamicField(any());
     }
 
     @Test
@@ -61,6 +60,6 @@ public class ConnectionImplCreateInterceptorTest {
                 null,
                 "jdbc:mysql:replication://localhost:3360,localhost:3360,localhost:3360/test?useUnicode=true&characterEncoding=utf8&useSSL=false&roundRobinLoadBalance=true"
         }, null, objectInstance);
-        verify(objectInstance).setSkyWalkingDynamicField(Matchers.any());
+        verify(objectInstance).setSkyWalkingDynamicField(any());
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-8.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/v8/ConnectionImplCreateInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mysql-8.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/v8/ConnectionImplCreateInterceptorTest.java
index b959453af8..36134c5d95 100644
--- a/apm-sniffer/apm-sdk-plugin/mysql-8.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/v8/ConnectionImplCreateInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mysql-8.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/v8/ConnectionImplCreateInterceptorTest.java
@@ -18,16 +18,15 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.mysql.v8;
 
-import com.mysql.cj.conf.ConnectionUrlParser;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.verify;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.mockito.Mockito.verify;
+import org.mockito.junit.MockitoJUnitRunner;
+import com.mysql.cj.conf.ConnectionUrlParser;
 
 @RunWith(MockitoJUnitRunner.class)
 public class ConnectionImplCreateInterceptorTest {
@@ -46,6 +45,6 @@ public class ConnectionImplCreateInterceptorTest {
         final ConnectionUrlParser connectionUrlParser = ConnectionUrlParser.parseConnectionString("jdbc:mysql:replication://localhost:3360,localhost:3360,localhost:3360/test?useUnicode=true&characterEncoding=utf8&useSSL=false&roundRobinLoadBalance=true");
 
         interceptor.afterMethod(null, null, connectionUrlParser.getHosts().toArray(), null, objectInstance);
-        verify(objectInstance).setSkyWalkingDynamicField(Matchers.any());
+        verify(objectInstance).setSkyWalkingDynamicField(any());
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-common/pom.xml b/apm-sniffer/apm-sdk-plugin/mysql-common/pom.xml
index 2570a92cac..ef51417369 100755
--- a/apm-sniffer/apm-sdk-plugin/mysql-common/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/mysql-common/pom.xml
@@ -1,22 +1,32 @@
 <!--
   ~ 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.
+  ~ 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
+  ~
+(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.
+  ~
+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.
+  ~
+limitations under the License.
   ~
   -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <artifactId>apm-sdk-plugin</artifactId>
         <groupId>org.apache.skywalking</groupId>
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/CreateCallableStatementInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/CreateCallableStatementInterceptorTest.java
index 2b65ce8b5e..f37aa7e7f2 100644
--- a/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/CreateCallableStatementInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/CreateCallableStatementInterceptorTest.java
@@ -18,18 +18,17 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.mysql;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnitRunner;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CreateCallableStatementInterceptorTest {
@@ -55,12 +54,12 @@ public class CreateCallableStatementInterceptorTest {
     @Test
     public void testResultIsEnhanceInstance() throws Throwable {
         interceptor.afterMethod(objectInstance, null, new Object[] {"SELECT * FROM test"}, null, ret);
-        verify(ret).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret).setSkyWalkingDynamicField(any());
     }
 
     @Test
     public void testResultIsNotEnhanceInstance() throws Throwable {
         interceptor.afterMethod(objectInstance, null, new Object[] {"SELECT * FROM test"}, null, new Object());
-        verify(ret, times(0)).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/CreatePreparedStatementInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/CreatePreparedStatementInterceptorTest.java
index 8278c93fa3..b9850f2c51 100644
--- a/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/CreatePreparedStatementInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/CreatePreparedStatementInterceptorTest.java
@@ -18,18 +18,17 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.mysql;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnitRunner;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CreatePreparedStatementInterceptorTest {
@@ -54,12 +53,12 @@ public class CreatePreparedStatementInterceptorTest {
     @Test
     public void testResultIsEnhanceInstance() throws Throwable {
         interceptor.afterMethod(objectInstance, null, new Object[] {"SELECT * FROM test"}, null, ret);
-        verify(ret).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret).setSkyWalkingDynamicField(any());
     }
 
     @Test
     public void testResultIsNotEnhanceInstance() throws Throwable {
         interceptor.afterMethod(objectInstance, null, new Object[] {"SELECT * FROM test"}, null, new Object());
-        verify(ret, times(0)).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/CreateStatementInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/CreateStatementInterceptorTest.java
index 9c664c87b2..bcad340bbe 100644
--- a/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/CreateStatementInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/CreateStatementInterceptorTest.java
@@ -18,18 +18,17 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.mysql;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.Matchers;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnitRunner;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CreateStatementInterceptorTest {
@@ -55,12 +54,12 @@ public class CreateStatementInterceptorTest {
     @Test
     public void testResultIsEnhanceInstance() throws Throwable {
         interceptor.afterMethod(objectInstance, null, new Object[] {"SELECT * FROM test"}, null, ret);
-        verify(ret).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret).setSkyWalkingDynamicField(any());
     }
 
     @Test
     public void testResultIsNotEnhanceInstance() throws Throwable {
         interceptor.afterMethod(objectInstance, null, new Object[] {"SELECT * FROM test"}, null, new Object());
-        verify(ret, times(0)).setSkyWalkingDynamicField(Matchers.any());
+        verify(ret, times(0)).setSkyWalkingDynamicField(any());
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/StatementExecuteMethodsInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/StatementExecuteMethodsInterceptorTest.java
index bad4c65870..e3ceaa6228 100644
--- a/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/StatementExecuteMethodsInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/StatementExecuteMethodsInterceptorTest.java
@@ -18,6 +18,9 @@
 
 package org.apache.skywalking.apm.plugin.jdbc.mysql;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.lang.reflect.Method;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
@@ -33,21 +36,15 @@ import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
 import org.apache.skywalking.apm.plugin.jdbc.JDBCPluginConfig;
 import org.apache.skywalking.apm.plugin.jdbc.define.StatementEnhanceInfos;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class StatementExecuteMethodsInterceptorTest {
 
     private static final String SQL = "SELECT * FROM test";
@@ -57,6 +54,8 @@ public class StatementExecuteMethodsInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private StatementExecuteMethodsInterceptor serviceMethodInterceptor;
 
@@ -70,6 +69,7 @@ public class StatementExecuteMethodsInterceptorTest {
 
     @Before
     public void setUp() {
+        JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 2048;
         serviceMethodInterceptor = new StatementExecuteMethodsInterceptor();
 
         enhanceRequireCacheObject = new StatementEnhanceInfos(connectionInfo, "SELECT * FROM test", "CallableStatement");
@@ -81,11 +81,6 @@ public class StatementExecuteMethodsInterceptorTest {
         when(connectionInfo.getDatabasePeer()).thenReturn("localhost:3307");
     }
 
-    @After
-    public void clean() {
-        JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 2048;
-    }
-
     @Test
     public void testCreateDatabaseSpan() throws Throwable {
         JDBCPluginConfig.Plugin.JDBC.SQL_BODY_MAX_LENGTH = 2048;
@@ -97,7 +92,7 @@ public class StatementExecuteMethodsInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is("H2/JDBC/CallableStatement/"));
+        assertThat(span.getOperationName(), is("H2/JDBC/CallableStatement/executeQuery"));
         SpanAssert.assertTag(span, 0, "H2");
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, SQL);
@@ -115,7 +110,7 @@ public class StatementExecuteMethodsInterceptorTest {
         assertThat(SegmentHelper.getSpans(segment).size(), is(1));
         AbstractTracingSpan span = SegmentHelper.getSpans(segment).get(0);
         SpanAssert.assertLayer(span, SpanLayer.DB);
-        assertThat(span.getOperationName(), is("H2/JDBC/CallableStatement/"));
+        assertThat(span.getOperationName(), is("H2/JDBC/CallableStatement/executeQuery"));
         SpanAssert.assertTag(span, 0, "H2");
         SpanAssert.assertTag(span, 1, "test");
         SpanAssert.assertTag(span, 2, "SELECT * F...");
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/mysql-common/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionAcquireConnectionInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionAcquireConnectionInterceptorTest.java
index 3a04f87213..647b57873c 100644
--- a/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionAcquireConnectionInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionAcquireConnectionInterceptorTest.java
@@ -21,8 +21,7 @@ package org.apache.skywalking.apm.plugin.neo4j.v4x;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
-
+import static org.mockito.Mockito.when;
 import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
@@ -39,14 +38,13 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.neo4j.driver.internal.BoltServerAddress;
 import org.neo4j.driver.internal.DatabaseName;
 import org.neo4j.driver.internal.spi.Connection;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class SessionAcquireConnectionInterceptorTest {
 
     private final EnhancedInstance enhancedInstance = new EnhancedInstance() {
@@ -64,6 +62,9 @@ public class SessionAcquireConnectionInterceptorTest {
     };
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
     private SessionAcquireConnectionInterceptor interceptor;
@@ -103,4 +104,4 @@ public class SessionAcquireConnectionInterceptorTest {
             assertThat(traceSegments.size(), is(0));
         });
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionBeginTransactionInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionBeginTransactionInterceptorTest.java
index f11febde02..2d532bacaf 100644
--- a/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionBeginTransactionInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionBeginTransactionInterceptorTest.java
@@ -19,7 +19,6 @@
 package org.apache.skywalking.apm.plugin.neo4j.v4x;
 
 import static org.junit.Assert.assertNull;
-
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CompletionStage;
 import org.apache.skywalking.apm.agent.core.context.MockContextSnapshot;
@@ -28,9 +27,9 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 
-@RunWith(PowerMockRunner.class)
+@RunWith(MockitoJUnitRunner.class)
 @SuppressWarnings("unchecked")
 public class SessionBeginTransactionInterceptorTest {
 
@@ -100,4 +99,4 @@ public class SessionBeginTransactionInterceptorTest {
         Assert.assertEquals(((SessionRequiredInfo) ret.getSkyWalkingDynamicField()).getContextSnapshot(),
                 sessionRequiredInfo.getContextSnapshot());
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionConstructorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionConstructorInterceptorTest.java
index b617dc9c74..6fa4ee88e9 100644
--- a/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionConstructorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionConstructorInterceptorTest.java
@@ -21,30 +21,36 @@ package org.apache.skywalking.apm.plugin.neo4j.v4x;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.mockStatic;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-import java.util.Optional;
 import org.apache.skywalking.apm.agent.core.context.ContextManager;
 import org.apache.skywalking.apm.agent.core.context.MockContextSnapshot;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.MockitoRule;
 import org.neo4j.driver.internal.DatabaseName;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({ContextManager.class})
+@RunWith(MockitoJUnitRunner.class)
 public class SessionConstructorInterceptorTest {
 
     private SessionConstructorInterceptor interceptor;
     private EnhancedInstance enhancedInstance;
+
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
     @Mock
     private DatabaseName databaseName;
 
+    private MockedStatic<ContextManager> mockedContextManager;
+
     @Before
     public void setUp() throws Exception {
         interceptor = new SessionConstructorInterceptor();
@@ -61,9 +67,13 @@ public class SessionConstructorInterceptorTest {
                 this.value = value;
             }
         };
-        when(databaseName.databaseName()).thenReturn(Optional.of("neo4j"));
-        mockStatic(ContextManager.class);
-        when(ContextManager.capture()).thenReturn(MockContextSnapshot.INSTANCE.mockContextSnapshot());
+        mockedContextManager = Mockito.mockStatic(ContextManager.class);
+        mockedContextManager.when(ContextManager::capture).thenReturn(MockContextSnapshot.INSTANCE.mockContextSnapshot());
+    }
+
+    @After
+    public void tearDown() {
+        mockedContextManager.close();
     }
 
     @Test
@@ -73,4 +83,4 @@ public class SessionConstructorInterceptorTest {
         SessionRequiredInfo requiredInfo = (SessionRequiredInfo) enhancedInstance.getSkyWalkingDynamicField();
         assertThat(requiredInfo.getContextSnapshot(), is(ContextManager.capture()));
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionRunInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionRunInterceptorTest.java
index e4866e7b95..6f3b0295ed 100644
--- a/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionRunInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/SessionRunInterceptorTest.java
@@ -24,8 +24,7 @@ import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
-import static org.powermock.api.mockito.PowerMockito.when;
-
+import static org.mockito.Mockito.when;
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.List;
@@ -54,6 +53,8 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.neo4j.driver.Query;
 import org.neo4j.driver.Value;
 import org.neo4j.driver.internal.BoltServerAddress;
@@ -61,11 +62,8 @@ import org.neo4j.driver.internal.DatabaseName;
 import org.neo4j.driver.internal.spi.Connection;
 import org.neo4j.driver.internal.value.MapValue;
 import org.neo4j.driver.internal.value.StringValue;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 @SuppressWarnings("unchecked")
 public class SessionRunInterceptorTest {
 
@@ -77,6 +75,9 @@ public class SessionRunInterceptorTest {
     private final Method method = MockMethod.class.getMethod("runAsync");
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
     private SessionRunInterceptor sessionRunInterceptor;
@@ -201,4 +202,4 @@ public class SessionRunInterceptorTest {
         assertTrue(span.isExit());
         assertThat(span.getOperationName(), is("Neo4j/Session/runAsync"));
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/TransactionRunInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/TransactionRunInterceptorTest.java
index 7af564f112..12b694accd 100644
--- a/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/TransactionRunInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/neo4j-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/neo4j/v4x/TransactionRunInterceptorTest.java
@@ -24,8 +24,7 @@ import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
-import static org.powermock.api.mockito.PowerMockito.when;
-
+import static org.mockito.Mockito.when;
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.List;
@@ -53,6 +52,8 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.neo4j.driver.Query;
 import org.neo4j.driver.Value;
 import org.neo4j.driver.internal.BoltServerAddress;
@@ -60,17 +61,17 @@ import org.neo4j.driver.internal.DatabaseName;
 import org.neo4j.driver.internal.spi.Connection;
 import org.neo4j.driver.internal.value.MapValue;
 import org.neo4j.driver.internal.value.StringValue;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 @SuppressWarnings("unchecked")
 public class TransactionRunInterceptorTest {
 
     private final Method method = MockMethod.class.getMethod("runAsync");
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
     private TransactionRunInterceptor transactionRunInterceptor;
@@ -169,4 +170,4 @@ public class TransactionRunInterceptorTest {
         assertTrue(span.isExit());
         assertThat(span.getOperationName(), is("Neo4j/Transaction/runAsync"));
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/netty-socketio-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/netty-socketio-plugin/pom.xml
index ad72866624..1f1ee29bd8 100644
--- a/apm-sniffer/apm-sdk-plugin/netty-socketio-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/netty-socketio-plugin/pom.xml
@@ -43,4 +43,4 @@
     </dependencies>
 
 
-</project>
\ No newline at end of file
+</project>
diff --git a/apm-sniffer/apm-sdk-plugin/netty-socketio-plugin/src/test/java/org/apache/skywalking/apm/plugin/netty/socketio/NettySocketIOTest.java b/apm-sniffer/apm-sdk-plugin/netty-socketio-plugin/src/test/java/org/apache/skywalking/apm/plugin/netty/socketio/NettySocketIOTest.java
index 751522324b..e7076a5884 100644
--- a/apm-sniffer/apm-sdk-plugin/netty-socketio-plugin/src/test/java/org/apache/skywalking/apm/plugin/netty/socketio/NettySocketIOTest.java
+++ b/apm-sniffer/apm-sdk-plugin/netty-socketio-plugin/src/test/java/org/apache/skywalking/apm/plugin/netty/socketio/NettySocketIOTest.java
@@ -18,11 +18,11 @@
 
 package org.apache.skywalking.apm.plugin.netty.socketio;
 
-import com.corundumstudio.socketio.SocketIOClient;
-import com.corundumstudio.socketio.handler.ClientHead;
-import com.corundumstudio.socketio.namespace.Namespace;
-import com.corundumstudio.socketio.protocol.Packet;
-import com.corundumstudio.socketio.transport.NamespaceClient;
+import static org.hamcrest.CoreMatchers.is;
+import static org.mockito.Mockito.when;
+import java.lang.reflect.Method;
+import java.net.InetSocketAddress;
+import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.agent.test.tools.AgentServiceRule;
@@ -31,23 +31,21 @@ import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.junit.Assert;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-import org.powermock.reflect.Whitebox;
-
-import java.lang.reflect.Method;
-import java.net.InetSocketAddress;
-import java.util.List;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.corundumstudio.socketio.SocketIOClient;
+import com.corundumstudio.socketio.handler.ClientHead;
+import com.corundumstudio.socketio.namespace.Namespace;
+import com.corundumstudio.socketio.protocol.Packet;
+import com.corundumstudio.socketio.transport.NamespaceClient;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@Ignore("Not sure why it reports ClassNotDef exception")
+@RunWith(TracingSegmentRunner.class)
 public class NettySocketIOTest {
 
     @SegmentStoragePoint
@@ -55,6 +53,8 @@ public class NettySocketIOTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private NettySocketIOConnectionInterceptor connectionInterceptor;
     private NettySocketIOOnEventInterceptor onEventInterceptor;
@@ -90,7 +90,7 @@ public class NettySocketIOTest {
     };
 
     @Before
-    public void setUp() {
+    public void setUp() throws NoSuchMethodException, SecurityException {
         InetSocketAddress addr = new InetSocketAddress("127.0.0.1", 0);
         when(socketIOClient.getRemoteAddress()).thenReturn(addr);
         when(sendPacket.getName()).thenReturn("test");
@@ -102,12 +102,12 @@ public class NettySocketIOTest {
         constructorInterceptor = new NettySocketIOConstructorInterceptor();
 
         // work for connection
-        connectOnConnectMethod = Whitebox.getMethods(Namespace.class, "onConnect")[0];
-        connectOnDisConnectMethod = Whitebox.getMethods(Namespace.class, "onDisconnect")[0];
+        connectOnConnectMethod = Namespace.class.getDeclaredMethod("onConnect");
+        connectOnDisConnectMethod = Namespace.class.getDeclaredMethod("onDisconnect");
 
         // work for room
-        roomJoinMethod = Whitebox.getMethods(NamespaceClient.class, "joinRoom")[0];
-        roomLeaveMethod = Whitebox.getMethods(NamespaceClient.class, "leaveRoom")[0];
+        roomJoinMethod = NamespaceClient.class.getDeclaredMethod("joinRoom");
+        roomLeaveMethod = NamespaceClient.class.getDeclaredMethod("leaveRoom");
     }
 
     @Test
diff --git a/apm-sniffer/apm-sdk-plugin/netty-socketio-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-sdk-plugin/netty-socketio-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/netty-socketio-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/nutz/http/sync/SenderInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/nutz/http/sync/SenderInterceptorTest.java
index f9f982db9c..8be7484fb6 100644
--- a/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/nutz/http/sync/SenderInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/nutz/http/sync/SenderInterceptorTest.java
@@ -33,6 +33,8 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.nutz.http.Request;
 import org.nutz.http.Request.METHOD;
 import org.nutz.http.Response;
@@ -40,7 +42,6 @@ import org.nutz.http.Sender;
 import org.nutz.http.sender.FilePostSender;
 import org.nutz.http.sender.GetSender;
 import org.nutz.http.sender.PostSender;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -48,8 +49,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-@RunWith(org.powermock.modules.junit4.PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class SenderInterceptorTest {
 
     @SegmentStoragePoint
@@ -57,6 +57,8 @@ public class SenderInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule mockitoRule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
diff --git a/apm-sniffer/apm-sdk-plugin/okhttp-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/okhttp/v2/define/AsyncCallInstrumentation.java b/apm-sniffer/apm-sdk-plugin/okhttp-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/okhttp/v2/define/AsyncCallInstrumentation.java
index 3daa03d3d3..941f430319 100644
--- a/apm-sniffer/apm-sdk-plugin/okhttp-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/okhttp/v2/define/AsyncCallInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/okhttp-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/okhttp/v2/define/AsyncCallInstrumentation.java
@@ -31,7 +31,6 @@ import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
 
 public class AsyncCallInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
-
     /**
      * Intercept class.
      */
diff --git a/apm-sniffer/apm-sdk-plugin/okhttp-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/okhttp/v2/RealCallInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/okhttp-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/okhttp/v2/RealCallInterceptorTest.java
index 692753f547..fc45c4715f 100644
--- a/apm-sniffer/apm-sdk-plugin/okhttp-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/okhttp/v2/RealCallInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/okhttp-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/okhttp/v2/RealCallInterceptorTest.java
@@ -23,10 +23,6 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
-
-import com.squareup.okhttp.OkHttpClient;
-import com.squareup.okhttp.Request;
-import com.squareup.okhttp.Response;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
@@ -45,13 +41,13 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.squareup.okhttp.OkHttpClient;
+import com.squareup.okhttp.Request;
+import com.squareup.okhttp.Response;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest({Response.class})
+@RunWith(TracingSegmentRunner.class)
 public class RealCallInterceptorTest {
 
     @SegmentStoragePoint
@@ -59,6 +55,8 @@ public class RealCallInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private RealCallInterceptor realCallInterceptor;
 
diff --git a/apm-sniffer/apm-sdk-plugin/okhttp-2.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-sdk-plugin/okhttp-2.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/okhttp-2.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/okhttp/v3/RealCallInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/okhttp/v3/RealCallInterceptorTest.java
index c7b4dc3c98..1fb6ee7452 100644
--- a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/okhttp/v3/RealCallInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/okhttp/v3/RealCallInterceptorTest.java
@@ -18,22 +18,12 @@
 
 package org.apache.skywalking.apm.plugin.okhttp.v3;
 
+import static org.apache.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 import java.util.List;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.Response;
-import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
-import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
-import org.apache.skywalking.apm.agent.test.tools.SpanAssert;
-import org.apache.skywalking.apm.plugin.okhttp.common.RealCallInterceptor;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
@@ -41,18 +31,24 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedI
 import org.apache.skywalking.apm.agent.test.helper.SegmentHelper;
 import org.apache.skywalking.apm.agent.test.helper.SpanHelper;
 import org.apache.skywalking.apm.agent.test.tools.AgentServiceRule;
+import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
+import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
+import org.apache.skywalking.apm.agent.test.tools.SpanAssert;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.apache.skywalking.apm.plugin.okhttp.common.RealCallInterceptor;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import static org.apache.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest({Response.class})
+@RunWith(TracingSegmentRunner.class)
 public class RealCallInterceptorTest {
 
     @SegmentStoragePoint
@@ -60,6 +56,8 @@ public class RealCallInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private RealCallInterceptor realCallInterceptor;
 
diff --git a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/play-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/play/v2x/TracingFilterTest.java b/apm-sniffer/apm-sdk-plugin/play-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/play/v2x/TracingFilterTest.java
index 26315e9341..1abd37d25c 100644
--- a/apm-sniffer/apm-sdk-plugin/play-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/play/v2x/TracingFilterTest.java
+++ b/apm-sniffer/apm-sdk-plugin/play-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/play/v2x/TracingFilterTest.java
@@ -18,7 +18,19 @@
 
 package org.apache.skywalking.apm.plugin.play.v2x;
 
-import akka.stream.Materializer;
+import static org.apache.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static play.mvc.Results.badRequest;
+import static play.mvc.Results.ok;
+import java.security.cert.X509Certificate;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionStage;
+import java.util.function.Function;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
@@ -34,8 +46,9 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import akka.stream.Materializer;
 import play.api.http.MediaRange;
 import play.api.mvc.RequestHeader;
 import play.api.routing.HandlerDef;
@@ -46,29 +59,15 @@ import play.mvc.Http;
 import play.mvc.Result;
 import play.routing.Router;
 
-import java.security.cert.X509Certificate;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.CompletionStage;
-import java.util.function.Function;
-
-import static org.apache.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static play.mvc.Results.badRequest;
-import static play.mvc.Results.ok;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class TracingFilterTest {
 
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private Materializer materializer;
diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml
index 9105865094..fb23cc0a6a 100644
--- a/apm-sniffer/apm-sdk-plugin/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/pom.xml
@@ -1,23 +1,33 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ 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.
+  ~ 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
+  ~
+(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.
+  ~
+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.
+  ~
+limitations under the License.
   ~
   -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
@@ -138,7 +148,8 @@
         <shade.net.bytebuddy.source>net.bytebuddy</shade.net.bytebuddy.source>
         <shade.net.bytebuddy.target>${shade.package}.${shade.net.bytebuddy.source}</shade.net.bytebuddy.target>
 
-        <agent.package.dest.dir>${project.build.directory}${sdk.plugin.related.dir}/../../../../skywalking-agent
+        <agent.package.dest.dir>
+            ${project.build.directory}${sdk.plugin.related.dir}/../../../../skywalking-agent
         </agent.package.dest.dir>
         <plugin.dest.dir>${agent.package.dest.dir}/plugins</plugin.dest.dir>
 
@@ -171,6 +182,15 @@
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
+
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-inline</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
@@ -208,12 +228,17 @@
                         </goals>
                         <configuration>
                             <target>
-                                <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="maven.runtime.classpath" />
+                                <taskdef
+                                    resource="net/sf/antcontrib/antcontrib.properties"
+                                    classpathref="maven.runtime.classpath" />
                                 <if>
                                     <equals arg1="${project.packaging}" arg2="jar" />
                                     <then>
                                         <mkdir dir="${plugin.dest.dir}" />
-                                        <copy file="${project.build.directory}/${project.artifactId}-${project.version}.jar" tofile="${plugin.dest.dir}/${project.artifactId}-${project.version}.jar" overwrite="true" />
+                                        <copy
+                                            file="${project.build.directory}/${project.artifactId}-${project.version}.jar"
+                                            tofile="${plugin.dest.dir}/${project.artifactId}-${project.version}.jar"
+                                            overwrite="true" />
                                     </then>
                                 </if>
 
diff --git a/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/PulsarConsumerInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/PulsarConsumerInterceptorTest.java
index 0013d1537c..5e8c206b2d 100644
--- a/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/PulsarConsumerInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/PulsarConsumerInterceptorTest.java
@@ -18,6 +18,12 @@
 
 package org.apache.skywalking.apm.plugin.pulsar.common;
 
+import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.PULSAR_CONSUMER;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.pulsar.client.impl.LookupService;
 import org.apache.pulsar.client.impl.PulsarClientImpl;
@@ -40,17 +46,10 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.PULSAR_CONSUMER;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class PulsarConsumerInterceptorTest {
 
     @SegmentStoragePoint
@@ -58,6 +57,8 @@ public class PulsarConsumerInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private MockMessage msg;
 
@@ -148,14 +149,14 @@ public class PulsarConsumerInterceptorTest {
     }
 
     private EnhancedInstance mockConsumer() throws Throwable {
-        EnhancedInstance pulsarProducerInstance = PowerMockito.mock(MockConsumerImpl.class);
-        final LookupService lookup = PowerMockito.mock(LookupService.class);
-        final PulsarClientImpl client = PowerMockito.mock(PulsarClientImpl.class);
-        PowerMockito.when(lookup, "getServiceUrl").thenReturn("pulsar://localhost:6650");
-        PowerMockito.when(client, "getLookup").thenReturn(lookup);
-        PowerMockito.when(pulsarProducerInstance, "getClient").thenReturn(client);
-        PowerMockito.when(pulsarProducerInstance, "getTopic").thenReturn("persistent://my-tenant/my-ns/my-topic");
-        PowerMockito.when(pulsarProducerInstance, "getSkyWalkingDynamicField").thenReturn("my-sub");
+        MockConsumerImpl pulsarProducerInstance = mock(MockConsumerImpl.class);
+        final LookupService lookup = mock(LookupService.class);
+        final PulsarClientImpl client = mock(PulsarClientImpl.class);
+        when(lookup.getServiceUrl()).thenReturn("pulsar://localhost:6650");
+        when(client.getLookup()).thenReturn(lookup);
+        when(pulsarProducerInstance.getClient()).thenReturn(client);
+        when(pulsarProducerInstance.getTopic()).thenReturn("persistent://my-tenant/my-ns/my-topic");
+        when(pulsarProducerInstance.getSkyWalkingDynamicField()).thenReturn("my-sub");
         return pulsarProducerInstance;
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/PulsarConsumerListenerInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/PulsarConsumerListenerInterceptorTest.java
index b84db19dff..0f8a9e39ff 100644
--- a/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/PulsarConsumerListenerInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/PulsarConsumerListenerInterceptorTest.java
@@ -18,6 +18,13 @@
 
 package org.apache.skywalking.apm.plugin.pulsar.common;
 
+import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.PULSAR_CONSUMER;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.pulsar.client.api.Consumer;
 import org.apache.pulsar.client.api.MessageListener;
@@ -43,18 +50,8 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.PULSAR_CONSUMER;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class PulsarConsumerListenerInterceptorTest {
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
@@ -141,15 +138,15 @@ public class PulsarConsumerListenerInterceptorTest {
     }
 
     private EnhancedInstance mockConsumer() {
-        EnhancedInstance pulsarProducerInstance = PowerMockito.mock(MockConsumerImpl.class);
-        final LookupService lookup = PowerMockito.mock(LookupService.class);
-        final PulsarClientImpl client = PowerMockito.mock(PulsarClientImpl.class);
+        MockConsumerImpl pulsarProducerInstance = mock(MockConsumerImpl.class);
+        final LookupService lookup = mock(LookupService.class);
+        final PulsarClientImpl client = mock(PulsarClientImpl.class);
         try {
-            PowerMockito.when(lookup, "getServiceUrl").thenReturn("pulsar://localhost:6650");
-            PowerMockito.when(client, "getLookup").thenReturn(lookup);
-            PowerMockito.when(pulsarProducerInstance, "getClient").thenReturn(client);
-            PowerMockito.when(pulsarProducerInstance, "getTopic").thenReturn("persistent://my-tenant/my-ns/my-topic");
-            PowerMockito.when(pulsarProducerInstance, "getSkyWalkingDynamicField").thenReturn("my-sub");
+            when(lookup.getServiceUrl()).thenReturn("pulsar://localhost:6650");
+            when(client.getLookup()).thenReturn(lookup);
+            when(pulsarProducerInstance.getClient()).thenReturn(client);
+            when(pulsarProducerInstance.getTopic()).thenReturn("persistent://my-tenant/my-ns/my-topic");
+            when(pulsarProducerInstance.getSkyWalkingDynamicField()).thenReturn("my-sub");
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
diff --git a/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/PulsarProducerInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/PulsarProducerInterceptorTest.java
index 16b26be87f..2b9d7755b0 100644
--- a/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/PulsarProducerInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/PulsarProducerInterceptorTest.java
@@ -18,6 +18,11 @@
 
 package org.apache.skywalking.apm.plugin.pulsar.common;
 
+import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.PULSAR_PRODUCER;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.pulsar.client.impl.LookupService;
 import org.apache.pulsar.client.impl.MessageImpl;
@@ -36,16 +41,8 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.PULSAR_PRODUCER;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class PulsarProducerInterceptorTest {
 
     @SegmentStoragePoint
@@ -74,14 +71,14 @@ public class PulsarProducerInterceptorTest {
     @Test
     public void testSendMessage() throws Throwable {
 
-        EnhancedInstance pulsarProducerInstance = PowerMockito.mock(MockProducerImpl.class);
-        final LookupService lookup = PowerMockito.mock(LookupService.class);
-        final PulsarClientImpl client = PowerMockito.mock(PulsarClientImpl.class);
-        PowerMockito.when(lookup, "getServiceUrl").thenReturn("pulsar://localhost:6650");
-        PowerMockito.when(client, "getLookup").thenReturn(lookup);
-        PowerMockito.when(pulsarProducerInstance, "getClient").thenReturn(client);
-        PowerMockito.when(pulsarProducerInstance, "getTopic").thenReturn("persistent://my-tenant/my-ns/my-topic");
-        PowerMockito.when(pulsarProducerInstance, "getSkyWalkingDynamicField").thenReturn((MessagePropertiesInjector) (message, carrierItem) -> {
+        MockProducerImpl pulsarProducerInstance = mock(MockProducerImpl.class);
+        final LookupService lookup = mock(LookupService.class);
+        final PulsarClientImpl client = mock(PulsarClientImpl.class);
+        when(lookup.getServiceUrl()).thenReturn("pulsar://localhost:6650");
+        when(client.getLookup()).thenReturn(lookup);
+        when(pulsarProducerInstance.getClient()).thenReturn(client);
+        when(pulsarProducerInstance.getTopic()).thenReturn("persistent://my-tenant/my-ns/my-topic");
+        when(pulsarProducerInstance.getSkyWalkingDynamicField()).thenReturn((MessagePropertiesInjector) (message, carrierItem) -> {
             });
         producerInterceptor.beforeMethod(pulsarProducerInstance, null, arguments, argumentType, null);
         producerInterceptor.afterMethod(pulsarProducerInstance, null, arguments, argumentType, null);
@@ -98,8 +95,8 @@ public class PulsarProducerInterceptorTest {
 
     @Test
     public void testSendWithNullMessage() throws Throwable {
-        EnhancedInstance pulsarProducerInstance = PowerMockito.mock(MockProducerImpl.class);
-        PowerMockito.when(pulsarProducerInstance, "getSkyWalkingDynamicField").thenReturn((MessagePropertiesInjector) (message, carrierItem) -> {
+        EnhancedInstance pulsarProducerInstance = mock(MockProducerImpl.class);
+        when(pulsarProducerInstance.getSkyWalkingDynamicField()).thenReturn((MessagePropertiesInjector) (message, carrierItem) -> {
         });
         producerInterceptor.beforeMethod(pulsarProducerInstance, null, new Object[] {null}, argumentType, null);
         producerInterceptor.afterMethod(pulsarProducerInstance, null, new Object[] {null}, argumentType, null);
diff --git a/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/SendCallbackInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/SendCallbackInterceptorTest.java
index 6236b2e863..1fcdd49d92 100644
--- a/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/SendCallbackInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/pulsar-common/src/test/java/org/apache/skywalking/apm/plugin/pulsar/common/SendCallbackInterceptorTest.java
@@ -37,14 +37,11 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class SendCallbackInterceptorTest {
 
     @SegmentStoragePoint
diff --git a/apm-sniffer/apm-sdk-plugin/rabbitmq-plugin/src/test/java/org/apache/skywalking/apm/plugin/rabbitmq/ChannelNConstructorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/rabbitmq-plugin/src/test/java/org/apache/skywalking/apm/plugin/rabbitmq/ChannelNConstructorInterceptorTest.java
index ccb6955f64..f2b58fd4e8 100644
--- a/apm-sniffer/apm-sdk-plugin/rabbitmq-plugin/src/test/java/org/apache/skywalking/apm/plugin/rabbitmq/ChannelNConstructorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/rabbitmq-plugin/src/test/java/org/apache/skywalking/apm/plugin/rabbitmq/ChannelNConstructorInterceptorTest.java
@@ -35,14 +35,11 @@ import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class ChannelNConstructorInterceptorTest {
 
     private ChannelNConstructorInterceptor channelNConstructorInterceptor;
diff --git a/apm-sniffer/apm-sdk-plugin/rabbitmq-plugin/src/test/java/org/apache/skywalking/apm/plugin/rabbitmq/RabbitMQConsumerInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/rabbitmq-plugin/src/test/java/org/apache/skywalking/apm/plugin/rabbitmq/RabbitMQConsumerInterceptorTest.java
index 714e516b61..57f8e0b40e 100644
--- a/apm-sniffer/apm-sdk-plugin/rabbitmq-plugin/src/test/java/org/apache/skywalking/apm/plugin/rabbitmq/RabbitMQConsumerInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/rabbitmq-plugin/src/test/java/org/apache/skywalking/apm/plugin/rabbitmq/RabbitMQConsumerInterceptorTest.java
@@ -38,13 +38,10 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
 import static org.hamcrest.CoreMatchers.is;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class RabbitMQConsumerInterceptorTest {
 
     @SegmentStoragePoint
diff --git a/apm-sniffer/apm-sdk-plugin/rabbitmq-plugin/src/test/java/org/apache/skywalking/apm/plugin/rabbitmq/RabbitMQProducerInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/rabbitmq-plugin/src/test/java/org/apache/skywalking/apm/plugin/rabbitmq/RabbitMQProducerInterceptorTest.java
index 69cc858fe7..aa3b1e329b 100644
--- a/apm-sniffer/apm-sdk-plugin/rabbitmq-plugin/src/test/java/org/apache/skywalking/apm/plugin/rabbitmq/RabbitMQProducerInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/rabbitmq-plugin/src/test/java/org/apache/skywalking/apm/plugin/rabbitmq/RabbitMQProducerInterceptorTest.java
@@ -33,15 +33,12 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
 import static org.apache.skywalking.apm.network.trace.component.ComponentsDefine.RABBITMQ_PRODUCER;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class RabbitMQProducerInterceptorTest {
 
     @SegmentStoragePoint
diff --git a/apm-sniffer/apm-sdk-plugin/redisson-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/redisson/v3/RedisConnectionMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/redisson-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/redisson/v3/RedisConnectionMethodInterceptorTest.java
index c315ec0410..5337cf1a49 100644
--- a/apm-sniffer/apm-sdk-plugin/redisson-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/redisson/v3/RedisConnectionMethodInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/redisson-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/redisson/v3/RedisConnectionMethodInterceptorTest.java
@@ -30,12 +30,9 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.redisson.config.Config;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class RedisConnectionMethodInterceptorTest {
 
     @SegmentStoragePoint
diff --git a/apm-sniffer/apm-sdk-plugin/resteasy-plugin/resteasy-server-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/resteasy/v3/server/SynchronousDispatcherInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/resteasy-plugin/resteasy-server-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/resteasy/v3/server/SynchronousDispatcherInterceptorTest.java
index f2bdb78cda..1c94a2c414 100644
--- a/apm-sniffer/apm-sdk-plugin/resteasy-plugin/resteasy-server-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/resteasy/v3/server/SynchronousDispatcherInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/resteasy-plugin/resteasy-server-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/resteasy/v3/server/SynchronousDispatcherInterceptorTest.java
@@ -18,6 +18,9 @@
 
 package org.apache.skywalking.apm.plugin.resteasy.v3.server;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.when;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.List;
@@ -46,15 +49,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class SynchronousDispatcherInterceptorTest {
 
     private SynchronousDispatcherInterceptor synchronousDispatcherInterceptor;
@@ -65,6 +63,8 @@ public class SynchronousDispatcherInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     HttpRequest request;
diff --git a/apm-sniffer/apm-sdk-plugin/resteasy-plugin/resteasy-server-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/resteasy/v4/server/SynchronousDispatcherInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/resteasy-plugin/resteasy-server-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/resteasy/v4/server/SynchronousDispatcherInterceptorTest.java
index df54c505e0..3551efc420 100644
--- a/apm-sniffer/apm-sdk-plugin/resteasy-plugin/resteasy-server-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/resteasy/v4/server/SynchronousDispatcherInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/resteasy-plugin/resteasy-server-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/resteasy/v4/server/SynchronousDispatcherInterceptorTest.java
@@ -18,6 +18,12 @@
 
 package org.apache.skywalking.apm.plugin.resteasy.v4.server;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.when;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.SW8CarrierItem;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.LogDataEntity;
@@ -43,19 +49,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.List;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Mockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class SynchronousDispatcherInterceptorTest {
 
     private SynchronousDispatcherInterceptor synchronousDispatcherInterceptor;
@@ -66,6 +63,8 @@ public class SynchronousDispatcherInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     HttpRequest request;
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptorTest.java
index 2d3d18e8d9..93928417e0 100644
--- a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptorTest.java
@@ -18,38 +18,36 @@
 
 package org.apache.skywalking.apm.plugin.rocketMQ.v3;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import java.util.List;
-import com.alibaba.rocketmq.client.impl.CommunicationMode;
-import com.alibaba.rocketmq.common.message.Message;
-import com.alibaba.rocketmq.common.protocol.header.SendMessageRequestHeader;
-import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.agent.test.helper.SegmentHelper;
 import org.apache.skywalking.apm.agent.test.tools.AgentServiceRule;
+import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
 import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
 import org.apache.skywalking.apm.agent.test.tools.SpanAssert;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.alibaba.rocketmq.client.impl.CommunicationMode;
+import com.alibaba.rocketmq.common.message.Message;
+import com.alibaba.rocketmq.common.protocol.header.SendMessageRequestHeader;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class MessageSendInterceptorTest {
 
     private MessageSendInterceptor messageSendInterceptor;
@@ -59,6 +57,8 @@ public class MessageSendInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private Object[] arguments;
 
@@ -128,7 +128,7 @@ public class MessageSendInterceptorTest {
         SpanAssert.assertComponent(mqSpan, ComponentsDefine.ROCKET_MQ_PRODUCER);
         SpanAssert.assertTag(mqSpan, 0, "127.0.0.1");
         verify(messageRequestHeader).setProperties(anyString());
-        verify(callBack).setSkyWalkingDynamicField(Matchers.any());
+        verify(callBack).setSkyWalkingDynamicField(any());
     }
 
     @Test
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/OnExceptionInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/OnExceptionInterceptorTest.java
index 2ed6e7f58c..59bf780148 100644
--- a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/OnExceptionInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/OnExceptionInterceptorTest.java
@@ -18,6 +18,9 @@
 
 package org.apache.skywalking.apm.plugin.rocketMQ.v3;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.ContextSnapshot;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
@@ -36,15 +39,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class OnExceptionInterceptorTest {
 
     private OnExceptionInterceptor exceptionInterceptor;
@@ -54,6 +52,8 @@ public class OnExceptionInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private ContextSnapshot contextSnapshot;
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/OnSuccessInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/OnSuccessInterceptorTest.java
index efb709c458..0927f8a793 100644
--- a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/OnSuccessInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/OnSuccessInterceptorTest.java
@@ -18,9 +18,10 @@
 
 package org.apache.skywalking.apm.plugin.rocketMQ.v3;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.util.List;
-import com.alibaba.rocketmq.client.producer.SendResult;
-import com.alibaba.rocketmq.client.producer.SendStatus;
 import org.apache.skywalking.apm.agent.core.context.ContextSnapshot;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
@@ -38,15 +39,12 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.alibaba.rocketmq.client.producer.SendResult;
+import com.alibaba.rocketmq.client.producer.SendStatus;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class OnSuccessInterceptorTest {
 
     private OnSuccessInterceptor successInterceptor;
@@ -56,6 +54,8 @@ public class OnSuccessInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private ContextSnapshot contextSnapshot;
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptorTest.java
index 3f7f395c58..b9e2232d0c 100644
--- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptorTest.java
@@ -18,49 +18,45 @@
 
 package org.apache.skywalking.apm.plugin.rocketMQ.v4;
 
+import static org.apache.rocketmq.common.message.MessageDecoder.NAME_VALUE_SEPARATOR;
+import static org.apache.rocketmq.common.message.MessageDecoder.PROPERTY_SEPARATOR;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import java.util.Map;
-
 import org.apache.rocketmq.client.impl.CommunicationMode;
 import org.apache.rocketmq.common.message.Message;
 import org.apache.rocketmq.common.message.MessageDecoder;
 import org.apache.rocketmq.common.protocol.header.SendMessageRequestHeader;
 import org.apache.skywalking.apm.agent.core.context.SW8ExtensionCarrierItem;
-import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.SpanLayer;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.agent.test.helper.SegmentHelper;
 import org.apache.skywalking.apm.agent.test.tools.AgentServiceRule;
+import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
 import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
 import org.apache.skywalking.apm.agent.test.tools.SpanAssert;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-import static org.apache.rocketmq.common.message.MessageDecoder.NAME_VALUE_SEPARATOR;
-import static org.apache.rocketmq.common.message.MessageDecoder.PROPERTY_SEPARATOR;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class MessageSendInterceptorTest {
 
     private MessageSendInterceptor messageSendInterceptor;
@@ -70,6 +66,8 @@ public class MessageSendInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private Object[] arguments;
 
@@ -145,7 +143,7 @@ public class MessageSendInterceptorTest {
         SpanAssert.assertLayer(mqSpan, SpanLayer.MQ);
         SpanAssert.assertComponent(mqSpan, ComponentsDefine.ROCKET_MQ_PRODUCER);
         SpanAssert.assertTag(mqSpan, 0, "127.0.0.1");
-        verify(callBack).setSkyWalkingDynamicField(Matchers.any());
+        verify(callBack).setSkyWalkingDynamicField(any());
     }
 
     @Test
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/OnExceptionInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/OnExceptionInterceptorTest.java
index eee70fa780..169c3b59bb 100644
--- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/OnExceptionInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/OnExceptionInterceptorTest.java
@@ -18,6 +18,9 @@
 
 package org.apache.skywalking.apm.plugin.rocketMQ.v4;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.ContextSnapshot;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
@@ -36,15 +39,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class OnExceptionInterceptorTest {
 
     private OnExceptionInterceptor exceptionInterceptor;
@@ -54,6 +52,8 @@ public class OnExceptionInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private ContextSnapshot contextSnapshot;
diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/OnSuccessInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/OnSuccessInterceptorTest.java
index b223a71fc2..d432daafd8 100644
--- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/OnSuccessInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/OnSuccessInterceptorTest.java
@@ -18,6 +18,9 @@
 
 package org.apache.skywalking.apm.plugin.rocketMQ.v4;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.rocketmq.client.producer.SendResult;
 import org.apache.rocketmq.client.producer.SendStatus;
@@ -38,15 +41,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.api.mockito.PowerMockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class OnSuccessInterceptorTest {
 
     private OnSuccessInterceptor successInterceptor;
@@ -56,6 +54,8 @@ public class OnSuccessInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private ContextSnapshot contextSnapshot;
diff --git a/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/InterceptorTest.java b/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/InterceptorTest.java
index be4040dcfd..72e40e5768 100644
--- a/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/InterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/InterceptorTest.java
@@ -30,8 +30,6 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
 import java.util.HashMap;
 import java.util.List;
@@ -40,8 +38,7 @@ import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class InterceptorTest {
 
     @SegmentStoragePoint
diff --git a/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-4.0.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/InterceptorTest.java b/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-4.0.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/InterceptorTest.java
index cb315e53ef..8183ba6b0e 100644
--- a/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-4.0.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/InterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-4.0.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/InterceptorTest.java
@@ -34,8 +34,6 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
 import java.util.HashMap;
 import java.util.List;
@@ -44,8 +42,7 @@ import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class InterceptorTest {
 
     @SegmentStoragePoint
diff --git a/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-4.1.0-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/InterceptorTest.java b/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-4.1.0-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/InterceptorTest.java
index 1dc1358662..69c8caca17 100644
--- a/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-4.1.0-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/InterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-4.1.0-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/InterceptorTest.java
@@ -36,15 +36,12 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class InterceptorTest {
 
     @SegmentStoragePoint
diff --git a/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-5.0.0-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/v500/InterceptorTest.java b/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-5.0.0-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/v500/InterceptorTest.java
index 985c5a5970..35838ee128 100644
--- a/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-5.0.0-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/v500/InterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/shardingsphere-plugins/sharding-sphere-5.0.0-plugin/src/test/java/org/apache/skywalking/apm/plugin/shardingsphere/v500/InterceptorTest.java
@@ -18,6 +18,12 @@
 
 package org.apache.skywalking.apm.plugin.shardingsphere.v500;
 
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
 import org.apache.shardingsphere.infra.binder.LogicSQL;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
 import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment;
@@ -31,39 +37,28 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class InterceptorTest {
 
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
-    
+
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
-    
+
     private ProxyRootInvokeInterceptor proxyRootInvokeInterceptor;
-    
+
     private JDBCRootInvokeInterceptor jdbcRootInvokeInterceptor;
-    
+
     private ParseInterceptor parseInterceptor;
-    
+
     private RouteInterceptor routeInterceptor;
-    
+
     private RewriteInterceptor rewriteInterceptor;
-    
+
     private ExecuteInterceptor executeInterceptor;
-    
+
     @Before
     public void setUp() {
         proxyRootInvokeInterceptor = new ProxyRootInvokeInterceptor();
@@ -114,7 +109,7 @@ public class InterceptorTest {
         assertThat(spans.get(0).getOperationName(), is("/ShardingSphere/parseSQL/"));
         SpanAssert.assertTag(spans.get(0), 0, "SELECT * FROM t_order");
     }
-    
+
     @Test
     public void assertRoute() {
         Object[] allArguments = new Object[]{
@@ -130,7 +125,7 @@ public class InterceptorTest {
         assertThat(spans.size(), is(1));
         assertThat(spans.get(0).getOperationName(), is("/ShardingSphere/routeSQL/"));
     }
-    
+
     @Test
     public void assertRewrite() {
         Object[] allArguments = new Object[]{
@@ -148,7 +143,7 @@ public class InterceptorTest {
         assertThat(spans.size(), is(1));
         assertThat(spans.get(0).getOperationName(), is("/ShardingSphere/rewriteSQL/"));
     }
-    
+
     @Test
     public void assertExecute() {
         Object[] allArguments = new Object[]{
diff --git a/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/src/test/java/org/apache/skywalking/apm/plugin/sofarpc/SofaRpcConsumerInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/src/test/java/org/apache/skywalking/apm/plugin/sofarpc/SofaRpcConsumerInterceptorTest.java
index a1699c278b..3dc0903ec0 100644
--- a/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/src/test/java/org/apache/skywalking/apm/plugin/sofarpc/SofaRpcConsumerInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/src/test/java/org/apache/skywalking/apm/plugin/sofarpc/SofaRpcConsumerInterceptorTest.java
@@ -18,11 +18,11 @@
 
 package org.apache.skywalking.apm.plugin.sofarpc;
 
-import com.alipay.sofa.rpc.client.ProviderInfo;
-import com.alipay.sofa.rpc.context.RpcInternalContext;
-import com.alipay.sofa.rpc.core.request.SofaRequest;
-import com.alipay.sofa.rpc.core.response.SofaResponse;
-import com.alipay.sofa.rpc.filter.ConsumerInvoker;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.conf.Config;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
@@ -39,36 +39,35 @@ import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
 import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.hamcrest.CoreMatchers;
+import org.junit.AfterClass;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.alipay.sofa.rpc.client.ProviderInfo;
+import com.alipay.sofa.rpc.context.RpcInternalContext;
+import com.alipay.sofa.rpc.core.request.SofaRequest;
+import com.alipay.sofa.rpc.core.response.SofaResponse;
+import com.alipay.sofa.rpc.filter.ConsumerInvoker;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest({
-    RpcInternalContext.class,
-    SofaRequest.class,
-    SofaResponse.class
-})
+@RunWith(TracingSegmentRunner.class)
 public class SofaRpcConsumerInterceptorTest {
 
+    private static MockedStatic<RpcInternalContext> MOCKED_STATIC;
+
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
 
     @Rule
     public AgentServiceRule agentServiceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
@@ -81,26 +80,35 @@ public class SofaRpcConsumerInterceptorTest {
     @Mock
     private ConsumerInvoker invoker;
 
-    private SofaRequest sofaRequest = PowerMockito.mock(SofaRequest.class);
+    @Mock
+    private SofaRequest sofaRequest;
     @Mock
     private MethodInterceptResult methodInterceptResult;
-
-    private SofaResponse sofaResponse = PowerMockito.mock(SofaResponse.class);
+    @Mock
+    private SofaResponse sofaResponse;
 
     private Object[] allArguments;
     private Class[] argumentTypes;
 
+    @BeforeClass
+    public static void beforeClass() {
+        MOCKED_STATIC = Mockito.mockStatic(RpcInternalContext.class);
+    }
+
+    @AfterClass
+    public static void afterClass() {
+        MOCKED_STATIC.close();
+    }
+
     @Before
     public void setUp() throws Exception {
         sofaRpcConsumerInterceptor = new SofaRpcConsumerInterceptor();
 
-        PowerMockito.mockStatic(RpcInternalContext.class);
-
         when(sofaRequest.getMethodName()).thenReturn("test");
         when(sofaRequest.getMethodArgSigs()).thenReturn(new String[] {"String"});
         when(sofaRequest.getMethodArgs()).thenReturn(new Object[] {"abc"});
         when(sofaRequest.getInterfaceName()).thenReturn("org.apache.skywalking.apm.test.TestSofaRpcService");
-        PowerMockito.when(RpcInternalContext.getContext()).thenReturn(rpcContext);
+        MOCKED_STATIC.when(RpcInternalContext::getContext).thenReturn(rpcContext);
         when(rpcContext.isConsumerSide()).thenReturn(true);
         final ProviderInfo providerInfo = new ProviderInfo();
         providerInfo.setHost("127.0.0.1");
diff --git a/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/src/test/java/org/apache/skywalking/apm/plugin/sofarpc/SofaRpcProviderInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/src/test/java/org/apache/skywalking/apm/plugin/sofarpc/SofaRpcProviderInterceptorTest.java
index 02387af371..43c2938e5e 100644
--- a/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/src/test/java/org/apache/skywalking/apm/plugin/sofarpc/SofaRpcProviderInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/sofarpc-plugin/src/test/java/org/apache/skywalking/apm/plugin/sofarpc/SofaRpcProviderInterceptorTest.java
@@ -18,11 +18,10 @@
 
 package org.apache.skywalking.apm.plugin.sofarpc;
 
-import com.alipay.sofa.rpc.client.ProviderInfo;
-import com.alipay.sofa.rpc.context.RpcInternalContext;
-import com.alipay.sofa.rpc.core.request.SofaRequest;
-import com.alipay.sofa.rpc.core.response.SofaResponse;
-import com.alipay.sofa.rpc.filter.ProviderInvoker;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.conf.Config;
 import org.apache.skywalking.apm.agent.core.context.SW8CarrierItem;
@@ -41,37 +40,37 @@ import org.apache.skywalking.apm.agent.test.tools.SegmentStorage;
 import org.apache.skywalking.apm.agent.test.tools.SegmentStoragePoint;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.hamcrest.CoreMatchers;
+import org.junit.AfterClass;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.alipay.sofa.rpc.client.ProviderInfo;
+import com.alipay.sofa.rpc.context.RpcInternalContext;
+import com.alipay.sofa.rpc.core.request.SofaRequest;
+import com.alipay.sofa.rpc.core.response.SofaResponse;
+import com.alipay.sofa.rpc.filter.ProviderInvoker;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
-@PrepareForTest({
-    RpcInternalContext.class,
-    SofaRequest.class,
-    SofaResponse.class
-})
+@RunWith(TracingSegmentRunner.class)
 public class SofaRpcProviderInterceptorTest {
 
     public static final String SKYWALKING_PREFIX = "skywalking.";
 
+    private static MockedStatic<RpcInternalContext> MOCKED_STATIC;
+
     @SegmentStoragePoint
     private SegmentStorage segmentStorage;
 
     @Rule
     public AgentServiceRule agentServiceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private EnhancedInstance enhancedInstance;
@@ -83,27 +82,35 @@ public class SofaRpcProviderInterceptorTest {
 
     @Mock
     private ProviderInvoker invoker;
-
-    private SofaRequest sofaRequest = PowerMockito.mock(SofaRequest.class);
+    @Mock
+    private SofaRequest sofaRequest;
     @Mock
     private MethodInterceptResult methodInterceptResult;
-
-    private SofaResponse sofaResponse = PowerMockito.mock(SofaResponse.class);
+    @Mock
+    private SofaResponse sofaResponse;
 
     private Object[] allArguments;
     private Class[] argumentTypes;
 
+    @BeforeClass
+    public static void beforeClass() {
+        MOCKED_STATIC = Mockito.mockStatic(RpcInternalContext.class);
+    }
+
+    @AfterClass
+    public static void afterClass() {
+        MOCKED_STATIC.close();
+    }
+
     @Before
     public void setUp() throws Exception {
         sofaRpcProviderInterceptor = new SofaRpcProviderInterceptor();
 
-        PowerMockito.mockStatic(RpcInternalContext.class);
-
         when(sofaRequest.getMethodName()).thenReturn("test");
         when(sofaRequest.getMethodArgSigs()).thenReturn(new String[] {"String"});
         when(sofaRequest.getMethodArgs()).thenReturn(new Object[] {"abc"});
         when(sofaRequest.getInterfaceName()).thenReturn("org.apache.skywalking.apm.test.TestSofaRpcService");
-        PowerMockito.when(RpcInternalContext.getContext()).thenReturn(rpcContext);
+        MOCKED_STATIC.when(RpcInternalContext::getContext).thenReturn(rpcContext);
         when(rpcContext.isConsumerSide()).thenReturn(false);
         final ProviderInfo providerInfo = new ProviderInfo();
         providerInfo.setHost("127.0.0.1");
diff --git a/apm-sniffer/apm-sdk-plugin/solrj-7.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/solrj/SolrClientInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/solrj-7.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/solrj/SolrClientInterceptorTest.java
index e51a2a35d4..1505c3251f 100644
--- a/apm-sniffer/apm-sdk-plugin/solrj-7.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/solrj/SolrClientInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/solrj-7.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/solrj/SolrClientInterceptorTest.java
@@ -18,7 +18,7 @@
 
 package org.apache.skywalking.apm.plugin.solrj;
 
-import com.google.common.collect.Lists;
+import static org.mockito.Mockito.when;
 import java.lang.reflect.Method;
 import java.util.List;
 import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
@@ -53,13 +53,11 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.mockito.Mockito.when;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import com.google.common.collect.Lists;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class SolrClientInterceptorTest {
     SolrClientInterceptor interceptor = new SolrClientInterceptor();
 
@@ -68,6 +66,8 @@ public class SolrClientInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private HttpSolrClient client;
@@ -431,4 +431,4 @@ public class SolrClientInterceptorTest {
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/test/java/org/apache/skywalking/apm/plugin/spring/patch/AopExpressionMatchInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/test/java/org/apache/skywalking/apm/plugin/spring/patch/AopExpressionMatchInterceptorTest.java
index dddfcde09b..b35cdf24e9 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/test/java/org/apache/skywalking/apm/plugin/spring/patch/AopExpressionMatchInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/test/java/org/apache/skywalking/apm/plugin/spring/patch/AopExpressionMatchInterceptorTest.java
@@ -23,7 +23,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.springframework.aop.MethodMatcher;
 import org.springframework.util.ReflectionUtils;
 
@@ -70,4 +70,4 @@ public class AopExpressionMatchInterceptorTest {
 
         }
     }
-}
\ No newline at end of file
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/test/java/org/apache/skywalking/apm/plugin/spring/patch/CreateAopProxyInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/test/java/org/apache/skywalking/apm/plugin/spring/patch/CreateAopProxyInterceptorTest.java
index 4073fb9692..12b5c96633 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/test/java/org/apache/skywalking/apm/plugin/spring/patch/CreateAopProxyInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/src/test/java/org/apache/skywalking/apm/plugin/spring/patch/CreateAopProxyInterceptorTest.java
@@ -23,7 +23,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.springframework.aop.framework.AdvisedSupport;
 
 import static org.hamcrest.core.Is.is;
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v3/define/AbstractSpring3Instrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v3/define/AbstractSpring3Instrumentation.java
index 3ecf23eaa4..e0db56ada5 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v3/define/AbstractSpring3Instrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v3/define/AbstractSpring3Instrumentation.java
@@ -26,10 +26,12 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInst
  */
 public abstract class AbstractSpring3Instrumentation extends ClassInstanceMethodsEnhancePluginDefine {
 
-    public static final String WITHNESS_CLASSES = "org.springframework.web.servlet.view.xslt.AbstractXsltView";
+    public static final String[] WITHNESS_CLASSES = new String[] {
+        "org.springframework.web.servlet.view.xslt.AbstractXsltView"
+    };
 
     @Override
     protected final String[] witnessClasses() {
-        return new String[] {WITHNESS_CLASSES};
+        return WITHNESS_CLASSES;
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptorTest.java
index ac69c2781a..29ce66a7e1 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v3/ControllerConstructorInterceptorTest.java
@@ -18,6 +18,8 @@
 
 package org.apache.skywalking.apm.plugin.spring.mvc.v3;
 
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
 import java.lang.reflect.Field;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
@@ -25,13 +27,10 @@ import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-@RunWith(PowerMockRunner.class)
+@RunWith(MockitoJUnitRunner.class)
 public class ControllerConstructorInterceptorTest {
 
     private ControllerConstructorInterceptor interceptor;
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/AbstractSpring4Instrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/AbstractSpring4Instrumentation.java
index e17f47f810..a99a94592a 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/AbstractSpring4Instrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/AbstractSpring4Instrumentation.java
@@ -21,13 +21,13 @@ package org.apache.skywalking.apm.plugin.spring.mvc.v4.define;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
 
 public abstract class AbstractSpring4Instrumentation extends ClassInstanceMethodsEnhancePluginDefine {
-    public static final String WITHNESS_CLASSES = "org.springframework.cache.interceptor.SimpleKey";
+    public static final String[] WITHNESS_CLASSES = new String[] {
+        "org.springframework.cache.interceptor.SimpleKey",
+        "org.springframework.cache.interceptor.DefaultKeyGenerator",
+    };
 
     @Override
     protected String[] witnessClasses() {
-        return new String[] {
-            WITHNESS_CLASSES,
-            "org.springframework.cache.interceptor.DefaultKeyGenerator"
-        };
+        return WITHNESS_CLASSES;
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/ControllerForLowVersionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/ControllerForLowVersionInstrumentation.java
index c27cfc860e..47cb682e30 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/ControllerForLowVersionInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/ControllerForLowVersionInstrumentation.java
@@ -47,11 +47,13 @@ public class ControllerForLowVersionInstrumentation extends AbstractControllerIn
 
     @Override
     protected String[] witnessClasses() {
-        return new String[] {
-            WITHNESS_CLASSES,
-            "org.springframework.cache.interceptor.DefaultKeyGenerator",
-            WITNESS_CLASSES_LOW_VERSION
-        };
+        final String[] classes = new String[WITHNESS_CLASSES.length + 1];
+        int i = 0;
+        for (; i < WITHNESS_CLASSES.length; i++) {
+            classes[i] = WITHNESS_CLASSES[i];
+        }
+        classes[i++] = WITNESS_CLASSES_LOW_VERSION;
+        return classes;
     }
 
     @Override
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerForLowVersionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerForLowVersionInstrumentation.java
index 55e62ec55f..e8751f5142 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerForLowVersionInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerForLowVersionInstrumentation.java
@@ -47,11 +47,13 @@ public class RestControllerForLowVersionInstrumentation extends AbstractControll
 
     @Override
     protected String[] witnessClasses() {
-        return new String[] {
-            WITHNESS_CLASSES,
-            "org.springframework.cache.interceptor.DefaultKeyGenerator",
-            WITNESS_CLASSES_LOW_VERSION
-        };
+        final String[] classes = new String[WITHNESS_CLASSES.length + 1];
+        int i = 0;
+        for (; i < WITHNESS_CLASSES.length; i++) {
+            classes[i] = WITHNESS_CLASSES[i];
+        }
+        classes[i++] = WITNESS_CLASSES_LOW_VERSION;
+        return classes;
     }
 
     @Override
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentation.java
index 5db1b79980..c0a0106aea 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentation.java
@@ -31,10 +31,12 @@ public class RestControllerInstrumentation extends AbstractControllerInstrumenta
 
     @Override
     protected String[] witnessClasses() {
-        return new String[] {
-            WITHNESS_CLASSES,
-            "org.springframework.cache.interceptor.DefaultKeyGenerator",
-            WITNESS_CLASSES_HIGH_VERSION
-        };
+        final String[] classes = new String[WITHNESS_CLASSES.length + 1];
+        int i = 0;
+        for (; i < WITHNESS_CLASSES.length; i++) {
+            classes[i] = WITHNESS_CLASSES[i];
+        }
+        classes[i++] = WITNESS_CLASSES_HIGH_VERSION;
+        return classes;
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptorTest.java
index bc95a7d26d..e069ecb50a 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/ControllerConstructorInterceptorTest.java
@@ -23,15 +23,12 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class ControllerConstructorInterceptorTest {
     private ControllerConstructorInterceptor controllerConstructorInterceptor;
     private final MockEnhancedInstance1 inst1 = new MockEnhancedInstance1();
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/PathMappingCacheTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/PathMappingCacheTest.java
index 7244593c75..349ef830ed 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/PathMappingCacheTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/PathMappingCacheTest.java
@@ -19,17 +19,14 @@
 package org.apache.skywalking.apm.plugin.spring.mvc.v4;
 
 import java.lang.reflect.Method;
+import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class PathMappingCacheTest {
     private PathMappingCache pathMappingCache;
 
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptorTest.java
index 70f4389692..355e65b335 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/RequestMappingMethodInterceptorTest.java
@@ -18,6 +18,10 @@
 
 package org.apache.skywalking.apm.plugin.spring.mvc.v4;
 
+import static org.apache.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.when;
 import java.lang.reflect.Method;
 import java.util.List;
 import javax.servlet.http.HttpServletRequest;
@@ -46,20 +50,14 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.context.request.NativeWebRequest;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
-import static org.apache.skywalking.apm.agent.test.tools.SpanAssert.assertComponent;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Mockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class RequestMappingMethodInterceptorTest {
     private RequestMappingMethodInterceptor interceptor;
 
@@ -68,6 +66,8 @@ public class RequestMappingMethodInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     private ServletRequestAttributes servletRequestAttributes;
 
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptorTest.java
index 107ab9eb05..59379139c3 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptorTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/RestMappingMethodInterceptorTest.java
@@ -18,6 +18,9 @@
 
 package org.apache.skywalking.apm.plugin.spring.mvc.v4;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.when;
 import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.List;
@@ -51,8 +54,8 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PatchMapping;
@@ -63,12 +66,7 @@ import org.springframework.web.context.request.NativeWebRequest;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Mockito.when;
-
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class RestMappingMethodInterceptorTest {
     private RestMappingMethodInterceptor interceptor;
 
@@ -77,6 +75,8 @@ public class RestMappingMethodInterceptorTest {
 
     @Rule
     public AgentServiceRule serviceRule = new AgentServiceRule();
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
 
     @Mock
     private HttpServletRequest request;
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/ControllerInstrumentationTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/ControllerInstrumentationTest.java
index 1a57e8b19c..47550f922c 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/ControllerInstrumentationTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/ControllerInstrumentationTest.java
@@ -18,22 +18,18 @@
 
 package org.apache.skywalking.apm.plugin.spring.mvc.v4.define;
 
-import net.bytebuddy.matcher.ElementMatchers;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
-import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
+import net.bytebuddy.matcher.ElementMatchers;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class ControllerInstrumentationTest {
     private ControllerInstrumentation controllerInstrumentation;
 
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentationTest.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentationTest.java
index ed53c0f053..350feaf188 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentationTest.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentationTest.java
@@ -18,20 +18,16 @@
 
 package org.apache.skywalking.apm.plugin.spring.mvc.v4.define;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
 import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
-import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
 
-@RunWith(PowerMockRunner.class)
-@PowerMockRunnerDelegate(TracingSegmentRunner.class)
+@RunWith(TracingSegmentRunner.class)
 public class RestControllerInstrumentationTest {
     private RestControllerInstrumentation restControllerInstrumentation;
 
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..1f0955d450
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java
index 5753debefa..af35d97a90 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java
@@ -20,10 +20,13 @@ package org.apache.skywalking.apm.plugin.spring.mvc.v5.define.reactive;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
 
 public abstract class AbstractSpring5ReactiveInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
-    public static final String WITNESS_CLASSES = "org.springframework.web.reactive.result.method.InvocableHandlerMethod";
+    public static final String[] WITNESS_CLASSES = new String[] {
+        "org.springframework.web.reactive.result.method.InvocableHandlerMethod",
+        "org.springframework.web.client.AsyncRequestCallback"
+    };
 
     @Override
     protected final String[] witnessClasses() {
-        return new String[] {WITNESS_CLASSES};
+        return WITNESS_CLASSES;
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentationV2.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentationV2.java
index 52adbb77f1..4c3259973a 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentationV2.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentationV2.java
@@ -20,10 +20,13 @@ package org.apache.skywalking.apm.plugin.spring.mvc.v5.define.reactive;
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.v2.ClassInstanceMethodsEnhancePluginDefineV2;
 
 public abstract class AbstractSpring5ReactiveInstrumentationV2 extends ClassInstanceMethodsEnhancePluginDefineV2 {
-    public static final String WITNESS_CLASSES = "org.springframework.web.reactive.result.method.InvocableHandlerMethod";
+    public static final String[] WITNESS_CLASSES = new String[] {
+        "org.springframework.web.reactive.result.method.InvocableHandlerMethod",
+        "org.springframework.web.client.AsyncRequestCallback"
+    };
 
     @Override
     protected final String[] witnessClasses() {
-        return new String[] {WITNESS_CLASSES};
+        return WITNESS_CLASSES;
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/pom.xml
similarity index 64%
copy from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/pom.xml
copy to apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/pom.xml
index 70871bbe38..8f588bdfac 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/pom.xml
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/pom.xml
@@ -6,14 +6,13 @@
   ~ (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
+  ~      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.
-  ~
+  ~  See the License for the specific language governing permissions and
+  ~  limitations under the License.
   -->
 
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -24,16 +23,17 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>apm-springmvc-annotation-commons</artifactId>
+    <artifactId>apm-springmvc-annotation-6.x-plugin</artifactId>
     <packaging>jar</packaging>
 
-    <name>mvc-annotation-commons</name>
+    <name>mvc-annotation-6.x-plugin</name>
     <url>http://maven.apache.org</url>
 
     <properties>
-        <spring-core.version>4.3.10.RELEASE</spring-core.version>
-        <spring-webmvc.version>4.3.8.RELEASE</spring-webmvc.version>
-        <javax-servlet-api.version>3.0.1</javax-servlet-api.version>
+        <spring-core.version>6.0.0</spring-core.version>
+        <spring-webmvc.version>6.0.0</spring-webmvc.version>
+        <jakarta-servlet-api.version>6.0.0</jakarta-servlet-api.version>
+        <spring-webflux.version>6.0.0</spring-webflux.version>
     </properties>
 
     <dependencies>
@@ -49,16 +49,22 @@
             <version>${spring-webmvc.version}</version>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>apm-springmvc-annotation-commons</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
-            <artifactId>spring-web</artifactId>
-            <version>5.2.4.RELEASE</version>
+            <artifactId>spring-webflux</artifactId>
+            <version>${spring-webflux.version}</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
-            <version>${javax-servlet-api.version}</version>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
+            <version>${jakarta-servlet-api.version}</version>
             <scope>provided</scope>
         </dependency>
     </dependencies>
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/ControllerConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/ControllerConstructorInterceptor.java
new file mode 100644
index 0000000000..6157e9fdbe
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/ControllerConstructorInterceptor.java
@@ -0,0 +1,58 @@
+/*
+ * 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.skywalking.apm.plugin.spring.mvc.v6;
+
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
+import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor;
+import org.springframework.core.annotation.AnnotationUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * The <code>ControllerConstructorInterceptor</code> intercepts the Controller's constructor, in order to acquire the
+ * mapping annotation, if exist.
+ * <p>
+ * But, you can see we only use the first mapping value, <B>Why?</B>
+ * <p>
+ * Right now, we intercept the controller by annotation as you known, so we CAN'T know which uri patten is actually
+ * matched. Even we know, that costs a lot.
+ * <p>
+ * If we want to resolve that, we must intercept the Spring MVC core codes, that is not a good choice for now.
+ * <p>
+ * Comment by @wu-sheng
+ */
+public class ControllerConstructorInterceptor implements InstanceConstructorInterceptor {
+
+    @Override
+    public void onConstruct(EnhancedInstance objInst, Object[] allArguments) {
+        String basePath = "";
+        RequestMapping basePathRequestMapping = AnnotationUtils.findAnnotation(objInst.getClass(), RequestMapping.class);
+        if (basePathRequestMapping != null) {
+            if (basePathRequestMapping.value().length > 0) {
+                basePath = basePathRequestMapping.value()[0];
+            } else if (basePathRequestMapping.path().length > 0) {
+                basePath = basePathRequestMapping.path()[0];
+            }
+        }
+        EnhanceRequireObjectCache enhanceRequireObjectCache = new EnhanceRequireObjectCache();
+        enhanceRequireObjectCache.setPathMappingCache(new PathMappingCache(basePath));
+        objInst.setSkyWalkingDynamicField(enhanceRequireObjectCache);
+    }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/GetBeanInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/GetBeanInterceptor.java
new file mode 100644
index 0000000000..33a588c68a
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/GetBeanInterceptor.java
@@ -0,0 +1,68 @@
+/*
+ * 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.skywalking.apm.plugin.spring.mvc.v6;
+
+import java.lang.reflect.Method;
+import org.apache.skywalking.apm.agent.core.context.ContextManager;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.REQUEST_KEY_IN_RUNTIME_CONTEXT;
+import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.RESPONSE_KEY_IN_RUNTIME_CONTEXT;
+
+/**
+ * {@link GetBeanInterceptor} pass the {@link NativeWebRequest} object into the {@link
+ * org.springframework.stereotype.Controller} object.
+ */
+public class GetBeanInterceptor implements InstanceMethodsAroundInterceptor {
+    @Override
+    public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes,
+                             MethodInterceptResult result) throws Throwable {
+    }
+
+    @Override
+    public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes,
+                              Object ret) throws Throwable {
+        if (ret instanceof EnhancedInstance) {
+            ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+            if (requestAttributes != null) {
+                ContextManager.getRuntimeContext()
+                              .put(
+                                  REQUEST_KEY_IN_RUNTIME_CONTEXT,
+                                  requestAttributes.getRequest()
+                              );
+                ContextManager.getRuntimeContext()
+                              .put(
+                                  RESPONSE_KEY_IN_RUNTIME_CONTEXT,
+                                  requestAttributes.getResponse()
+                              );
+            }
+        }
+        return ret;
+    }
+
+    @Override
+    public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments,
+                                      Class<?>[] argumentsTypes, Throwable t) {
+
+    }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/InvokeInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/InvokeInterceptor.java
new file mode 100644
index 0000000000..da9a33d939
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/InvokeInterceptor.java
@@ -0,0 +1,88 @@
+/*
+ *  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.skywalking.apm.plugin.spring.mvc.v6;
+
+import org.apache.skywalking.apm.agent.core.context.ContextManager;
+import org.apache.skywalking.apm.agent.core.context.RuntimeContext;
+import org.apache.skywalking.apm.agent.core.context.tag.Tags;
+import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.v2.InstanceMethodsAroundInterceptorV2;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.v2.MethodInvocationContext;
+import org.springframework.http.HttpStatusCode;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+import java.lang.reflect.Method;
+
+import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.REACTIVE_ASYNC_SPAN_IN_RUNTIME_CONTEXT;
+import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.REQUEST_KEY_IN_RUNTIME_CONTEXT;
+import static org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants.RESPONSE_KEY_IN_RUNTIME_CONTEXT;
+
+public class InvokeInterceptor implements InstanceMethodsAroundInterceptorV2 {
+    @Override
+    public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, MethodInvocationContext context) throws Throwable {
+        ServerWebExchange exchange = (ServerWebExchange) allArguments[0];
+        final ServerHttpResponse response = exchange.getResponse();
+        /**
+         * First, we put the slot in the RuntimeContext,
+         * as well as the MethodInvocationContext (MIC),
+         * so that we can access it in the {@link org.apache.skywalking.apm.plugin.spring.mvc.v6.InvokeInterceptor#afterMethod}
+         * Then we fetch the slot from {@link org.apache.skywalking.apm.plugin.spring.mvc.commons.interceptor.AbstractMethodInterceptor#afterMethod}
+         * and fulfill the slot with the real AbstractSpan.
+         * Afterwards, we can safely remove the RuntimeContext.
+         * Finally, when the lambda executes in the {@link reactor.core.publisher.Mono#doFinally},
+         * ref of span could be acquired from MIC.
+         */
+        AbstractSpan[] ref = new AbstractSpan[1];
+        RuntimeContext runtimeContext = ContextManager.getRuntimeContext();
+        runtimeContext.put(REACTIVE_ASYNC_SPAN_IN_RUNTIME_CONTEXT, ref);
+        runtimeContext.put(RESPONSE_KEY_IN_RUNTIME_CONTEXT, response);
+        runtimeContext.put(REQUEST_KEY_IN_RUNTIME_CONTEXT, exchange.getRequest());
+        context.setContext(ref);
+    }
+
+    @Override
+    public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, Object ret, MethodInvocationContext context) throws Throwable {
+        ServerWebExchange exchange = (ServerWebExchange) allArguments[0];
+        return ((Mono) ret).doFinally(s -> {
+            Object ctx = context.getContext();
+            if (ctx == null) {
+                return;
+            }
+            AbstractSpan span = ((AbstractSpan[]) ctx)[0];
+            if (span == null) {
+                return;
+            }
+            HttpStatusCode httpStatus = exchange.getResponse().getStatusCode();
+            if (httpStatus != null) {
+                Tags.HTTP_RESPONSE_STATUS_CODE.set(span, httpStatus.value());
+                if (httpStatus.isError()) {
+                    span.errorOccurred();
+                }
+            }
+            span.asyncFinish();
+        });
+    }
+
+    @Override
+    public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, Throwable t, MethodInvocationContext context) {
+
+    }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/AbstractControllerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/AbstractControllerInstrumentation.java
new file mode 100644
index 0000000000..bf5fb5fc2e
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/AbstractControllerInstrumentation.java
@@ -0,0 +1,113 @@
+/*
+ * 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.skywalking.apm.plugin.spring.mvc.v6.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.DeclaredInstanceMethodsInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassAnnotationMatch;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+import org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants;
+
+import static net.bytebuddy.matcher.ElementMatchers.any;
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static org.apache.skywalking.apm.agent.core.plugin.match.MethodInheritanceAnnotationMatcher.byMethodInheritanceAnnotationMatcher;
+
+/**
+ * {@link ControllerInstrumentation} enhance all constructor and method annotated with
+ * <code>org.springframework.web.bind.annotation.RequestMapping</code> that class has
+ * <code>org.springframework.stereotype.Controller</code> annotation.
+ *
+ * <code>ControllerConstructorInterceptor</code> set the controller base path to
+ * dynamic field before execute constructor.
+ *
+ * <code>org.apache.skywalking.apm.plugin.spring.mvc.commons.interceptor.RequestMappingMethodInterceptor</code> get the request path
+ * from dynamic field first, if not found, <code>RequestMappingMethodInterceptor</code> generate request path  that
+ * combine the path value of current annotation on current method and the base path and set the new path to the dynamic
+ * filed
+ */
+public abstract class AbstractControllerInstrumentation extends AbstractSpring5Instrumentation {
+    @Override
+    public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+        return new ConstructorInterceptPoint[] {
+            new ConstructorInterceptPoint() {
+                @Override
+                public ElementMatcher<MethodDescription> getConstructorMatcher() {
+                    return any();
+                }
+
+                @Override
+                public String getConstructorInterceptor() {
+                    return "org.apache.skywalking.apm.plugin.spring.mvc.v6.ControllerConstructorInterceptor";
+                }
+            }
+        };
+    }
+
+    @Override
+    public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+        return new InstanceMethodsInterceptPoint[] {
+            new DeclaredInstanceMethodsInterceptPoint() {
+                @Override
+                public ElementMatcher<MethodDescription> getMethodsMatcher() {
+                    return byMethodInheritanceAnnotationMatcher(named("org.springframework.web.bind.annotation.RequestMapping"));
+                }
+
+                @Override
+                public String getMethodsInterceptor() {
+                    return Constants.REQUEST_MAPPING_METHOD_INTERCEPTOR;
+                }
+
+                @Override
+                public boolean isOverrideArgs() {
+                    return false;
+                }
+            },
+            new DeclaredInstanceMethodsInterceptPoint() {
+                @Override
+                public ElementMatcher<MethodDescription> getMethodsMatcher() {
+                    return byMethodInheritanceAnnotationMatcher(named("org.springframework.web.bind.annotation.GetMapping"))
+                        .or(byMethodInheritanceAnnotationMatcher(named("org.springframework.web.bind.annotation.PostMapping")))
+                        .or(byMethodInheritanceAnnotationMatcher(named("org.springframework.web.bind.annotation.PutMapping")))
+                        .or(byMethodInheritanceAnnotationMatcher(named("org.springframework.web.bind.annotation.DeleteMapping")))
+                        .or(byMethodInheritanceAnnotationMatcher(named("org.springframework.web.bind.annotation.PatchMapping")));
+                }
+
+                @Override
+                public String getMethodsInterceptor() {
+                    return Constants.REST_MAPPING_METHOD_INTERCEPTOR;
+                }
+
+                @Override
+                public boolean isOverrideArgs() {
+                    return false;
+                }
+            }
+        };
+    }
+
+    @Override
+    protected ClassMatch enhanceClass() {
+        return ClassAnnotationMatch.byClassAnnotationMatch(getEnhanceAnnotations());
+    }
+
+    protected abstract String[] getEnhanceAnnotations();
+
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/AbstractSpring5Instrumentation.java
similarity index 82%
copy from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java
copy to apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/AbstractSpring5Instrumentation.java
index 5753debefa..305355885a 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/AbstractSpring5Instrumentation.java
@@ -15,12 +15,12 @@
  *  limitations under the License.
  */
 
-package org.apache.skywalking.apm.plugin.spring.mvc.v5.define.reactive;
+package org.apache.skywalking.apm.plugin.spring.mvc.v6.define;
 
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
 
-public abstract class AbstractSpring5ReactiveInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
-    public static final String WITNESS_CLASSES = "org.springframework.web.reactive.result.method.InvocableHandlerMethod";
+public abstract class AbstractSpring5Instrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+    public static final String WITNESS_CLASSES = "org.springframework.web.servlet.resource.HttpResource";
 
     @Override
     protected final String[] witnessClasses() {
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/ControllerInstrumentation.java
similarity index 61%
copy from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java
copy to apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/ControllerInstrumentation.java
index 5753debefa..04c5d963b6 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/ControllerInstrumentation.java
@@ -15,15 +15,14 @@
  *  limitations under the License.
  */
 
-package org.apache.skywalking.apm.plugin.spring.mvc.v5.define.reactive;
+package org.apache.skywalking.apm.plugin.spring.mvc.v6.define;
 
-import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+public class ControllerInstrumentation extends AbstractControllerInstrumentation {
 
-public abstract class AbstractSpring5ReactiveInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
-    public static final String WITNESS_CLASSES = "org.springframework.web.reactive.result.method.InvocableHandlerMethod";
+    public static final String ENHANCE_ANNOTATION = "org.springframework.stereotype.Controller";
 
     @Override
-    protected final String[] witnessClasses() {
-        return new String[] {WITNESS_CLASSES};
+    protected String[] getEnhanceAnnotations() {
+        return new String[] {ENHANCE_ANNOTATION};
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/HandlerMethodInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/HandlerMethodInstrumentation.java
new file mode 100644
index 0000000000..81b43a53bf
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/HandlerMethodInstrumentation.java
@@ -0,0 +1,69 @@
+/*
+ * 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.skywalking.apm.plugin.spring.mvc.v6.define;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+import org.apache.skywalking.apm.agent.core.plugin.match.NameMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+
+/**
+ * {@link HandlerMethodInstrumentation} intercept the <code>getBean</code> method in the
+ * <code>org.springframework.web.method.HandlerMethod</code> class.
+ */
+public class HandlerMethodInstrumentation extends AbstractSpring5Instrumentation {
+
+    public static final String ENHANCE_METHOD = "getBean";
+    public static final String ENHANCE_CLASS = "org.springframework.web.method.HandlerMethod";
+
+    @Override
+    public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+        return new ConstructorInterceptPoint[0];
+    }
+
+    @Override
+    public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+        return new InstanceMethodsInterceptPoint[] {
+            new InstanceMethodsInterceptPoint() {
+                @Override
+                public ElementMatcher<MethodDescription> getMethodsMatcher() {
+                    return named(ENHANCE_METHOD);
+                }
+
+                @Override
+                public String getMethodsInterceptor() {
+                    return "org.apache.skywalking.apm.plugin.spring.mvc.v6.GetBeanInterceptor";
+                }
+
+                @Override
+                public boolean isOverrideArgs() {
+                    return false;
+                }
+            }
+        };
+    }
+
+    @Override
+    protected ClassMatch enhanceClass() {
+        return NameMatch.byName(ENHANCE_CLASS);
+    }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/RestControllerInstrumentation.java
similarity index 73%
copy from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentation.java
copy to apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/RestControllerInstrumentation.java
index 5db1b79980..27a416de09 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v4/define/RestControllerInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/RestControllerInstrumentation.java
@@ -16,25 +16,14 @@
  *
  */
 
-package org.apache.skywalking.apm.plugin.spring.mvc.v4.define;
+package org.apache.skywalking.apm.plugin.spring.mvc.v6.define;
 
 public class RestControllerInstrumentation extends AbstractControllerInstrumentation {
 
-    public static final String WITNESS_CLASSES_HIGH_VERSION = "org.springframework.http.HttpRange";
-
     public static final String ENHANCE_ANNOTATION = "org.springframework.web.bind.annotation.RestController";
 
     @Override
     protected String[] getEnhanceAnnotations() {
         return new String[] {ENHANCE_ANNOTATION};
     }
-
-    @Override
-    protected String[] witnessClasses() {
-        return new String[] {
-            WITHNESS_CLASSES,
-            "org.springframework.cache.interceptor.DefaultKeyGenerator",
-            WITNESS_CLASSES_HIGH_VERSION
-        };
-    }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/AbstractReactiveControllerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/AbstractReactiveControllerInstrumentation.java
new file mode 100644
index 0000000000..b7c06823ed
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/AbstractReactiveControllerInstrumentation.java
@@ -0,0 +1,120 @@
+/*
+ * 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.skywalking.apm.plugin.spring.mvc.v6.define.reactive;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.DeclaredInstanceMethodsInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassAnnotationMatch;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+import org.apache.skywalking.apm.plugin.spring.mvc.commons.Constants;
+import org.apache.skywalking.apm.plugin.spring.mvc.v6.define.ControllerInstrumentation;
+
+import static net.bytebuddy.matcher.ElementMatchers.any;
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static org.apache.skywalking.apm.agent.core.plugin.match.MethodInheritanceAnnotationMatcher.byMethodInheritanceAnnotationMatcher;
+
+/**
+ * {@link ControllerInstrumentation} enhance all constructor and method annotated with
+ * <code>org.springframework.web.bind.annotation.RequestMapping</code> that class has
+ * <code>org.springframework.stereotype.Controller</code> annotation.
+ *
+ * <code>ControllerConstructorInterceptor</code> set the controller base path to
+ * dynamic field before execute constructor.
+ *
+ * <code>org.apache.skywalking.apm.plugin.spring.mvc.v4.RequestMappingMethodInterceptor</code> get the request path
+ * from dynamic field first, if not found, <code>RequestMappingMethodInterceptor</code> generate request path  that
+ * combine the path value of current annotation on current method and the base path and set the new path to the dynamic
+ * filed
+ */
+public abstract class AbstractReactiveControllerInstrumentation extends AbstractSpring5ReactiveInstrumentation {
+    @Override
+    public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+        return new ConstructorInterceptPoint[] {
+            new ConstructorInterceptPoint() {
+                @Override
+                public ElementMatcher<MethodDescription> getConstructorMatcher() {
+                    return any();
+                }
+
+                @Override
+                public String getConstructorInterceptor() {
+                    return "org.apache.skywalking.apm.plugin.spring.mvc.v6.ControllerConstructorInterceptor";
+                }
+            }
+        };
+    }
+
+    @Override
+    public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+        return new InstanceMethodsInterceptPoint[] {
+            new DeclaredInstanceMethodsInterceptPoint() {
+                @Override
+                public ElementMatcher<MethodDescription> getMethodsMatcher() {
+                    return byMethodInheritanceAnnotationMatcher(
+                        named("org.springframework.web.bind.annotation.RequestMapping"));
+                }
+
+                @Override
+                public String getMethodsInterceptor() {
+                    return Constants.REQUEST_MAPPING_METHOD_INTERCEPTOR;
+                }
+
+                @Override
+                public boolean isOverrideArgs() {
+                    return false;
+                }
+            },
+            new DeclaredInstanceMethodsInterceptPoint() {
+                @Override
+                public ElementMatcher<MethodDescription> getMethodsMatcher() {
+                    return byMethodInheritanceAnnotationMatcher(
+                        named("org.springframework.web.bind.annotation.GetMapping"))
+                        .or(byMethodInheritanceAnnotationMatcher(
+                            named("org.springframework.web.bind.annotation.PostMapping")))
+                        .or(byMethodInheritanceAnnotationMatcher(
+                            named("org.springframework.web.bind.annotation.PutMapping")))
+                        .or(byMethodInheritanceAnnotationMatcher(
+                            named("org.springframework.web.bind.annotation.DeleteMapping")))
+                        .or(byMethodInheritanceAnnotationMatcher(
+                            named("org.springframework.web.bind.annotation.PatchMapping")));
+                }
+
+                @Override
+                public String getMethodsInterceptor() {
+                    return Constants.REST_MAPPING_METHOD_INTERCEPTOR;
+                }
+
+                @Override
+                public boolean isOverrideArgs() {
+                    return false;
+                }
+            }
+        };
+    }
+
+    @Override
+    protected ClassMatch enhanceClass() {
+        return ClassAnnotationMatch.byClassAnnotationMatch(getEnhanceAnnotations());
+    }
+
+    protected abstract String[] getEnhanceAnnotations();
+
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/AbstractSpring5ReactiveInstrumentation.java
similarity index 95%
copy from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java
copy to apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/AbstractSpring5ReactiveInstrumentation.java
index 5753debefa..2336f99682 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/AbstractSpring5ReactiveInstrumentation.java
@@ -15,7 +15,7 @@
  *  limitations under the License.
  */
 
-package org.apache.skywalking.apm.plugin.spring.mvc.v5.define.reactive;
+package org.apache.skywalking.apm.plugin.spring.mvc.v6.define.reactive;
 
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
 
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentationV2.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/AbstractSpring5ReactiveInstrumentationV2.java
similarity index 95%
copy from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentationV2.java
copy to apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/AbstractSpring5ReactiveInstrumentationV2.java
index 52adbb77f1..7582fbd9fd 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentationV2.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/AbstractSpring5ReactiveInstrumentationV2.java
@@ -15,7 +15,7 @@
  *  limitations under the License.
  */
 
-package org.apache.skywalking.apm.plugin.spring.mvc.v5.define.reactive;
+package org.apache.skywalking.apm.plugin.spring.mvc.v6.define.reactive;
 
 import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.v2.ClassInstanceMethodsEnhancePluginDefineV2;
 
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/InvocableHandlerMethodInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/InvocableHandlerMethodInstrumentation.java
new file mode 100644
index 0000000000..b2a54c30b0
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/InvocableHandlerMethodInstrumentation.java
@@ -0,0 +1,63 @@
+/*
+ *  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.skywalking.apm.plugin.spring.mvc.v6.define.reactive;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.v2.InstanceMethodsInterceptV2Point;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static org.apache.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType;
+import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+public class InvocableHandlerMethodInstrumentation extends AbstractSpring5ReactiveInstrumentationV2 {
+    @Override
+    protected ClassMatch enhanceClass() {
+        return byName("org.springframework.web.reactive.result.method.InvocableHandlerMethod");
+    }
+
+    @Override
+    public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+        return new ConstructorInterceptPoint[0];
+    }
+
+    @Override
+    public InstanceMethodsInterceptV2Point[] getInstanceMethodsInterceptV2Points() {
+        return new InstanceMethodsInterceptV2Point[] {
+            new InstanceMethodsInterceptV2Point() {
+                @Override
+                public ElementMatcher<MethodDescription> getMethodsMatcher() {
+                    return named("invoke").and(
+                        takesArgumentWithType(0, "org.springframework.web.server.ServerWebExchange"));
+                }
+
+                @Override
+                public String getMethodsInterceptorV2() {
+                    return "org.apache.skywalking.apm.plugin.spring.mvc.v6.InvokeInterceptor";
+                }
+
+                @Override
+                public boolean isOverrideArgs() {
+                    return false;
+                }
+            }
+        };
+    }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/ReactiveControllerInstrumentation.java
similarity index 62%
copy from apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java
copy to apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/ReactiveControllerInstrumentation.java
index 5753debefa..8e68eb1eea 100644
--- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v5/define/reactive/AbstractSpring5ReactiveInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-6.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/spring/mvc/v6/define/reactive/ReactiveControllerInstrumentation.java
@@ -15,15 +15,14 @@
  *  limitations under the License.
  */
 
... 4466 lines suppressed ...