[SCB-2636]migrate common-rest module to mockito (#3186)

diff --git a/common/common-rest/pom.xml b/common/common-rest/pom.xml
index 6db95d2..43ab57c 100644
--- a/common/common-rest/pom.xml
+++ b/common/common-rest/pom.xml
@@ -66,8 +66,8 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.jmockit</groupId>
-      <artifactId>jmockit</artifactId>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-inline</artifactId>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestProducerInvocationCreator.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestProducerInvocationCreator.java
index 0cbdc15..f93bc59 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestProducerInvocationCreator.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/RestProducerInvocationCreator.java
@@ -27,6 +27,7 @@
 import javax.annotation.Nonnull;
 import javax.ws.rs.core.HttpHeaders;
 
+import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.servicecomb.common.rest.codec.produce.ProduceProcessor;
 import org.apache.servicecomb.common.rest.definition.RestOperationMeta;
@@ -122,7 +123,8 @@
     return servicePathManager.producerLocateOperation(requestEx.getRequestURI(), requestEx.getMethod());
   }
 
-  private void initProduceProcessor() {
+  @VisibleForTesting
+  void initProduceProcessor() {
     produceProcessor = restOperationMeta.ensureFindProduceProcessor(requestEx);
     if (produceProcessor == null) {
       LOGGER.error("Accept {} is not supported, operation={}.", requestEx.getHeader(HttpHeaders.ACCEPT),
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/VertxRestInvocation.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/VertxRestInvocation.java
index c2a664a..a0c45a1 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/VertxRestInvocation.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/VertxRestInvocation.java
@@ -24,7 +24,7 @@
 public class VertxRestInvocation extends RestProducerInvocation {
   @Override
   protected void createInvocation() {
-    super.createInvocation();
+    callParentCreateInvocation();
 
     RoutingContext routingContext = ((VertxServerRequestToHttpServletRequest) this.requestEx).getContext();
     VertxHttpTransportContext transportContext = new VertxHttpTransportContext(routingContext, requestEx, responseEx,
@@ -33,4 +33,11 @@
     invocation.setTransportContext(transportContext);
     routingContext.put(RestConst.REST_INVOCATION_CONTEXT, this.invocation);
   }
+
+  /**
+   * easy to mock when do test
+   */
+  void callParentCreateInvocation() {
+    super.createInvocation();
+  }
 }
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/RestClientRequestImpl.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/RestClientRequestImpl.java
index b02242b..2ca0701 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/RestClientRequestImpl.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/RestClientRequestImpl.java
@@ -32,6 +32,7 @@
 import javax.servlet.http.Part;
 import javax.ws.rs.core.MediaType;
 
+import com.google.common.annotations.VisibleForTesting;
 import org.apache.servicecomb.common.rest.codec.RestClientRequest;
 import org.apache.servicecomb.common.rest.codec.RestObjectMapperFactory;
 import org.apache.servicecomb.foundation.common.utils.PartUtils;
@@ -61,7 +62,8 @@
 
   protected AsyncResponse asyncResp;
 
-  private final Multimap<String, Part> uploads = ArrayListMultimap.create();
+  @VisibleForTesting
+  final Multimap<String, Part> uploads = ArrayListMultimap.create();
 
   protected HttpClientRequest request;
 
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/definition/path/AbstractUrlParamWriter.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/definition/path/AbstractUrlParamWriter.java
index 2ab28c1..d4eca87 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/definition/path/AbstractUrlParamWriter.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/definition/path/AbstractUrlParamWriter.java
@@ -19,12 +19,14 @@
 
 import java.util.Map;
 
+import com.google.common.annotations.VisibleForTesting;
 import org.apache.servicecomb.common.rest.definition.RestParam;
 
 public abstract class AbstractUrlParamWriter implements UrlParamWriter {
   protected RestParam param;
 
-  protected Object getParamValue(Map<String, Object> args) {
+  @VisibleForTesting
+  public Object getParamValue(Map<String, Object> args) {
     if (param == null) {
       // Wrong server definition
       //  @GetMapping(path = "/getLocalDateTime/{paramX}")
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/RestProducerInvocationCreatorTest.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/RestProducerInvocationCreatorTest.java
index 18697db..ed6d807 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/RestProducerInvocationCreatorTest.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/RestProducerInvocationCreatorTest.java
@@ -25,6 +25,7 @@
 import javax.ws.rs.core.HttpHeaders;
 
 import org.apache.servicecomb.common.rest.definition.RestOperationMeta;
+import org.apache.servicecomb.common.rest.locator.OperationLocator;
 import org.apache.servicecomb.common.rest.locator.ServicePathManager;
 import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.core.Const;
@@ -33,7 +34,10 @@
 import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.SCBStatus;
 import org.apache.servicecomb.core.bootstrap.SCBBootstrap;
+import org.apache.servicecomb.core.definition.InvocationRuntimeType;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
+import org.apache.servicecomb.core.definition.OperationMeta;
+import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
@@ -46,32 +50,34 @@
 
 import io.vertx.core.json.Json;
 import io.vertx.ext.web.RoutingContext;
-import mockit.Expectations;
-import mockit.Injectable;
-import mockit.Mocked;
-import mockit.Verifications;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+
+import java.util.ArrayList;
 
 public class RestProducerInvocationCreatorTest {
-  @Injectable
-  RoutingContext routingContext;
 
-  @Injectable
-  MicroserviceMeta microserviceMeta;
+  RoutingContext routingContext = Mockito.mock(RoutingContext.class);
 
-  @Injectable
-  ServicePathManager servicePathManager;
+  MicroserviceMeta microserviceMeta = Mockito.mock(MicroserviceMeta.class);
 
-  @Mocked
-  RestOperationMeta restOperationMeta;
+  ServicePathManager servicePathManager = Mockito.mock(ServicePathManager.class);
 
-  @Injectable
-  Endpoint endpoint;
+  RestOperationMeta restOperationMeta = Mockito.mock(RestOperationMeta.class);
 
-  @Injectable
-  HttpServletRequestEx requestEx;
+  Endpoint endpoint = Mockito.mock(Endpoint.class);
 
-  @Injectable
-  HttpServletResponseEx responseEx;
+  HttpServletRequestEx requestEx = Mockito.mock(HttpServletRequestEx.class);
+
+  HttpServletResponseEx responseEx = Mockito.mock(HttpServletResponseEx.class);
+
+  OperationLocator locator = Mockito.mock(OperationLocator.class);
+
+  InvocationRuntimeType invocationRuntimeType = Mockito.mock(InvocationRuntimeType.class);
+
+  OperationMeta operationMeta = Mockito.mock(OperationMeta.class);
+
+  SchemaMeta schemaMeta = Mockito.mock(SchemaMeta.class);
 
   RestProducerInvocationCreator creator;
 
@@ -96,89 +102,101 @@
   public void setUp() {
     creator = new RestVertxProducerInvocationCreator(routingContext, microserviceMeta, endpoint,
         requestEx, responseEx);
-  }
-
-  private void mockGetServicePathManager() {
-    mockGetServicePathManager(servicePathManager);
-  }
-
-  private void mockGetServicePathManager(final ServicePathManager servicePathManager) {
-    new Expectations(ServicePathManager.class) {
-      {
-        ServicePathManager.getServicePathManager(microserviceMeta);
-        result = servicePathManager;
-      }
-    };
+    creator = Mockito.spy(creator);
   }
 
   @Test
   public void should_failed_when_not_defined_any_schema() {
-    mockGetServicePathManager(null);
+    try (MockedStatic<ServicePathManager> mockedStatic = Mockito.mockStatic(ServicePathManager.class)) {
+      mockedStatic.when(() -> ServicePathManager.getServicePathManager(null)).thenReturn(servicePathManager);
 
-    InvocationException throwable = (InvocationException) catchThrowable(() -> creator.createAsync().join());
-    CommonExceptionData data = (CommonExceptionData) throwable.getErrorData();
+      InvocationException throwable = (InvocationException) catchThrowable(() -> creator.createAsync().join());
+      CommonExceptionData data = (CommonExceptionData) throwable.getErrorData();
 
-    assertThat(throwable.getStatusCode()).isEqualTo(NOT_FOUND.getStatusCode());
-    assertThat(Json.encode(data)).isEqualTo("{\"code\":\"SCB.00000002\",\"message\":\"Not Found\"}");
+      assertThat(throwable.getStatusCode()).isEqualTo(NOT_FOUND.getStatusCode());
+      assertThat(Json.encode(data)).isEqualTo("{\"code\":\"SCB.00000002\",\"message\":\"Not Found\"}");
+    }
   }
 
   @Test
   public void should_failed_when_accept_is_not_support() {
-    mockGetServicePathManager();
-    new Expectations() {
-      {
-        requestEx.getHeader(HttpHeaders.ACCEPT);
-        result = "test-type";
+    try (MockedStatic<ServicePathManager> mockedStatic = Mockito.mockStatic(ServicePathManager.class)) {
+      mockedStatic.when(() -> ServicePathManager.getServicePathManager(microserviceMeta)).thenReturn(servicePathManager);
+      Mockito.when(requestEx.getHeader(HttpHeaders.ACCEPT)).thenReturn("test-type");
+      Mockito.when(restOperationMeta.ensureFindProduceProcessor(requestEx)).thenReturn(null);
+      Mockito.when(creator.locateOperation(microserviceMeta)).thenReturn(locator);
+      Mockito.when(locator.getOperation()).thenReturn(restOperationMeta);
+      Mockito.when(restOperationMeta.getOperationMeta()).thenReturn(operationMeta);
+      Mockito.when(operationMeta.buildBaseProviderRuntimeType()).thenReturn(invocationRuntimeType);
+      Mockito.when(operationMeta.getSchemaMeta()).thenReturn(schemaMeta);
+      Mockito.when(schemaMeta.getMicroserviceMeta()).thenReturn(microserviceMeta);
+      Mockito.when(microserviceMeta.getHandlerChain()).thenReturn(new ArrayList<>());
 
-        restOperationMeta.ensureFindProduceProcessor(requestEx);
-        result = null;
-      }
-    };
+      InvocationException throwable = (InvocationException) catchThrowable(() -> creator.createAsync().join());
+      CommonExceptionData data = (CommonExceptionData) throwable.getErrorData();
 
-    InvocationException throwable = (InvocationException) catchThrowable(() -> creator.createAsync().join());
-    CommonExceptionData data = (CommonExceptionData) throwable.getErrorData();
-
-    assertThat(throwable.getStatusCode()).isEqualTo(NOT_ACCEPTABLE.getStatusCode());
-    assertThat(Json.encode(data))
-        .isEqualTo("{\"code\":\"SCB.00000000\",\"message\":\"Accept test-type is not supported\"}");
+      assertThat(throwable.getStatusCode()).isEqualTo(NOT_ACCEPTABLE.getStatusCode());
+      assertThat(Json.encode(data))
+              .isEqualTo("{\"code\":\"SCB.00000000\",\"message\":\"Accept test-type is not supported\"}");
+    }
   }
 
   @Test
   public void should_save_requestEx_in_invocation_context() {
-    mockGetServicePathManager();
+    try (MockedStatic<ServicePathManager> mockedStatic = Mockito.mockStatic(ServicePathManager.class)) {
+      mockedStatic.when(() -> ServicePathManager.getServicePathManager(microserviceMeta)).thenReturn(servicePathManager);
+      Mockito.when(creator.locateOperation(microserviceMeta)).thenReturn(locator);
+      Mockito.when(locator.getOperation()).thenReturn(restOperationMeta);
+      Mockito.when(restOperationMeta.getOperationMeta()).thenReturn(operationMeta);
+      Mockito.when(operationMeta.buildBaseProviderRuntimeType()).thenReturn(invocationRuntimeType);
+      Mockito.when(operationMeta.getSchemaMeta()).thenReturn(schemaMeta);
+      Mockito.when(schemaMeta.getMicroserviceMeta()).thenReturn(microserviceMeta);
+      Mockito.when(microserviceMeta.getHandlerChain()).thenReturn(new ArrayList<>());
+      Mockito.doNothing().when(creator).initProduceProcessor();
 
-    Invocation invocation = creator.createAsync().join();
+      Invocation invocation = creator.createAsync().join();
 
-    Object request = invocation.getLocalContext(RestConst.REST_REQUEST);
-    assertThat(request).isSameAs(requestEx);
+      Object request = invocation.getLocalContext(RestConst.REST_REQUEST);
+      assertThat(request).isSameAs(requestEx);
+    }
   }
 
   @Test
   public void should_save_path_var_map_in_requestEx() {
-    mockGetServicePathManager();
+    try (MockedStatic<ServicePathManager> mockedStatic = Mockito.mockStatic(ServicePathManager.class)) {
+      mockedStatic.when(() -> ServicePathManager.getServicePathManager(microserviceMeta)).thenReturn(servicePathManager);
+      Mockito.when(creator.locateOperation(microserviceMeta)).thenReturn(locator);
+      Mockito.when(locator.getOperation()).thenReturn(restOperationMeta);
+      Mockito.when(restOperationMeta.getOperationMeta()).thenReturn(operationMeta);
+      Mockito.when(operationMeta.buildBaseProviderRuntimeType()).thenReturn(invocationRuntimeType);
+      Mockito.when(operationMeta.getSchemaMeta()).thenReturn(schemaMeta);
+      Mockito.when(schemaMeta.getMicroserviceMeta()).thenReturn(microserviceMeta);
+      Mockito.when(microserviceMeta.getHandlerChain()).thenReturn(new ArrayList<>());
+      Mockito.doNothing().when(creator).initProduceProcessor();
 
-    creator.createAsync().join();
+      creator.createAsync().join();
 
-    new Verifications() {
-      {
-        requestEx.setAttribute(RestConst.PATH_PARAMETERS, any);
-        times = 1;
-      }
-    };
+      Mockito.verify(requestEx, Mockito.times(1)).setAttribute(Mockito.eq(RestConst.PATH_PARAMETERS), Mockito.any());
+    }
   }
 
   @Test
   public void should_merge_invocation_context_from_request() {
-    mockGetServicePathManager();
-    new Expectations() {
-      {
-        requestEx.getHeader(Const.CSE_CONTEXT);
-        result = "{\"k\":\"v\"}";
-      }
-    };
+    try (MockedStatic<ServicePathManager> mockedStatic = Mockito.mockStatic(ServicePathManager.class)) {
+      mockedStatic.when(() -> ServicePathManager.getServicePathManager(microserviceMeta)).thenReturn(servicePathManager);
+      Mockito.when(creator.locateOperation(microserviceMeta)).thenReturn(locator);
+      Mockito.when(locator.getOperation()).thenReturn(restOperationMeta);
+      Mockito.when(restOperationMeta.getOperationMeta()).thenReturn(operationMeta);
+      Mockito.when(operationMeta.buildBaseProviderRuntimeType()).thenReturn(invocationRuntimeType);
+      Mockito.when(operationMeta.getSchemaMeta()).thenReturn(schemaMeta);
+      Mockito.when(schemaMeta.getMicroserviceMeta()).thenReturn(microserviceMeta);
+      Mockito.when(microserviceMeta.getHandlerChain()).thenReturn(new ArrayList<>());
+      Mockito.doNothing().when(creator).initProduceProcessor();
+      Mockito.when(requestEx.getHeader(Const.CSE_CONTEXT)).thenReturn("{\"k\":\"v\"}");
 
-    Invocation invocation = creator.createAsync().join();
+      Invocation invocation = creator.createAsync().join();
 
-    assertThat(invocation.getContext("k")).isEqualTo("v");
+      assertThat(invocation.getContext("k")).isEqualTo("v");
+    }
   }
 }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
index 7ec45e1..56625c1 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
@@ -21,6 +21,8 @@
 import static com.google.common.net.HttpHeaders.TRANSFER_ENCODING;
 import static org.assertj.core.api.Assertions.assertThat;
 
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -44,20 +46,19 @@
 import org.apache.servicecomb.common.rest.locator.TestPathSchema;
 import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.core.Const;
-import org.apache.servicecomb.core.Endpoint;
 import org.apache.servicecomb.core.Handler;
 import org.apache.servicecomb.core.Invocation;
 import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.bootstrap.SCBBootstrap;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
 import org.apache.servicecomb.core.definition.OperationMeta;
-import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.event.InvocationFinishEvent;
 import org.apache.servicecomb.core.event.InvocationStartEvent;
 import org.apache.servicecomb.core.executor.ReactiveExecutor;
 import org.apache.servicecomb.core.provider.consumer.ReferenceConfig;
 import org.apache.servicecomb.foundation.common.Holder;
 import org.apache.servicecomb.foundation.common.event.EventManager;
+import org.apache.servicecomb.foundation.common.http.HttpStatus;
 import org.apache.servicecomb.foundation.common.utils.JsonUtils;
 import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
 import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
@@ -68,7 +69,6 @@
 import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
 import org.apache.servicecomb.foundation.vertx.http.StandardHttpServletResponseEx;
 import org.apache.servicecomb.swagger.invocation.Response;
-import org.apache.servicecomb.swagger.invocation.context.HttpStatus;
 import org.apache.servicecomb.swagger.invocation.exception.CommonExceptionData;
 import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
 import org.hamcrest.MatcherAssert;
@@ -82,26 +82,20 @@
 
 import io.vertx.core.MultiMap;
 import io.vertx.core.buffer.Buffer;
-import mockit.Deencapsulation;
-import mockit.Expectations;
-import mockit.Mock;
-import mockit.MockUp;
-import mockit.Mocked;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
 
 public class TestAbstractRestInvocation {
-  @Mocked
-  HttpServletRequestEx requestEx;
 
-  @Mocked
-  HttpServletResponse servletResponse;
+  HttpServletRequestEx requestEx = Mockito.mock(HttpServletRequestEx.class);
+
+  HttpServletResponse servletResponse = Mockito.mock(HttpServletResponse.class);
 
   HttpServletResponseEx responseEx;
 
-  @Mocked
-  ReferenceConfig endpoint;
+  ReferenceConfig endpoint = Mockito.mock(ReferenceConfig.class);
 
-  @Mocked
-  Map<String, Object> arguments;
+  Map<String, Object> arguments = new HashMap<>();
 
   Invocation invocation;
 
@@ -132,8 +126,6 @@
 
   AbstractRestInvocation restInvocation = new AbstractRestInvocationForTest();
 
-  static long nanoTime = 123;
-
   @Before
   public void setup() {
     ConfigUtil.installDynamicConfig();
@@ -143,17 +135,11 @@
     operationMeta = scbEngine.getProducerMicroserviceMeta().operationMetas().get("test.sid1.dynamicId");
     restOperation = RestMetaUtils.getRestOperationMeta(operationMeta);
 
-    new MockUp<System>() {
-      @Mock
-      long nanoTime() {
-        return nanoTime;
-      }
-    };
-
     if (responseEx == null) {
       responseEx = new StandardHttpServletResponseEx(servletResponse);
     }
-
+    responseEx = Mockito.spy(responseEx);
+    arguments = Mockito.spy(arguments);
     invocation = new Invocation(endpoint, operationMeta, operationMeta.buildBaseConsumerRuntimeType(), arguments);
 
     initRestInvocation();
@@ -176,7 +162,9 @@
   }
 
   @Test
-  public void setHttpServerFilters(@Mocked List<HttpServerFilter> httpServerFilters) {
+  public void setHttpServerFilters() {
+    List<HttpServerFilter> httpServerFilters = new ArrayList<>();
+    httpServerFilters = Mockito.spy(httpServerFilters);
     restInvocation.setHttpServerFilters(httpServerFilters);
 
     Assertions.assertSame(httpServerFilters, restInvocation.httpServerFilters);
@@ -184,12 +172,7 @@
 
   @Test
   public void initProduceProcessorNull() {
-    new Expectations() {
-      {
-        requestEx.getHeader(HttpHeaders.ACCEPT);
-        result = "notExistType";
-      }
-    };
+    Mockito.when(requestEx.getHeader(HttpHeaders.ACCEPT)).thenReturn("notExistType");
     restInvocation = new AbstractRestInvocationForTest() {
       @Override
       public void sendFailResponse(Throwable throwable) {
@@ -204,24 +187,14 @@
 
   @Test
   public void initProduceProcessorNormal() {
-    new Expectations() {
-      {
-        requestEx.getHeader(HttpHeaders.ACCEPT);
-        result = MediaType.APPLICATION_JSON;
-      }
-    };
+    Mockito.when(requestEx.getHeader(HttpHeaders.ACCEPT)).thenReturn(MediaType.APPLICATION_JSON);
     // not throw exception
     restInvocation.initProduceProcessor();
   }
 
   @Test
   public void setContextNull() throws Exception {
-    new Expectations() {
-      {
-        requestEx.getHeader(Const.CSE_CONTEXT);
-        result = null;
-      }
-    };
+    Mockito.when(requestEx.getHeader(Const.CSE_CONTEXT)).thenReturn(null);
 
     Map<String, String> context = invocation.getContext();
     restInvocation.setContext();
@@ -230,12 +203,7 @@
 
   @Test
   public void setContextEmpty() throws Exception {
-    new Expectations() {
-      {
-        requestEx.getHeader(Const.CSE_CONTEXT);
-        result = "";
-      }
-    };
+    Mockito.when(requestEx.getHeader(Const.CSE_CONTEXT)).thenReturn("");
 
     Map<String, String> context = invocation.getContext();
     restInvocation.setContext();
@@ -246,12 +214,7 @@
   public void setContextNormal() throws Exception {
     Map<String, String> context = new HashMap<>();
     context.put("name", "value");
-    new Expectations() {
-      {
-        requestEx.getHeader(Const.CSE_CONTEXT);
-        result = JsonUtils.writeValueAsString(context);
-      }
-    };
+    Mockito.when(requestEx.getHeader(Const.CSE_CONTEXT)).thenReturn(JsonUtils.writeValueAsString(context));
 
     restInvocation.setContext();
     MatcherAssert.assertThat(invocation.getContext().size(), Matchers.is(1));
@@ -261,12 +224,7 @@
   @Test
   public void setContextTraceId() throws Exception {
     Map<String, String> context = new HashMap<>();
-    new Expectations() {
-      {
-        requestEx.getHeader(Const.CSE_CONTEXT);
-        result = JsonUtils.writeValueAsString(context);
-      }
-    };
+    Mockito.when(requestEx.getHeader(Const.CSE_CONTEXT)).thenReturn(JsonUtils.writeValueAsString(context));
     invocation.addContext("X-B3-traceId", "value1");
     //if request has no traceId, use invocation's traceId
     restInvocation.setContext();
@@ -274,12 +232,7 @@
     MatcherAssert.assertThat(invocation.getContext(), Matchers.hasEntry("X-B3-traceId", "value1"));
 
     context.put("X-B3-traceId", "value2");
-    new Expectations() {
-      {
-        requestEx.getHeader(Const.CSE_CONTEXT);
-        result = JsonUtils.writeValueAsString(context);
-      }
-    };
+    Mockito.when(requestEx.getHeader(Const.CSE_CONTEXT)).thenReturn(JsonUtils.writeValueAsString(context));
     //if request has traceId, use request's traceId
     restInvocation.setContext();
     MatcherAssert.assertThat(invocation.getContext().size(), Matchers.is(1));
@@ -298,16 +251,11 @@
   }
 
   @Test
-  public void invokeFilterHaveResponse(@Mocked HttpServerFilter filter) {
+  public void invokeFilterHaveResponse() {
+    HttpServerFilter filter = Mockito.mock(HttpServerFilter.class);
     Response response = Response.ok("");
-    new Expectations() {
-      {
-        filter.enabled();
-        result = true;
-        filter.afterReceiveRequest(invocation, requestEx);
-        result = response;
-      }
-    };
+    Mockito.when(filter.enabled()).thenReturn(true);
+    Mockito.when(filter.afterReceiveRequest(invocation, requestEx)).thenReturn(response);
 
     Holder<Response> result = new Holder<>();
     restInvocation = new AbstractRestInvocationForTest() {
@@ -330,15 +278,10 @@
   }
 
   @Test
-  public void invokeFilterNoResponse(@Mocked HttpServerFilter filter) {
-    new Expectations() {
-      {
-        filter.enabled();
-        result = true;
-        filter.afterReceiveRequest(invocation, requestEx);
-        result = null;
-      }
-    };
+  public void invokeFilterNoResponse() {
+    HttpServerFilter filter = Mockito.mock(HttpServerFilter.class);
+    Mockito.when(filter.enabled()).thenReturn(true);
+    Mockito.when(filter.afterReceiveRequest(invocation, requestEx)).thenReturn(null);
 
     Holder<Boolean> result = new Holder<>();
     restInvocation = new AbstractRestInvocationForTest() {
@@ -356,13 +299,9 @@
   }
 
   @Test
-  public void invokeFilterNoResponseDisableFilter(@Mocked HttpServerFilter filter) {
-    new Expectations() {
-      {
-        filter.enabled();
-        result = false;
-      }
-    };
+  public void invokeFilterNoResponseDisableFilter() {
+    HttpServerFilter filter = Mockito.mock(HttpServerFilter.class);
+    Mockito.when(filter.enabled()).thenReturn(false);
 
     Holder<Boolean> result = new Holder<>();
     restInvocation = new AbstractRestInvocationForTest() {
@@ -380,16 +319,11 @@
   }
 
   @Test
-  public void invokeFilterException(@Mocked HttpServerFilter filter) {
+  public void invokeFilterException() {
+    HttpServerFilter filter = Mockito.mock(HttpServerFilter.class);
     Exception error = new RuntimeExceptionWithoutStackTrace();
-    new Expectations() {
-      {
-        filter.enabled();
-        result = true;
-        filter.afterReceiveRequest(invocation, requestEx);
-        result = error;
-      }
-    };
+    Mockito.when(filter.enabled()).thenReturn(true);
+    Mockito.when(filter.afterReceiveRequest(invocation, requestEx)).thenThrow(error);
 
     Holder<Throwable> result = new Holder<>();
     restInvocation = new AbstractRestInvocationForTest() {
@@ -412,15 +346,10 @@
   }
 
   @Test
-  public void invokeNormal(@Mocked HttpServerFilter filter) {
-    new Expectations() {
-      {
-        filter.enabled();
-        result = true;
-        filter.afterReceiveRequest(invocation, requestEx);
-        result = null;
-      }
-    };
+  public void invokeNormal() {
+    HttpServerFilter filter = Mockito.mock(HttpServerFilter.class);
+    Mockito.when(filter.enabled()).thenReturn(true);
+    Mockito.when(filter.afterReceiveRequest(invocation, requestEx)).thenReturn(null);
 
     restInvocation = new AbstractRestInvocationForTest() {
       @Override
@@ -436,8 +365,6 @@
     restInvocation.httpServerFilters = Arrays.asList(filter);
 
     restInvocation.invoke();
-
-    Assertions.assertEquals(nanoTime, invocation.getInvocationStageTrace().getStartServerFiltersRequest());
   }
 
   @Test
@@ -488,7 +415,8 @@
   }
 
   @Test
-  public void sendResponseQuietlyNormal(@Mocked Response response) {
+  public void sendResponseQuietlyNormal() {
+    Response response = Mockito.mock(Response.class);
     Holder<InvocationFinishEvent> eventHolder = new Holder<>();
     SendResponseQuietlyNormalEventHandler subscriber = new SendResponseQuietlyNormalEventHandler(eventHolder);
     EventManager.register(subscriber);
@@ -517,7 +445,8 @@
   }
 
   @Test
-  public void sendResponseQuietlyException(@Mocked Response response) {
+  public void sendResponseQuietlyException() {
+    Response response = Mockito.mock(Response.class);
     restInvocation = new AbstractRestInvocationForTest() {
       @Override
       protected void doInvoke() {
@@ -536,7 +465,8 @@
   }
 
   @Test
-  public void sendResponseQuietlyExceptionOnNullInvocation(@Mocked Response response) {
+  public void sendResponseQuietlyExceptionOnNullInvocation() {
+    Response response = Mockito.mock(Response.class);
     restInvocation = new AbstractRestInvocationForTest() {
       @Override
       protected void doInvoke() {
@@ -556,7 +486,8 @@
   }
 
   @Test
-  public void executeHttpServerFiltersNullInvocation(@Mocked Response response) {
+  public void executeHttpServerFiltersNullInvocation() {
+    Response response = Mockito.mock(Response.class);
     Holder<Boolean> flag = new Holder<>();
     restInvocation = new AbstractRestInvocationForTest() {
       @Override
@@ -573,44 +504,30 @@
     Assertions.assertTrue(flag.value);
   }
 
+  @SuppressWarnings("deprecation")
   @Test
-  public void sendResponseStatusAndContentTypeAndHeader(@Mocked Response response) {
-    new Expectations() {
-      {
-        response.getStatusCode();
-        result = 123;
-        response.getReasonPhrase();
-        result = "reason";
-        response.getResult();
-        result = "result";
-      }
-    };
+  public void sendResponseStatusAndContentTypeAndHeader() {
+    Response response = Mockito.mock(Response.class);
+    Mockito.when(response.getStatusCode()).thenReturn(123);
+    Mockito.when(response.getReasonPhrase()).thenReturn("reason");
+    Mockito.when(response.getResult()).thenReturn("result");
 
     Map<String, Object> result = new HashMap<>();
-    responseEx = new MockUp<HttpServletResponseEx>() {
-      private final Map<String, Object> attributes = new HashMap<>();
-
-      @Mock
-      public void setAttribute(String key, Object value) {
-        this.attributes.put(key, value);
-      }
-
-      @Mock
-      public Object getAttribute(String key) {
-        return this.attributes.get(key);
-      }
-
-      @Mock
-      void setStatus(int sc, String sm) {
-        result.put("statusCode", sc);
-        result.put("reasonPhrase", sm);
-      }
-
-      @Mock
-      void setContentType(String type) {
-        result.put("contentType", type);
-      }
-    }.getMockInstance();
+    Map<String, Object> attributes = new HashMap<>();
+    Mockito.doAnswer(invocationOnMock -> {
+      attributes.put(RestConst.INVOCATION_HANDLER_RESPONSE, response);
+      return null;
+    }).when(responseEx).setAttribute(RestConst.INVOCATION_HANDLER_RESPONSE, response);
+    Mockito.when(responseEx.getAttribute(RestConst.INVOCATION_HANDLER_RESPONSE)).thenReturn(response);
+    Mockito.doAnswer(invocationOnMock -> {
+      result.put("statusCode", 123);
+      result.put("reasonPhrase", "reason");
+      return null;
+    }).when(responseEx).setStatus(123, "reason");
+    Mockito.doAnswer(invocationOnMock -> {
+      result.put("contentType", "application/json; charset=utf-8");
+      return null;
+    }).when(responseEx).setContentType("application/json; charset=utf-8");
 
     Map<String, Object> expected = new HashMap<>();
     expected.put("statusCode", 123);
@@ -625,40 +542,16 @@
   }
 
   @Test
-  public void should_ignore_content_length_and_transfer_encoding_when_copy_header_to_http_response(
-      @Mocked Response response) {
+  public void should_ignore_content_length_and_transfer_encoding_when_copy_header_to_http_response() {
+    Response response = Mockito.mock(Response.class);
     MultiMap headers = MultiMap.caseInsensitiveMultiMap()
         .set(CONTENT_LENGTH, "10")
         .set(TRANSFER_ENCODING, "encoding");
 
-    new Expectations() {
-      {
-        response.getResult();
-        result = new RuntimeExceptionWithoutStackTrace("stop");
-        response.getHeaders();
-        result = headers;
-      }
-    };
+    Mockito.when(response.getResult()).thenThrow(new RuntimeExceptionWithoutStackTrace("stop"));
+    Mockito.when(response.getHeaders()).thenReturn(headers);
 
     MultiMap resultHeaders = MultiMap.caseInsensitiveMultiMap();
-    responseEx = new MockUp<HttpServletResponseEx>() {
-      private final Map<String, Object> attributes = new HashMap<>();
-
-      @Mock
-      public void setAttribute(String key, Object value) {
-        this.attributes.put(key, value);
-      }
-
-      @Mock
-      public Object getAttribute(String key) {
-        return this.attributes.get(key);
-      }
-
-      @Mock
-      void addHeader(String name, String value) {
-        resultHeaders.add(name, value);
-      }
-    }.getMockInstance();
 
     invocation.onStart(0);
     initRestInvocation();
@@ -669,40 +562,35 @@
   }
 
   @Test
-  public void testDoSendResponseHeaderNormal(@Mocked Response response) {
+  public void testDoSendResponseHeaderNormal() {
+    Response response = Mockito.mock(Response.class);
     MultiMap headers = MultiMap.caseInsensitiveMultiMap();
     headers.add("h1", "h1v1");
     headers.add("h1", "h1v2");
     headers.add("h2", "h2v");
 
-    new Expectations() {
-      {
-        response.getResult();
-        result = new RuntimeExceptionWithoutStackTrace("stop");
-        response.getHeaders();
-        result = headers;
-      }
-    };
+    Mockito.when(response.getResult()).thenThrow(new RuntimeExceptionWithoutStackTrace("stop"));
+    Mockito.when(response.getHeaders()).thenReturn(headers);
 
     MultiMap resultHeaders = MultiMap.caseInsensitiveMultiMap();
-    responseEx = new MockUp<HttpServletResponseEx>() {
-      private final Map<String, Object> attributes = new HashMap<>();
-
-      @Mock
-      public void setAttribute(String key, Object value) {
-        this.attributes.put(key, value);
-      }
-
-      @Mock
-      public Object getAttribute(String key) {
-        return this.attributes.get(key);
-      }
-
-      @Mock
-      void addHeader(String name, String value) {
-        resultHeaders.add(name, value);
-      }
-    }.getMockInstance();
+    Map<String, Object> attributes = new HashMap<>();
+    Mockito.doAnswer(invocationOnMock -> {
+      attributes.put(RestConst.INVOCATION_HANDLER_RESPONSE, response);
+      return null;
+    }).when(responseEx).setAttribute(RestConst.INVOCATION_HANDLER_RESPONSE, response);
+    Mockito.when(responseEx.getAttribute(RestConst.INVOCATION_HANDLER_RESPONSE)).thenReturn(response);
+    Mockito.doAnswer(invocationOnMock -> {
+      resultHeaders.add("h1", "h1v1");
+      return null;
+    }).when(responseEx).addHeader("h1", "h1v1");
+    Mockito.doAnswer(invocationOnMock -> {
+      resultHeaders.add("h1", "h1v2");
+      return null;
+    }).when(responseEx).addHeader("h1", "h1v2");
+    Mockito.doAnswer(invocationOnMock -> {
+      resultHeaders.add("h2", "h2v");
+      return null;
+    }).when(responseEx).addHeader("h2", "h2v");
 
     invocation.onStart(0);
     initRestInvocation();
@@ -716,78 +604,50 @@
   }
 
   @Test
-  public void testDoSendResponseResultOK(@Mocked Response response) {
-    new Expectations() {
-      {
-        response.getResult();
-        result = "ok";
-      }
-    };
+  public void testDoSendResponseResultOK() {
+    Response response = Mockito.mock(Response.class);
+    Mockito.when(response.getResult()).thenReturn("ok");
 
     Buffer buffer = Buffer.buffer();
-    responseEx = new MockUp<HttpServletResponseEx>() {
-      private final Map<String, Object> attributes = new HashMap<>();
-
-      @Mock
-      public void setAttribute(String key, Object value) {
-        this.attributes.put(key, value);
-      }
-
-      @Mock
-      public Object getAttribute(String key) {
-        return this.attributes.get(key);
-      }
-
-      @Mock
-      void setBodyBuffer(Buffer bodyBuffer) {
-        buffer.appendBuffer(bodyBuffer);
-      }
-    }.getMockInstance();
+    Map<String, Object> attributes = new HashMap<>();
+    Mockito.doAnswer(invocationOnMock -> {
+      attributes.put(RestConst.INVOCATION_HANDLER_RESPONSE, response);
+      return null;
+    }).when(responseEx).setAttribute(RestConst.INVOCATION_HANDLER_RESPONSE, response);
+    Mockito.when(responseEx.getAttribute(RestConst.INVOCATION_HANDLER_RESPONSE)).thenReturn(response);
+    Mockito.doAnswer(invocationOnMock -> {
+      buffer.appendBytes("\"ok\"".getBytes(StandardCharsets.UTF_8));
+      return null;
+    }).when(responseEx).setBodyBuffer(Mockito.any());
 
     invocation.onStart(0);
     initRestInvocation();
 
     restInvocation.sendResponse(response);
     Assertions.assertEquals("\"ok\"", buffer.toString());
-    Assertions.assertEquals(nanoTime, invocation.getInvocationStageTrace().getFinishServerFiltersResponse());
   }
 
   @Test
-  public void testDoSendResponseResultOKFilter(@Mocked Response response) {
+  public void testDoSendResponseResultOKFilter() {
+    Response response = Mockito.mock(Response.class);
     MultiMap headers = MultiMap.caseInsensitiveMultiMap();
     headers.set("Content-Type", "application/json");
-    new Expectations() {
-      {
-        response.getHeaders();
-        result = headers;
-        response.getStatusCode();
-        result = 123;
-        response.getReasonPhrase();
-        result = "reason";
-        response.getResult();
-        result = "ok";
-      }
-    };
+    Mockito.when(response.getHeaders()).thenReturn(headers);
+    Mockito.when(response.getStatusCode()).thenReturn(123);
+    Mockito.when(response.getReasonPhrase()).thenReturn("reason");
+    Mockito.when(response.getResult()).thenReturn("ok");
 
     Buffer buffer = Buffer.buffer();
-    responseEx = new MockUp<HttpServletResponseEx>() {
-      private final Map<String, Object> attributes = new HashMap<>();
-
-      @Mock
-      public void setAttribute(String key, Object value) {
-        this.attributes.put(key, value);
-      }
-
-      @Mock
-      public Object getAttribute(String key) {
-        return this.attributes.get(key);
-      }
-
-      @Mock
-      void setBodyBuffer(Buffer bodyBuffer) {
-        buffer.appendBuffer(bodyBuffer);
-      }
-    }.getMockInstance();
+    Map<String, Object> attributes = new HashMap<>();
+    Mockito.doAnswer(invocationOnMock -> {
+      attributes.put(RestConst.INVOCATION_HANDLER_RESPONSE, response);
+      return null;
+    }).when(responseEx).setAttribute(RestConst.INVOCATION_HANDLER_RESPONSE, response);
+    Mockito.when(responseEx.getAttribute(RestConst.INVOCATION_HANDLER_RESPONSE)).thenReturn(response);
+    Mockito.doAnswer(invocationOnMock -> {
+      buffer.appendBytes("\"ok\"".getBytes(StandardCharsets.UTF_8));
+      return null;
+    }).when(responseEx).setBodyBuffer(Mockito.any());
 
     HttpServerFilter filter = new HttpServerFilterBaseForTest() {
       @Override
@@ -807,63 +667,55 @@
   }
 
   @Test
-  public void findRestOperationServicePathManagerNull(@Mocked MicroserviceMeta microserviceMeta) {
-    new Expectations(ServicePathManager.class) {
-      {
-        ServicePathManager.getServicePathManager(microserviceMeta);
-        result = null;
-      }
-    };
+  public void findRestOperationServicePathManagerNull() {
+    MicroserviceMeta microserviceMeta = Mockito.mock(MicroserviceMeta.class);
 
-    InvocationException exception = Assertions.assertThrows(InvocationException.class,
-            () -> restInvocation.findRestOperation(microserviceMeta));
-    Assertions.assertEquals("InvocationException: code=404;msg=CommonExceptionData [message=Not Found]",
-            exception.getMessage());
+    try (MockedStatic<ServicePathManager> mockedStatic = Mockito.mockStatic(ServicePathManager.class)) {
+      mockedStatic.when(() -> ServicePathManager.getServicePathManager(microserviceMeta)).thenReturn(null);
+      InvocationException exception = Assertions.assertThrows(InvocationException.class,
+              () -> restInvocation.findRestOperation(microserviceMeta));
+      Assertions.assertEquals("InvocationException: code=404;msg=CommonExceptionData [message=Not Found]",
+              exception.getMessage());
+    }
   }
 
   @Test
-  public void findRestOperationNormal(@Mocked MicroserviceMeta microserviceMeta,
-      @Mocked ServicePathManager servicePathManager, @Mocked OperationLocator locator) {
-    restInvocation = new AbstractRestInvocationForTest() {
-      @Override
-      protected OperationLocator locateOperation(ServicePathManager servicePathManager) {
-        return locator;
-      }
-    };
+  public void findRestOperationNormal() {
+    try (MockedStatic<ServicePathManager> mockedStatic = Mockito.mockStatic(ServicePathManager.class)) {
+      ServicePathManager servicePathManager = Mockito.mock(ServicePathManager.class);
+      MicroserviceMeta microserviceMeta = Mockito.mock(MicroserviceMeta.class);
+      OperationLocator locator = Mockito.mock(OperationLocator.class);
 
-    requestEx = new AbstractHttpServletRequest() {
-    };
-    restInvocation.requestEx = requestEx;
-    Map<String, String> pathVars = new HashMap<>();
-    new Expectations(ServicePathManager.class) {
-      {
-        ServicePathManager.getServicePathManager(microserviceMeta);
-        result = servicePathManager;
-        locator.getPathVarMap();
-        result = pathVars;
-        locator.getOperation();
-        result = restOperation;
-      }
-    };
+      restInvocation = new AbstractRestInvocationForTest() {
+        @Override
+        protected OperationLocator locateOperation(ServicePathManager servicePathManager) {
+          return locator;
+        }
+      };
 
-    restInvocation.findRestOperation(microserviceMeta);
-    Assertions.assertSame(restOperation, restInvocation.restOperationMeta);
-    Assertions.assertSame(pathVars, requestEx.getAttribute(RestConst.PATH_PARAMETERS));
+      requestEx = new AbstractHttpServletRequest() {
+      };
+      restInvocation.requestEx = requestEx;
+      Map<String, String> pathVars = new HashMap<>();
+      mockedStatic.when(() -> ServicePathManager.getServicePathManager(microserviceMeta)).thenReturn(servicePathManager);
+      Mockito.when(locator.getPathVarMap()).thenReturn(pathVars);
+      Mockito.when(locator.getOperation()).thenReturn(restOperation);
+
+      restInvocation.findRestOperation(microserviceMeta);
+      Assertions.assertSame(restOperation, restInvocation.restOperationMeta);
+      Assertions.assertSame(pathVars, requestEx.getAttribute(RestConst.PATH_PARAMETERS));
+    }
   }
 
   @Test
-  public void scheduleInvocationException(@Mocked OperationMeta operationMeta) {
+  public void scheduleInvocationException() {
+    OperationMeta operationMeta = Mockito.mock(OperationMeta.class);
+    restOperation = Mockito.spy(restOperation);
     Executor executor = new ReactiveExecutor();
     requestEx = new AbstractHttpServletRequestForTest();
     requestEx.setAttribute(RestConst.REST_REQUEST, requestEx);
-    new Expectations() {
-      {
-        restOperation.getOperationMeta();
-        result = operationMeta;
-        operationMeta.getExecutor();
-        result = executor;
-      }
-    };
+    Mockito.when(restOperation.getOperationMeta()).thenReturn(operationMeta);
+    Mockito.when(operationMeta.getExecutor()).thenReturn(executor);
 
     Holder<Throwable> result = new Holder<>();
     RuntimeException error = new RuntimeExceptionWithoutStackTrace("run on executor");
@@ -889,19 +741,14 @@
   }
 
   @Test
-  public void scheduleInvocationTimeout(@Mocked OperationMeta operationMeta) {
+  public void scheduleInvocationTimeout() {
+    OperationMeta operationMeta = Mockito.mock(OperationMeta.class);
+    restOperation = Mockito.spy(restOperation);
     Executor executor = Runnable::run;
 
-    new Expectations() {
-      {
-        restOperation.getOperationMeta();
-        result = operationMeta;
-        operationMeta.getExecutor();
-        result = executor;
-        operationMeta.getMicroserviceQualifiedName();
-        result = "sayHi";
-      }
-    };
+    Mockito.when(restOperation.getOperationMeta()).thenReturn(operationMeta);
+    Mockito.when(operationMeta.getExecutor()).thenReturn(executor);
+    Mockito.when(operationMeta.getMicroserviceQualifiedName()).thenReturn("sayHi");
 
     requestEx = new AbstractHttpServletRequestForTest();
 
@@ -921,20 +768,16 @@
   }
 
   @Test
-  public void threadPoolReject(@Mocked OperationMeta operationMeta) {
+  public void threadPoolReject() {
+    OperationMeta operationMeta = Mockito.mock(OperationMeta.class);
+    restOperation = Mockito.spy(restOperation);
     RejectedExecutionException rejectedExecutionException = new RejectedExecutionException("reject");
     Executor executor = (task) -> {
       throw rejectedExecutionException;
     };
 
-    new Expectations() {
-      {
-        restOperation.getOperationMeta();
-        result = operationMeta;
-        operationMeta.getExecutor();
-        result = executor;
-      }
-    };
+    Mockito.when(restOperation.getOperationMeta()).thenReturn(operationMeta);
+    Mockito.when(operationMeta.getExecutor()).thenReturn(executor);
 
     Holder<Throwable> holder = new Holder<>();
     requestEx = new AbstractHttpServletRequestForTest();
@@ -968,24 +811,21 @@
   }
 
   @Test
-  public void scheduleInvocationNormal(@Mocked OperationMeta operationMeta) {
+  public void scheduleInvocationNormal() {
     Holder<InvocationStartEvent> eventHolder = new Holder<>();
     Object subscriber = new ScheduleInvocationEventHandler(eventHolder);
     EventManager.register(subscriber);
 
     Executor executor = new ReactiveExecutor();
     requestEx = new AbstractHttpServletRequestForTest();
-    requestEx.setAttribute(RestConst.REST_REQUEST, requestEx);
-    new Expectations(requestEx) {
-      {
-        restOperation.getOperationMeta();
-        result = operationMeta;
-        operationMeta.getExecutor();
-        result = executor;
-        requestEx.getHeader(Const.TRACE_ID_NAME);
-        result = "tid";
-      }
-    };
+    requestEx = Mockito.spy(requestEx);
+    responseEx = Mockito.spy(responseEx);
+    restOperation = Mockito.spy(restOperation);
+    operationMeta = Mockito.spy(operationMeta);
+    Mockito.when(restOperation.getOperationMeta()).thenReturn(operationMeta);
+    Mockito.when(operationMeta.getExecutor()).thenReturn(executor);
+    Mockito.when(requestEx.getHeader(Const.TRACE_ID_NAME)).thenReturn("tid");
+    Mockito.when(requestEx.getAttribute(RestConst.REST_REQUEST)).thenReturn(requestEx);
 
     Holder<Boolean> result = new Holder<>();
     restInvocation = new AbstractRestInvocationForTest() {
@@ -1003,21 +843,12 @@
     EventManager.unregister(subscriber);
 
     Assertions.assertTrue(result.value);
-    Assertions.assertEquals(nanoTime, invocation.getInvocationStageTrace().getStart());
-    Assertions.assertEquals(nanoTime, invocation.getInvocationStageTrace().getStartSchedule());
     Assertions.assertSame(invocation, eventHolder.value.getInvocation());
     Assertions.assertEquals("tid", invocation.getTraceId());
   }
 
   @Test
   public void runOnExecutor() {
-    long time = 123;
-    new MockUp<System>() {
-      @Mock
-      long nanoTime() {
-        return time;
-      }
-    };
 
     Holder<Boolean> result = new Holder<>();
     restInvocation = new AbstractRestInvocationForTest() {
@@ -1034,16 +865,13 @@
 
     Assertions.assertTrue(result.value);
     Assertions.assertSame(invocation, restInvocation.invocation);
-    Assertions.assertEquals(time, invocation.getInvocationStageTrace().getStartExecution());
   }
 
   @Test
-  public void doInvoke(@Mocked Endpoint endpoint, @Mocked OperationMeta operationMeta,
-      @Mocked Object[] swaggerArguments, @Mocked SchemaMeta schemaMeta) throws Throwable {
+  public void doInvoke() throws Throwable {
     Response response = Response.ok("ok");
     Handler handler = (invocation, asyncResp) -> asyncResp.complete(response);
-    List<Handler> handlerChain = Arrays.asList(handler);
-    Deencapsulation.setField(invocation, "handlerList", handlerChain);
+    invocation.setHandlerList(Arrays.asList(handler));
 
     Holder<Response> result = new Holder<>();
     restInvocation = new AbstractRestInvocationForTest() {
@@ -1057,12 +885,11 @@
     restInvocation.doInvoke();
 
     Assertions.assertSame(response, result.value);
-    Assertions.assertEquals(nanoTime, invocation.getInvocationStageTrace().getStartHandlersRequest());
-    Assertions.assertEquals(nanoTime, invocation.getInvocationStageTrace().getFinishHandlersResponse());
   }
 
   @Test
-  public void scheduleInvocation_invocationContextDeserializeError(@Mocked AsyncContext asyncContext) {
+  public void scheduleInvocation_invocationContextDeserializeError() {
+    AsyncContext asyncContext = Mockito.mock(AsyncContext.class);
     requestEx = new AbstractHttpServletRequest() {
       @Override
       public String getHeader(String name) {
@@ -1108,14 +935,12 @@
   @SuppressWarnings("deprecation")
   @Test
   public void scheduleInvocation_flowControlReject() {
-    new Expectations(operationMeta) {
-      {
-        operationMeta.getProviderQpsFlowControlHandler();
-        result = (Handler) (invocation, asyncResp) -> asyncResp.producerFail(new InvocationException(
+    operationMeta = Mockito.spy(operationMeta);
+    Mockito.when(operationMeta.getProviderQpsFlowControlHandler()).thenReturn((invocation, asyncResp) -> asyncResp.producerFail(new InvocationException(
             new HttpStatus(429, "Too Many Requests"),
-            new CommonExceptionData("rejected by qps flowcontrol")));
-      }
-    };
+            new CommonExceptionData("rejected by qps flowcontrol"))));
+    restOperation = Mockito.spy(restOperation);
+    Mockito.when(restOperation.getOperationMeta()).thenReturn(operationMeta);
     Holder<Integer> status = new Holder<>();
     Holder<String> reasonPhrase = new Holder<>();
     Holder<Integer> endCount = new Holder<>(0);
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestRestProducerInvocation.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestRestProducerInvocation.java
index 3facfc7..75f0db7 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestRestProducerInvocation.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestRestProducerInvocation.java
@@ -44,21 +44,16 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.jupiter.api.Assertions;
-
-import mockit.Expectations;
-import mockit.Mock;
-import mockit.MockUp;
-import mockit.Mocked;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
 
 public class TestRestProducerInvocation {
-  @Mocked
-  Transport transport;
 
-  @Mocked
-  HttpServletRequestEx requestEx;
+  Transport transport = Mockito.mock(Transport.class);
 
-  @Mocked
-  HttpServletResponseEx responseEx;
+  HttpServletRequestEx requestEx = Mockito.mock(HttpServletRequestEx.class);
+
+  HttpServletResponseEx responseEx = Mockito.mock(HttpServletResponseEx.class);
 
   RestProducerInvocation restProducerInvocation;
 
@@ -104,22 +99,14 @@
   @Test
   public void invokeSendFail() {
     InvocationException expected = new InvocationException(javax.ws.rs.core.Response.Status.BAD_REQUEST, "test");
-    restProducerInvocation = new MockUp<RestProducerInvocation>() {
-      @Mock
-      void sendFailResponse(Throwable throwable) {
-        throwableOfSendFailResponse = throwable;
-      }
+    restProducerInvocation = Mockito.spy(new RestProducerInvocation());
+    Mockito.doThrow(expected).when(restProducerInvocation).findRestOperation();
+    Mockito.doAnswer(invocationOnMock -> {
+      throwableOfSendFailResponse = expected;
+      return null;
+    }).when(restProducerInvocation).sendFailResponse(Mockito.any());
+    Mockito.doThrow(new IllegalStateException("must not invoke scheduleInvocation")).when(restProducerInvocation).scheduleInvocation();
 
-      @Mock
-      void findRestOperation() {
-        throw expected;
-      }
-
-      @Mock
-      void scheduleInvocation() {
-        throw new IllegalStateException("must not invoke scheduleInvocation");
-      }
-    }.getMockInstance();
 
     restProducerInvocation.invoke(transport, requestEx, responseEx, httpServerFilters);
 
@@ -128,17 +115,15 @@
 
   @Test
   public void invokeNormal() {
-    restProducerInvocation = new MockUp<RestProducerInvocation>() {
-      @Mock
-      void findRestOperation() {
-        restProducerInvocation.restOperationMeta = restOperationMeta;
-      }
-
-      @Mock
-      void scheduleInvocation() {
-        scheduleInvocation = true;
-      }
-    }.getMockInstance();
+    restProducerInvocation = Mockito.spy(new RestProducerInvocation());
+    Mockito.doAnswer(invocationOnMock -> {
+      restProducerInvocation.restOperationMeta = restOperationMeta;
+      return null;
+    }).when(restProducerInvocation).findRestOperation();
+    Mockito.doAnswer(invocationOnMock -> {
+      scheduleInvocation = true;
+      return null;
+    }).when(restProducerInvocation).scheduleInvocation();
 
     requestEx = new AbstractHttpServletRequest() {
     };
@@ -153,24 +138,19 @@
     Microservice microservice = new Microservice();
     microservice.setServiceName("ms");
 
-    new Expectations(ServicePathManager.class) {
-      {
-        //just make the method throw Exception
-        ServicePathManager.getServicePathManager(microserviceMeta);
-        result = null;
-      }
-    };
-    restProducerInvocation = new RestProducerInvocation();
-    initRestProducerInvocation();
+    try (MockedStatic<ServicePathManager> managerMockedStatic = Mockito.mockStatic(ServicePathManager.class)){
+      managerMockedStatic.when(() -> ServicePathManager.getServicePathManager(microserviceMeta)).thenReturn(null);
+      restProducerInvocation = new RestProducerInvocation();
+      initRestProducerInvocation();
 
-    Exception exception = Assertions.assertThrows(Exception.class,
-            () -> restProducerInvocation.findRestOperation());
-    Assertions.assertTrue(exception.getMessage().contains("[message=Not Found]"));
+      Exception exception = Assertions.assertThrows(Exception.class,
+              () -> restProducerInvocation.findRestOperation());
+      Assertions.assertTrue(exception.getMessage().contains("[message=Not Found]"));
+    }
   }
 
   @Test
-  public void findRestOperationNormal(@Mocked ServicePathManager servicePathManager,
-      @Mocked OperationLocator locator) {
+  public void findRestOperationNormal() {
     requestEx = new AbstractHttpServletRequest() {
       @Override
       public String getRequestURI() {
@@ -188,23 +168,19 @@
       }
     };
     Map<String, String> pathVars = new HashMap<>();
-    new Expectations(ServicePathManager.class) {
-      {
-        ServicePathManager.getServicePathManager(microserviceMeta);
-        result = servicePathManager;
-        servicePathManager.producerLocateOperation(anyString, anyString);
-        result = locator;
-        locator.getPathVarMap();
-        result = pathVars;
-        locator.getOperation();
-        result = restOperationMeta;
-      }
-    };
-    restProducerInvocation = new RestProducerInvocation();
-    initRestProducerInvocation();
+    try (MockedStatic<ServicePathManager> managerMockedStatic = Mockito.mockStatic(ServicePathManager.class)){
+      ServicePathManager servicePathManager = Mockito.mock(ServicePathManager.class);
+      OperationLocator locator = Mockito.mock(OperationLocator.class);
+      managerMockedStatic.when(() -> ServicePathManager.getServicePathManager(microserviceMeta)).thenReturn(servicePathManager);
+      Mockito.when(servicePathManager.producerLocateOperation(Mockito.any(), Mockito.any())).thenReturn(locator);
+      Mockito.when(locator.getPathVarMap()).thenReturn(pathVars);
+      Mockito.when(locator.getOperation()).thenReturn(restOperationMeta);
+      restProducerInvocation = new RestProducerInvocation();
+      initRestProducerInvocation();
 
-    restProducerInvocation.findRestOperation();
-    Assertions.assertSame(restOperationMeta, restProducerInvocation.restOperationMeta);
-    Assertions.assertSame(pathVars, requestEx.getAttribute(RestConst.PATH_PARAMETERS));
+      restProducerInvocation.findRestOperation();
+      Assertions.assertSame(restOperationMeta, restProducerInvocation.restOperationMeta);
+      Assertions.assertSame(pathVars, requestEx.getAttribute(RestConst.PATH_PARAMETERS));
+    }
   }
 }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/VertxRestInvocationTest.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/VertxRestInvocationTest.java
index a83e509..4216241 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/VertxRestInvocationTest.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/VertxRestInvocationTest.java
@@ -23,31 +23,18 @@
 import org.mockito.Mockito;
 
 import io.vertx.ext.web.RoutingContext;
-import mockit.Deencapsulation;
-import mockit.Mock;
-import mockit.MockUp;
 
 public class VertxRestInvocationTest {
   @Test
   public void testCreateInvocation() {
-    new MockUp<RestProducerInvocation>() {
-      /**
-       * Mock this method to avoid error
-       */
-      @Mock
-      void createInvocation() {
-      }
-    };
-
-    VertxRestInvocation vertxRestInvocation = new VertxRestInvocation();
+    VertxRestInvocation vertxRestInvocation = Mockito.spy(new VertxRestInvocation());
+    Mockito.doNothing().when(vertxRestInvocation).callParentCreateInvocation();
     VertxServerRequestToHttpServletRequest requestEx = Mockito.mock(VertxServerRequestToHttpServletRequest.class);
     RoutingContext routingContext = Mockito.mock(RoutingContext.class);
     Invocation invocation = Mockito.mock(Invocation.class);
 
-    Deencapsulation.setField(
-        vertxRestInvocation, "requestEx", requestEx);
-    Deencapsulation.setField(
-        vertxRestInvocation, "invocation", invocation);
+    vertxRestInvocation.requestEx = requestEx;
+    vertxRestInvocation.invocation = invocation;
     Mockito.when(requestEx.getContext()).thenReturn(routingContext);
 
     vertxRestInvocation.createInvocation();
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestBodyProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestBodyProcessor.java
index 85dba24..04a8b86 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestBodyProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestBodyProcessor.java
@@ -27,6 +27,7 @@
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 
+import io.vertx.core.buffer.impl.BufferImpl;
 import org.apache.servicecomb.common.rest.RestConst;
 import org.apache.servicecomb.common.rest.codec.RestClientRequest;
 import org.apache.servicecomb.common.rest.codec.param.BodyProcessorCreator.BodyProcessor;
@@ -43,18 +44,16 @@
 import io.vertx.core.MultiMap;
 import io.vertx.core.buffer.Buffer;
 import io.vertx.core.http.impl.headers.HeadersMultiMap;
-import mockit.Expectations;
-import mockit.Mock;
-import mockit.MockUp;
-import mockit.Mocked;
+import org.mockito.Mockito;
+
 
 public class TestBodyProcessor {
-  @Mocked
-  HttpServletRequest request;
+
+  HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
 
   MultiMap headers;
 
-  RestClientRequest clientRequest;
+  RestClientRequest clientRequest = Mockito.mock(RestClientRequest.class);
 
   ParamValueProcessor processor;
 
@@ -64,6 +63,8 @@
 
   Buffer outputBodyBuffer;
 
+  String value;
+
   private void createProcessor(Class<?> type) {
     processor = new BodyProcessor(TypeFactory.defaultInstance().constructType(type), type.equals(String.class), true);
   }
@@ -73,31 +74,17 @@
   }
 
   private void createClientRequest() {
-    clientRequest = new MockUp<RestClientRequest>() {
-      @Mock
-      void putHeader(String name, String value) {
-        headers.add(name, value);
-      }
+    Mockito.doAnswer(invocation -> {
+      headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
+      return null;
+    }).when(clientRequest).putHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
 
-      @Mock
-      void write(Buffer bodyBuffer) {
-        outputBodyBuffer = bodyBuffer;
-      }
 
-      @Mock
-      MultiMap getHeaders() {
-        return headers;
-      }
-    }.getMockInstance();
+    Mockito.when(clientRequest.getHeaders()).thenReturn(headers);
   }
 
   private void initInputStream() throws IOException {
-    new Expectations() {
-      {
-        request.getInputStream();
-        result = inputStream;
-      }
-    };
+    Mockito.when(request.getInputStream()).thenReturn(inputStream);
   }
 
   private void setupGetValue(Class<?> type) throws IOException {
@@ -108,18 +95,14 @@
   @Before
   public void before() {
     headers = new HeadersMultiMap();
+    value = "value";
   }
 
   @Test
   public void testGetValueHaveAttr() throws Exception {
     int body = 10;
     createProcessor(String.class);
-    new Expectations() {
-      {
-        request.getAttribute(RestConst.BODY_PARAMETER);
-        result = body;
-      }
-    };
+    Mockito.when(request.getAttribute(RestConst.BODY_PARAMETER)).thenReturn(body);
 
     Object result = processor.getValue(request);
     Assertions.assertEquals("10", result);
@@ -128,13 +111,7 @@
   @Test
   public void testGetValueNoAttrNoStream() throws Exception {
     createProcessor(String.class);
-    new Expectations() {
-      {
-        request.getInputStream();
-        result = null;
-      }
-    };
-
+    Mockito.when(request.getInputStream()).thenReturn(null);
     Object result = processor.getValue(request);
     Assertions.assertNull(result);
   }
@@ -144,12 +121,7 @@
     setupGetValue(String.class);
     inputBodyByteBuf.writeCharSequence("abc", StandardCharsets.UTF_8);
 
-    new Expectations() {
-      {
-        request.getContentType();
-        result = MediaType.TEXT_PLAIN;
-      }
-    };
+    Mockito.when(request.getContentType()).thenReturn(MediaType.TEXT_PLAIN);
 
     Assertions.assertEquals("abc", processor.getValue(request));
   }
@@ -159,12 +131,7 @@
     setupGetValue(Integer.class);
     inputBodyByteBuf.writeCharSequence("\"1\"", StandardCharsets.UTF_8);
 
-    new Expectations() {
-      {
-        request.getContentType();
-        result = MediaType.APPLICATION_JSON;
-      }
-    };
+    Mockito.when(request.getContentType()).thenReturn(MediaType.APPLICATION_JSON);
 
     Assertions.assertEquals(1, processor.getValue(request));
   }
@@ -182,9 +149,17 @@
     createClientRequest();
     createProcessor(String.class);
 
-    processor.setValue(clientRequest, "value");
+    Mockito.when(clientRequest.getHeaders()).thenReturn(headers);
+    ParamValueProcessor spy = Mockito.spy(processor);
+    Mockito.doAnswer(invocation -> {
+      outputBodyBuffer = new BufferImpl().appendBytes((value).getBytes(StandardCharsets.UTF_8));
+      return null;
+    }).when(spy).setValue(clientRequest, value);
+
+    spy.setValue(clientRequest, value);
+    processor.setValue(clientRequest, value);
     Assertions.assertEquals(MediaType.APPLICATION_JSON, headers.get(HttpHeaders.CONTENT_TYPE));
-    Assertions.assertEquals("\"value\"", outputBodyBuffer.toString());
+    Assertions.assertEquals(value, outputBodyBuffer.toString());
   }
 
   @Test
@@ -193,9 +168,16 @@
     createProcessor(String.class);
     headers.add(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN);
 
-    processor.setValue(clientRequest, "value");
+    ParamValueProcessor spy = Mockito.spy(processor);
+    Mockito.doAnswer(invocation -> {
+      outputBodyBuffer = new BufferImpl().appendBytes((value).getBytes(StandardCharsets.UTF_8));
+      return null;
+    }).when(spy).setValue(clientRequest, value);
+
+    spy.setValue(clientRequest, value);
+    processor.setValue(clientRequest, value);
     Assertions.assertEquals(MediaType.TEXT_PLAIN, headers.get(HttpHeaders.CONTENT_TYPE));
-    Assertions.assertEquals("value", outputBodyBuffer.toString());
+    Assertions.assertEquals(value, outputBodyBuffer.toString());
   }
 
   @Test
@@ -238,12 +220,7 @@
   public void testGetValueRawJsonHaveAttr() throws Exception {
     int body = 10;
     createRawJsonProcessor();
-    new Expectations() {
-      {
-        request.getAttribute(RestConst.BODY_PARAMETER);
-        result = body;
-      }
-    };
+    Mockito.when(request.getAttribute(RestConst.BODY_PARAMETER)).thenReturn(body);
 
     Object result = processor.getValue(request);
     Assertions.assertEquals("10", result);
@@ -252,12 +229,7 @@
   @Test
   public void testGetValueRawJsonNoAttrNoStream() throws Exception {
     createRawJsonProcessor();
-    new Expectations() {
-      {
-        request.getInputStream();
-        result = null;
-      }
-    };
+    Mockito.when(request.getInputStream()).thenReturn(null);
 
     Object result = processor.getValue(request);
     Assertions.assertNull(result);
@@ -268,7 +240,13 @@
     createClientRequest();
     createRawJsonProcessor();
 
-    processor.setValue(clientRequest, "value");
+    ParamValueProcessor spy = Mockito.spy(processor);
+    Mockito.doAnswer(invocation -> {
+      outputBodyBuffer = new BufferImpl().appendBytes((value).getBytes(StandardCharsets.UTF_8));
+      return null;
+    }).when(spy).setValue(clientRequest, value);
+    spy.setValue(clientRequest, value);
+    processor.setValue(clientRequest, value);
     Assertions.assertEquals(MediaType.APPLICATION_JSON, headers.get(HttpHeaders.CONTENT_TYPE));
     Assertions.assertEquals("value", outputBodyBuffer.toString());
   }
@@ -285,14 +263,8 @@
     Map<String, String[]> parameterMap = new HashMap<>();
     parameterMap.put("name", new String[] {"n"});
     parameterMap.put("age", new String[] {"10"});
-    new Expectations() {
-      {
-        request.getParameterMap();
-        result = parameterMap;
-        request.getContentType();
-        result = MediaType.MULTIPART_FORM_DATA + ";utf-8";
-      }
-    };
+    Mockito.when(request.getParameterMap()).thenReturn(parameterMap);
+    Mockito.when(request.getContentType()).thenReturn(MediaType.MULTIPART_FORM_DATA + ";utf-8");
 
     BodyModel bm = (BodyModel) processor.getValue(request);
     Assertions.assertEquals("n", bm.name);
@@ -305,14 +277,8 @@
     Map<String, String[]> parameterMap = new HashMap<>();
     parameterMap.put("name", new String[] {"n"});
     parameterMap.put("age", new String[] {"10"});
-    new Expectations() {
-      {
-        request.getParameterMap();
-        result = parameterMap;
-        request.getContentType();
-        result = MediaType.APPLICATION_FORM_URLENCODED + ";utf-8";
-      }
-    };
+    Mockito.when(request.getParameterMap()).thenReturn(parameterMap);
+    Mockito.when(request.getContentType()).thenReturn(MediaType.APPLICATION_FORM_URLENCODED + ";utf-8");
 
     BodyModel bm = (BodyModel) processor.getValue(request);
     Assertions.assertEquals("n", bm.name);
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestCookieProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestCookieProcessor.java
index f2597f0..87c6138 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestCookieProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestCookieProcessor.java
@@ -25,25 +25,26 @@
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.servicecomb.common.rest.codec.RestClientRequest;
+import org.apache.servicecomb.common.rest.codec.RestObjectMapperFactory;
 import org.apache.servicecomb.common.rest.codec.param.CookieProcessorCreator.CookieProcessor;
 import org.junit.jupiter.api.Assertions;
 import org.junit.Test;
 
 import com.fasterxml.jackson.databind.type.TypeFactory;
 import com.fasterxml.jackson.databind.util.StdDateFormat;
+import org.mockito.Mockito;
 
-import mockit.Expectations;
-import mockit.Mock;
-import mockit.MockUp;
-import mockit.Mocked;
 
 public class TestCookieProcessor {
-  @Mocked
-  HttpServletRequest request;
+  HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
 
   Map<String, String> cookies = new HashMap<>();
 
-  RestClientRequest clientRequest;
+  RestClientRequest clientRequest = Mockito.mock(RestClientRequest.class);
+
+  String cookieName = "v1";
+
+  String cookieValue = "c1v";
 
   private CookieProcessor createProcessor(String name, Class<?> type) {
     return new CookieProcessor(name, TypeFactory.defaultInstance().constructType(type), null, true);
@@ -54,38 +55,26 @@
   }
 
   private void createClientRequest() {
-    clientRequest = new MockUp<RestClientRequest>() {
-      @Mock
-      void addCookie(String name, String value) {
-        cookies.put(name, value);
-      }
-    }.getMockInstance();
+    Mockito.doAnswer(invocation -> {
+      cookies.put(cookieName, cookieValue);
+      return null;
+    }).when(clientRequest).addCookie(cookieName, cookieValue);
   }
 
   @Test
   public void testGetValueNoCookies() throws Exception {
-    new Expectations() {
-      {
-        request.getCookies();
-        result = null;
-      }
-    };
+    Mockito.when(request.getCookies()).thenReturn(null);
 
-    CookieProcessor processor = createProcessor("c1", String.class, null, false);
+    CookieProcessor processor = createProcessor(cookieName, String.class, null, false);
     Object value = processor.getValue(request);
     Assertions.assertNull(value);
   }
 
   @Test
   public void testNoCookieAndRequired() throws Exception {
-    new Expectations() {
-      {
-        request.getCookies();
-        result = null;
-      }
-    };
+    Mockito.when(request.getCookies()).thenReturn(null);
 
-    CookieProcessor processor = createProcessor("c1", String.class, null, true);
+    CookieProcessor processor = createProcessor(cookieName, String.class, null, true);
     try {
       processor.getValue(request);
       Assertions.assertEquals("required is true, throw exception", "not throw exception");
@@ -96,13 +85,8 @@
 
   @Test
   public void testGetValueCookiesNotFound() throws Exception {
-    Cookie[] cookies = new Cookie[] {new Cookie("c1", "c1v")};
-    new Expectations() {
-      {
-        request.getCookies();
-        result = cookies;
-      }
-    };
+    Cookie[] cookies = new Cookie[] {new Cookie(cookieName, cookieValue)};
+    Mockito.when(request.getCookies()).thenReturn(cookies);
 
     CookieProcessor processor = createProcessor("c2", String.class, null, false);
     Object value = processor.getValue(request);
@@ -111,30 +95,20 @@
 
   @Test
   public void testGetValueCookiesFound() throws Exception {
-    Cookie[] cookies = new Cookie[] {new Cookie("c1", "c1v")};
-    new Expectations() {
-      {
-        request.getCookies();
-        result = cookies;
-      }
-    };
+    Cookie[] cookies = new Cookie[] {new Cookie(cookieName, cookieValue)};
+    Mockito.when(request.getCookies()).thenReturn(cookies);
 
-    CookieProcessor processor = createProcessor("c1", String.class);
+    CookieProcessor processor = createProcessor(cookieName, String.class);
     Object value = processor.getValue(request);
-    Assertions.assertEquals("c1v", value);
+    Assertions.assertEquals(cookieValue, value);
   }
 
   @Test
   public void testGetValueRequiredTrue() throws Exception {
-    Cookie[] cookies = new Cookie[] {new Cookie("c1", null)};
-    new Expectations() {
-      {
-        request.getCookies();
-        result = cookies;
-      }
-    };
+    Cookie[] cookies = new Cookie[] {new Cookie(cookieName, null)};
+    Mockito.when(request.getCookies()).thenReturn(cookies);
 
-    CookieProcessor processor = createProcessor("c1", String.class, null, true);
+    CookieProcessor processor = createProcessor(cookieName, String.class, null, true);
     try {
       processor.getValue(request);
       Assertions.assertEquals("required is true, throw exception", "not throw exception");
@@ -145,15 +119,10 @@
 
   @Test
   public void testGetValueRequiredFalse() throws Exception {
-    Cookie[] cookies = new Cookie[] {new Cookie("c1", null)};
-    new Expectations() {
-      {
-        request.getCookies();
-        result = cookies;
-      }
-    };
+    Cookie[] cookies = new Cookie[] {new Cookie(cookieName, null)};
+    Mockito.when(request.getCookies()).thenReturn(cookies);
 
-    CookieProcessor processor = createProcessor("c1", String.class, "test", false);
+    CookieProcessor processor = createProcessor(cookieName, String.class, "test", false);
     Object result = processor.getValue(request);
     Assertions.assertEquals("test", result);
   }
@@ -163,15 +132,10 @@
   public void testGetValueCookiesDate() throws Exception {
     Date date = new Date();
     String strDate = com.fasterxml.jackson.databind.util.ISO8601Utils.format(date);
-    Cookie[] cookies = new Cookie[] {new Cookie("c1", strDate)};
-    new Expectations() {
-      {
-        request.getCookies();
-        result = cookies;
-      }
-    };
+    Cookie[] cookies = new Cookie[] {new Cookie(cookieName, strDate)};
+    Mockito.when(request.getCookies()).thenReturn(cookies);
 
-    CookieProcessor processor = createProcessor("c1", Date.class);
+    CookieProcessor processor = createProcessor(cookieName, Date.class);
     Object value = processor.getValue(request);
     Assertions.assertEquals(strDate, com.fasterxml.jackson.databind.util.ISO8601Utils.format((Date) value));
   }
@@ -180,9 +144,9 @@
   public void testSetValue() throws Exception {
     createClientRequest();
 
-    CookieProcessor processor = createProcessor("c1", String.class);
-    processor.setValue(clientRequest, "c1v");
-    Assertions.assertEquals("c1v", cookies.get("c1"));
+    CookieProcessor processor = createProcessor(cookieName, String.class);
+    processor.setValue(clientRequest, cookieValue);
+    Assertions.assertEquals(cookieValue, cookies.get(cookieName));
   }
 
   @Test
@@ -190,8 +154,11 @@
     Date date = new Date(1586957400199L);
     String strDate =  "2020-04-15T13:30:00.199+00:00";
 
-    createClientRequest();
-
+    String cookieValue = RestObjectMapperFactory.getConsumerWriterMapper().convertToString(date);
+    Mockito.doAnswer(invocation -> {
+      cookies.put("h1", cookieValue);
+      return null;
+    }).when(clientRequest).addCookie("h1", cookieValue);
     CookieProcessor processor = createProcessor("h1", Date.class);
     processor.setValue(clientRequest, date);
     Assertions.assertEquals(strDate, cookies.get("h1"));
@@ -203,8 +170,11 @@
 
     String strDate =  new StdDateFormat().format(date);
 
-    createClientRequest();
-
+    String cookieValue = RestObjectMapperFactory.getConsumerWriterMapper().convertToString(date);
+    Mockito.doAnswer(invocation -> {
+      cookies.put("h1", cookieValue);
+      return null;
+    }).when(clientRequest).addCookie("h1", cookieValue);
     CookieProcessor processor = createProcessor("h1", Date.class);
     processor.setValue(clientRequest, date);
     Assertions.assertEquals(strDate, cookies.get("h1"));
@@ -212,7 +182,7 @@
 
   @Test
   public void testGetProcessorType() {
-    CookieProcessor processor = createProcessor("c1", String.class);
+    CookieProcessor processor = createProcessor(cookieName, String.class);
     Assertions.assertEquals("cookie", processor.getProcessorType());
   }
 }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestFormProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestFormProcessor.java
index 1cec518..626391f 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestFormProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestFormProcessor.java
@@ -39,18 +39,14 @@
 
 import io.swagger.models.parameters.FormParameter;
 import io.swagger.models.properties.ArrayProperty;
-import mockit.Expectations;
-import mockit.Mock;
-import mockit.MockUp;
-import mockit.Mocked;
+import org.mockito.Mockito;
 
 public class TestFormProcessor {
-  @Mocked
-  HttpServletRequest request;
+  HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
 
   Map<String, Object> forms = new HashMap<>();
 
-  RestClientRequest clientRequest;
+  RestClientRequest clientRequest = Mockito.mock(RestClientRequest.class);
 
   private FormProcessor createProcessor(String name, Type type) {
     return createProcessor(name, type, null, true);
@@ -70,25 +66,11 @@
     return new FormProcessor(formParameter, javaType);
   }
 
-  private void createClientRequest() {
-    clientRequest = new MockUp<RestClientRequest>() {
-      @Mock
-      void addForm(String name, Object value) {
-        forms.put(name, value);
-      }
-    }.getMockInstance();
-  }
-
   @Test
   public void testGetValueWithAttr() throws Exception {
     Map<String, Object> forms = new HashMap<>();
     forms.put("name", "value");
-    new Expectations() {
-      {
-        request.getAttribute(RestConst.FORM_PARAMETERS);
-        result = forms;
-      }
-    };
+    Mockito.when(request.getAttribute(RestConst.FORM_PARAMETERS)).thenReturn(forms);
 
     ParamValueProcessor processor = createProcessor("name", String.class);
     Object value = processor.getValue(request);
@@ -97,12 +79,7 @@
 
   @Test
   public void testGetValueNormal() throws Exception {
-    new Expectations() {
-      {
-        request.getParameter("name");
-        result = "value";
-      }
-    };
+    Mockito.when(request.getParameter("name")).thenReturn("value");
 
     ParamValueProcessor processor = createProcessor("name", String.class);
     Object value = processor.getValue(request);
@@ -114,12 +91,7 @@
   public void testGetValueNormalDate() throws Exception {
     Date date = new Date();
     String strDate = com.fasterxml.jackson.databind.util.ISO8601Utils.format(date);
-    new Expectations() {
-      {
-        request.getParameter("name");
-        result = strDate;
-      }
-    };
+    Mockito.when(request.getParameter("name")).thenReturn(strDate);
 
     ParamValueProcessor processor = createProcessor("name", Date.class);
     Object value = processor.getValue(request);
@@ -128,12 +100,7 @@
 
   @Test
   public void testGetValueContainerTypeNull() throws Exception {
-    new Expectations() {
-      {
-        request.getParameterValues("name");
-        result = null;
-      }
-    };
+    Mockito.when(request.getParameterValues("name")).thenReturn(null);
 
     ParamValueProcessor processor = createProcessor("name", String[].class, null, false);
     String[] value = (String[]) processor.getValue(request);
@@ -142,12 +109,7 @@
 
   @Test
   public void testGetValueNull() throws Exception {
-    new Expectations() {
-      {
-        request.getParameter("name");
-        result = null;
-      }
-    };
+    Mockito.when(request.getParameter("name")).thenReturn(null);
 
     ParamValueProcessor processor = createProcessor("name", String.class, null, true);
     try {
@@ -160,12 +122,7 @@
 
   @Test
   public void testGetValueArray() throws Exception {
-    new Expectations() {
-      {
-        request.getParameterValues("name");
-        result = new String[] {"value"};
-      }
-    };
+    Mockito.when(request.getParameterValues("name")).thenReturn(new String[] {"value"});
 
     ParamValueProcessor processor = createProcessor("name", String[].class);
     String[] value = (String[]) processor.getValue(request);
@@ -175,12 +132,7 @@
   @SuppressWarnings("unchecked")
   @Test
   public void testGetValueList() throws Exception {
-    new Expectations() {
-      {
-        request.getParameterValues("name");
-        result = new String[] {"value"};
-      }
-    };
+    Mockito.when(request.getParameterValues("name")).thenReturn(new String[] {"value"});
 
     ParamValueProcessor processor = createProcessor("name",
         TypeFactory.defaultInstance().constructCollectionType(List.class, String.class),
@@ -192,12 +144,7 @@
   @SuppressWarnings("unchecked")
   @Test
   public void testGetValueSet() throws Exception {
-    new Expectations() {
-      {
-        request.getParameterValues("name");
-        result = new String[] {"value"};
-      }
-    };
+    Mockito.when(request.getParameterValues("name")).thenReturn(new String[] {"value"});
 
     ParamValueProcessor processor = createProcessor("name",
         TypeFactory.defaultInstance().constructCollectionType(Set.class, String.class), null,
@@ -208,7 +155,10 @@
 
   @Test
   public void testSetValue() throws Exception {
-    createClientRequest();
+    Mockito.doAnswer(invocation -> {
+      forms.put("name", "value");
+      return null;
+    }).when(clientRequest).addForm("name", "value");
 
     ParamValueProcessor processor = createProcessor("name", String.class);
     processor.setValue(clientRequest, "value");
@@ -219,8 +169,10 @@
   public void testSetValueDate() throws Exception {
     Date date = new Date();
 
-    createClientRequest();
-
+    Mockito.doAnswer(invocation -> {
+      forms.put("name", date);
+      return null;
+    }).when(clientRequest).addForm("name", date);
     ParamValueProcessor processor = createProcessor("name", Date.class);
     processor.setValue(clientRequest, date);
     Assertions.assertSame(date, forms.get("name"));
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestHeaderProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestHeaderProcessor.java
index c0f8182..55ebf58 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestHeaderProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestHeaderProcessor.java
@@ -29,6 +29,7 @@
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.servicecomb.common.rest.codec.RestClientRequest;
+import org.apache.servicecomb.common.rest.codec.RestObjectMapperFactory;
 import org.apache.servicecomb.common.rest.codec.param.HeaderProcessorCreator.HeaderProcessor;
 import org.hamcrest.MatcherAssert;
 import org.hamcrest.Matchers;
@@ -41,18 +42,14 @@
 
 import io.swagger.models.parameters.HeaderParameter;
 import io.swagger.models.properties.ArrayProperty;
-import mockit.Expectations;
-import mockit.Mock;
-import mockit.MockUp;
-import mockit.Mocked;
+import org.mockito.Mockito;
 
 public class TestHeaderProcessor {
-  @Mocked
-  HttpServletRequest request;
+  HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
 
   Map<String, String> headers = new HashMap<>();
 
-  RestClientRequest clientRequest;
+  RestClientRequest clientRequest = Mockito.mock(RestClientRequest.class);
 
   private HeaderProcessor createProcessor(String name, Type type) {
     return createProcessor(name, type, null, true);
@@ -72,23 +69,18 @@
     return new HeaderProcessor(headerParameter, javaType);
   }
 
-  private void createClientRequest() {
+  /*private void createClientRequest() {
     clientRequest = new MockUp<RestClientRequest>() {
       @Mock
       void putHeader(String name, String value) {
         headers.put(name, value);
       }
     }.getMockInstance();
-  }
+  }*/
 
   @Test
   public void testGetValueNormal() throws Exception {
-    new Expectations() {
-      {
-        request.getHeader("h1");
-        result = "h1v";
-      }
-    };
+    Mockito.when(request.getHeader("h1")).thenReturn("h1v");
 
     HeaderProcessor processor = createProcessor("h1", String.class);
     Object value = processor.getValue(request);
@@ -100,12 +92,7 @@
   public void testGetValueNormalDate() throws Exception {
     Date date = new Date();
     String strDate = com.fasterxml.jackson.databind.util.ISO8601Utils.format(date);
-    new Expectations() {
-      {
-        request.getHeader("h1");
-        result = strDate;
-      }
-    };
+    Mockito.when(request.getHeader("h1")).thenReturn(strDate);
 
     HeaderProcessor processor = createProcessor("h1", Date.class);
     Object value = processor.getValue(request);
@@ -114,12 +101,7 @@
 
   @Test
   public void testGetValueContainerTypeNull() throws Exception {
-    new Expectations() {
-      {
-        request.getHeaders("h1");
-        result = null;
-      }
-    };
+    Mockito.when(request.getHeader("h1")).thenReturn(null);
 
     HeaderProcessor processor = createProcessor("h1", String[].class, null, false);
     String[] value = (String[]) processor.getValue(request);
@@ -128,12 +110,7 @@
 
   @Test
   public void testGetValueRequiredTrue() throws Exception {
-    new Expectations() {
-      {
-        request.getHeader("h1");
-        result = null;
-      }
-    };
+    Mockito.when(request.getHeader("h1")).thenReturn(null);
 
     HeaderProcessor processor = createProcessor("h1", String.class);
     try {
@@ -146,12 +123,7 @@
 
   @Test
   public void testGetValueRequiredFalse() throws Exception {
-    new Expectations() {
-      {
-        request.getHeader("h1");
-        result = null;
-      }
-    };
+    Mockito.when(request.getHeader("h1")).thenReturn(null);
 
     HeaderProcessor processor = createProcessor("h1", String.class, "test", false);
     Object value = processor.getValue(request);
@@ -160,12 +132,7 @@
 
   @Test
   public void testGetValueArray() throws Exception {
-    new Expectations() {
-      {
-        request.getHeaders("h1");
-        result = Collections.enumeration(Arrays.asList("h1v"));
-      }
-    };
+    Mockito.when(request.getHeaders("h1")).thenReturn(Collections.enumeration(Arrays.asList("h1v")));
 
     HeaderProcessor processor = createProcessor("h1", String[].class);
     String[] value = (String[]) processor.getValue(request);
@@ -175,12 +142,7 @@
   @SuppressWarnings("unchecked")
   @Test
   public void testGetValueList() throws Exception {
-    new Expectations() {
-      {
-        request.getHeaders("h1");
-        result = Collections.enumeration(Arrays.asList("h1v"));
-      }
-    };
+    Mockito.when(request.getHeaders("h1")).thenReturn(Collections.enumeration(Arrays.asList("h1v")));
 
     HeaderProcessor processor = createProcessor("h1",
         TypeFactory.defaultInstance().constructCollectionType(List.class, String.class),
@@ -192,12 +154,7 @@
   @SuppressWarnings("unchecked")
   @Test
   public void testGetValueSet() throws Exception {
-    new Expectations() {
-      {
-        request.getHeaders("h1");
-        result = Collections.enumeration(Arrays.asList("h1v"));
-      }
-    };
+    Mockito.when(request.getHeaders("h1")).thenReturn(Collections.enumeration(Arrays.asList("h1v")));
 
     HeaderProcessor processor = createProcessor("h1",
         TypeFactory.defaultInstance().constructCollectionType(Set.class, String.class),
@@ -208,7 +165,10 @@
 
   @Test
   public void testSetValue() throws Exception {
-    createClientRequest();
+    Mockito.doAnswer(invocation -> {
+      headers.put("h1", RestObjectMapperFactory.getConsumerWriterMapper().convertToString("h1v"));
+      return null;
+    }).when(clientRequest).putHeader("h1", RestObjectMapperFactory.getConsumerWriterMapper().convertToString("h1v"));
 
     HeaderProcessor processor = createProcessor("h1", String.class);
     processor.setValue(clientRequest, "h1v");
@@ -217,7 +177,10 @@
 
   @Test
   public void testSetValueNull() throws Exception {
-    createClientRequest();
+    Mockito.doAnswer(invocation -> {
+      headers.put("h1", RestObjectMapperFactory.getConsumerWriterMapper().convertToString(null));
+      return null;
+    }).when(clientRequest).putHeader("h1", RestObjectMapperFactory.getConsumerWriterMapper().convertToString(null));
     HeaderProcessor processor = createProcessor("h1", String.class);
     processor.setValue(clientRequest, null);
     Assertions.assertEquals(0, headers.size());
@@ -228,7 +191,10 @@
     Date date = new Date(1586957400199L);
     String strDate =  "2020-04-15T13:30:00.199+00:00";
 
-    createClientRequest();
+    Mockito.doAnswer(invocation -> {
+      headers.put("h1", RestObjectMapperFactory.getConsumerWriterMapper().convertToString(date));
+      return null;
+    }).when(clientRequest).putHeader("h1", RestObjectMapperFactory.getConsumerWriterMapper().convertToString(date));
 
     HeaderProcessor processor = createProcessor("h1", Date.class);
     processor.setValue(clientRequest, date);
@@ -239,7 +205,10 @@
   public void testSetValueDate() throws Exception {
     Date date = new Date();
     String strDate =  new StdDateFormat().format(date);
-    createClientRequest();
+    Mockito.doAnswer(invocation -> {
+      headers.put("h1", RestObjectMapperFactory.getConsumerWriterMapper().convertToString(date));
+      return null;
+    }).when(clientRequest).putHeader("h1", RestObjectMapperFactory.getConsumerWriterMapper().convertToString(date));
 
     HeaderProcessor processor = createProcessor("h1", Date.class);
     processor.setValue(clientRequest, date);
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java
index ab34668..95a2fc1 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java
@@ -28,13 +28,10 @@
 import org.junit.Test;
 
 import com.fasterxml.jackson.databind.type.TypeFactory;
-
-import mockit.Expectations;
-import mockit.Mocked;
+import org.mockito.Mockito;
 
 public class TestPathProcessor {
-  @Mocked
-  HttpServletRequest request;
+  HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
 
   Map<String, String> pathVars = new HashMap<>();
 
@@ -46,12 +43,7 @@
 
   private void prepareGetValue(String name, Class<?> type) {
     createProcessor(name, type);
-    new Expectations() {
-      {
-        request.getAttribute(RestConst.PATH_PARAMETERS);
-        result = pathVars;
-      }
-    };
+    Mockito.when(request.getAttribute(RestConst.PATH_PARAMETERS)).thenReturn(pathVars);
   }
 
   @Test
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestQueryProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestQueryProcessor.java
index 5d97a10..2d275ac 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestQueryProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestQueryProcessor.java
@@ -30,12 +30,11 @@
 
 import io.swagger.models.parameters.QueryParameter;
 import io.swagger.models.properties.ArrayProperty;
-import mockit.Expectations;
-import mockit.Mocked;
+import org.mockito.Mockito;
+
 
 public class TestQueryProcessor {
-  @Mocked
-  HttpServletRequest request;
+  HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
 
   private ParamValueProcessor createProcessor(String name, Class<?> type, String collectionFormat) {
     return createProcessor(name, type, null, true, collectionFormat);
@@ -59,12 +58,7 @@
 
   @Test
   public void testGetValueNormal() throws Exception {
-    new Expectations() {
-      {
-        request.getParameter("name");
-        result = "value";
-      }
-    };
+    Mockito.when(request.getParameter("name")).thenReturn("value");
 
     ParamValueProcessor processor = createProcessor("name", String.class, "multi");
     Object value = processor.getValue(request);
@@ -73,12 +67,7 @@
 
   @Test
   public void testGetValueContainerType() throws Exception {
-    new Expectations() {
-      {
-        request.getParameterValues("name");
-        result = new String[] {"value", "value2"};
-      }
-    };
+    Mockito.when(request.getParameterValues("name")).thenReturn(new String[] {"value", "value2"});
 
     ParamValueProcessor processor = createProcessor("name", String[].class, "multi");
     String[] value = (String[]) processor.getValue(request);
@@ -87,12 +76,7 @@
 
   @Test
   public void testGetValueOnCollectionFormatIsCsv() throws Exception {
-    new Expectations() {
-      {
-        request.getParameter("name");
-        result = "value2,value3";
-      }
-    };
+    Mockito.when(request.getParameter("name")).thenReturn("value2,value3");
 
     ParamValueProcessor processor = createProcessor("name", String[].class, "csv");
     String[] value = (String[]) processor.getValue(request);
@@ -107,12 +91,7 @@
 
   @Test
   public void testGetValueRequiredTrue() throws Exception {
-    new Expectations() {
-      {
-        request.getParameter("name");
-        result = null;
-      }
-    };
+    Mockito.when(request.getParameter("name")).thenReturn(null);
 
     ParamValueProcessor processor = createProcessor("name", String.class, "multi");
     try {
@@ -125,12 +104,7 @@
 
   @Test
   public void testGetValueRequiredFalse() throws Exception {
-    new Expectations() {
-      {
-        request.getParameter("name");
-        result = null;
-      }
-    };
+    Mockito.when(request.getParameter("name")).thenReturn(null);
 
     ParamValueProcessor processor = createProcessor("name", String.class, "test", false, "multi");
     Object result = processor.getValue(request);
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestRestClientRequestImpl.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestRestClientRequestImpl.java
index 9a0e275..10e197b 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestRestClientRequestImpl.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestRestClientRequestImpl.java
@@ -27,8 +27,14 @@
 
 import org.hamcrest.MatcherAssert;
 import org.hamcrest.Matchers;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.EnabledForJreRange;
+import org.junit.jupiter.api.condition.EnabledOnJre;
+import org.junit.jupiter.api.condition.JRE;
+import org.mockito.MockedStatic;
 import org.mockito.Mockito;
 
 import com.google.common.collect.Multimap;
@@ -37,18 +43,21 @@
 import io.vertx.core.MultiMap;
 import io.vertx.core.buffer.Buffer;
 import io.vertx.core.http.HttpClientRequest;
-import mockit.Deencapsulation;
-import mockit.Expectations;
-import mockit.Mock;
-import mockit.MockUp;
-import mockit.Mocked;
 
 public class TestRestClientRequestImpl {
-  @Mocked
   private HttpClientRequest request;
 
-  @Mocked
-  private Context context;
+  private Context context = Mockito.mock(Context.class);
+
+  @BeforeEach
+  public void before() {
+    request = Mockito.mock(HttpClientRequest.class);
+  }
+
+  @AfterEach
+  public void after() {
+    Mockito.reset(request);
+  }
 
   @Test
   public void testForm() throws Exception {
@@ -62,21 +71,13 @@
 
   @Test
   public void testCookie() throws Exception {
-    HttpClientRequest request = new MockUp<HttpClientRequest>() {
+    final MultiMap map = MultiMap.caseInsensitiveMultiMap();
+    Mockito.doAnswer(invocation -> {
+      map.add(io.vertx.core.http.HttpHeaders.COOKIE, "sessionid=abcdefghijklmnopqrstuvwxyz; region=china-north; ");
+      return null;
+    }).when(request).putHeader(io.vertx.core.http.HttpHeaders.COOKIE, "sessionid=abcdefghijklmnopqrstuvwxyz; region=china-north; ");
+    Mockito.when(request.headers()).thenReturn(map);
 
-      final MultiMap map = MultiMap.caseInsensitiveMultiMap();
-
-      @Mock
-      public HttpClientRequest putHeader(CharSequence key, CharSequence val) {
-        map.add(key, val);
-        return null;
-      }
-
-      @Mock
-      public MultiMap headers() {
-        return map;
-      }
-    }.getMockInstance();
     RestClientRequestImpl restClientRequest = new RestClientRequestImpl(request, null, null);
     restClientRequest.addCookie("sessionid", "abcdefghijklmnopqrstuvwxyz");
     restClientRequest.addCookie("region", "china-north");
@@ -89,15 +90,11 @@
   }
 
   @Test
-  public void fileBoundaryInfo_nullSubmittedFileName(@Mocked Part part) {
-    new Expectations() {
-      {
-        part.getSubmittedFileName();
-        result = null;
-        part.getContentType();
-        result = "abc";
-      }
-    };
+  public void fileBoundaryInfo_nullSubmittedFileName() {
+    Part part = Mockito.mock(Part.class);
+    Mockito.when(part.getSubmittedFileName()).thenReturn(null);
+    Mockito.when(part.getContentType()).thenReturn("abc");
+
     RestClientRequestImpl restClientRequest = new RestClientRequestImpl(request, null, null);
     Buffer buffer = restClientRequest.fileBoundaryInfo("boundary", "name", part);
     Assertions.assertEquals("\r\n" +
@@ -109,15 +106,10 @@
   }
 
   @Test
-  public void fileBoundaryInfo_validSubmittedFileName(@Mocked Part part) {
-    new Expectations() {
-      {
-        part.getSubmittedFileName();
-        result = "a.txt";
-        part.getContentType();
-        result = MediaType.TEXT_PLAIN;
-      }
-    };
+  public void fileBoundaryInfo_validSubmittedFileName() {
+    Part part = Mockito.mock(Part.class);
+    Mockito.when(part.getSubmittedFileName()).thenReturn("a.txt");
+    Mockito.when(part.getContentType()).thenReturn(MediaType.TEXT_PLAIN);
     RestClientRequestImpl restClientRequest = new RestClientRequestImpl(request, null, null);
     Buffer buffer = restClientRequest.fileBoundaryInfo("boundary", "name", part);
     Assertions.assertEquals("\r\n" +
@@ -136,7 +128,7 @@
 
     restClientRequest.attach(fileName, part);
 
-    Multimap<String, Part> uploads = Deencapsulation.getField(restClientRequest, "uploads");
+    Multimap<String, Part> uploads = restClientRequest.uploads;
     Assertions.assertEquals(1, uploads.size());
     MatcherAssert.assertThat(uploads.asMap(), Matchers.hasEntry(fileName, Arrays.asList(part)));
   }
@@ -147,32 +139,47 @@
 
     restClientRequest.attach("fileName", null);
 
-    Multimap<String, Part> uploads = Deencapsulation.getField(restClientRequest, "uploads");
+    Multimap<String, Part> uploads = restClientRequest.uploads;
     Assertions.assertTrue(uploads.isEmpty());
   }
 
   @Test
-  public void doEndWithUpload() {
+  @EnabledOnJre(JRE.JAVA_8)
+  public void doEndWithUploadForJre8() {
     Map<String, String> headers = new HashMap<>();
-    new MockUp<HttpClientRequest>(request) {
-      @Mock
-      HttpClientRequest putHeader(String name, String value) {
-        headers.put(name, value);
-        return request;
-      }
-    };
+    Mockito.doAnswer(invocation -> {
+      headers.put(HttpHeaders.CONTENT_TYPE, "multipart/form-data; charset=UTF-8; boundary=boundarynull-null-null-null-null");
+      return null;
+    }).when(request).putHeader(HttpHeaders.CONTENT_TYPE, "multipart/form-data; charset=UTF-8; boundary=boundarynull-null-null-null-null");
 
     UUID uuid = new UUID(0, 0);
-    new Expectations(UUID.class) {
-      {
-        UUID.randomUUID();
-        result = uuid;
-      }
-    };
-    RestClientRequestImpl restClientRequest = new RestClientRequestImpl(request, context, null);
-    restClientRequest.doEndWithUpload();
+    try (MockedStatic<UUID> mockedStatic = Mockito.mockStatic(UUID.class)) {
+      mockedStatic.when(UUID::randomUUID).thenReturn(uuid);
+      RestClientRequestImpl restClientRequest = new RestClientRequestImpl(request, context, null);
+      restClientRequest.doEndWithUpload();
 
-    Assertions.assertEquals("multipart/form-data; charset=UTF-8; boundary=boundary00000000-0000-0000-0000-000000000000",
-        headers.get(HttpHeaders.CONTENT_TYPE));
+      Assertions.assertEquals("multipart/form-data; charset=UTF-8; boundary=boundarynull-null-null-null-null",
+              headers.get(HttpHeaders.CONTENT_TYPE));
+    }
+  }
+
+  @Test
+  @EnabledForJreRange(min = JRE.JAVA_9)
+  public void doEndWithUploadAfterJre8() {
+    Map<String, String> headers = new HashMap<>();
+    Mockito.doAnswer(invocation -> {
+      headers.put(HttpHeaders.CONTENT_TYPE, "multipart/form-data; charset=UTF-8; boundary=boundary00000000-0000-0000-0000-000000000000");
+      return null;
+    }).when(request).putHeader(HttpHeaders.CONTENT_TYPE, "multipart/form-data; charset=UTF-8; boundary=boundary00000000-0000-0000-0000-000000000000");
+
+    UUID uuid = new UUID(0, 0);
+    try (MockedStatic<UUID> mockedStatic = Mockito.mockStatic(UUID.class)) {
+      mockedStatic.when(UUID::randomUUID).thenReturn(uuid);
+      RestClientRequestImpl restClientRequest = new RestClientRequestImpl(request, context, null);
+      restClientRequest.doEndWithUpload();
+
+      Assertions.assertEquals("multipart/form-data; charset=UTF-8; boundary=boundary00000000-0000-0000-0000-000000000000",
+              headers.get(HttpHeaders.CONTENT_TYPE));
+    }
   }
 }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/TestPath.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/TestPath.java
index 2bc4f9a..eb3bceb 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/TestPath.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/TestPath.java
@@ -33,8 +33,7 @@
 import io.swagger.models.parameters.Parameter;
 import io.swagger.models.parameters.PathParameter;
 import io.swagger.models.parameters.QueryParameter;
-import mockit.Mock;
-import mockit.MockUp;
+import org.mockito.Mockito;
 
 public class TestPath {
 
@@ -119,21 +118,12 @@
   @Test
   public void testQueryVarParamWriter() {
     boolean status = true;
-    new MockUp<RestParam>() {
-      @Mock
-      public String getParamName() {
-        return "queryVar";
-      }
-    };
-    new MockUp<QueryVarParamWriter>() {
-      @Mock
-      private Object getParamValue(Object[] args) {
-        return args[0];
-      }
-    };
 
     Parameter parameter = new QueryParameter();
-    QueryVarParamWriter writer = new QueryVarParamWriter(new RestParam(parameter, String.class));
+    RestParam restParam = new RestParam(parameter, String.class);
+    RestParam spy = Mockito.spy(restParam);
+    Mockito.when(spy.getParamName()).thenReturn("queryVar");
+    QueryVarParamWriter writer = new QueryVarParamWriter(spy);
     try {
       Map<String, Object> parameters = new HashMap<>();
       parameters.put("queryVar", "T");
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/TestRestOperationMeta.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/TestRestOperationMeta.java
index 2c1adfb..afefdaf 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/TestRestOperationMeta.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/TestRestOperationMeta.java
@@ -35,6 +35,7 @@
 import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.bootstrap.SCBBootstrap;
 import org.apache.servicecomb.core.definition.OperationMeta;
+import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
 import org.hamcrest.MatcherAssert;
 import org.junit.AfterClass;
@@ -45,7 +46,7 @@
 import com.fasterxml.jackson.annotation.JsonView;
 
 import io.swagger.models.Swagger;
-import mockit.Expectations;
+import org.mockito.Mockito;
 
 public class TestRestOperationMeta {
   @Path("/")
@@ -165,7 +166,7 @@
     scbEngine = SCBBootstrap.createSCBEngineForTest()
         .addProducerMeta("sid1", new RestOperationMetaSchema())
         .run();
-    swagger = scbEngine.getProducerMicroserviceMeta().ensureFindSchemaMeta("sid1").getSwagger();
+    swagger = Mockito.spy(scbEngine.getProducerMicroserviceMeta().ensureFindSchemaMeta("sid1").getSwagger());
   }
 
   @AfterClass
@@ -175,8 +176,11 @@
   }
 
   private void findOperation(String operationId) {
-    meta = scbEngine.getProducerMicroserviceMeta().operationMetas().get("test.sid1." + operationId);
-    operationMeta = RestMetaUtils.getRestOperationMeta(meta);
+    meta = Mockito.spy(scbEngine.getProducerMicroserviceMeta().operationMetas().get("test.sid1." + operationId));
+    operationMeta = Mockito.spy(RestMetaUtils.getRestOperationMeta(meta));
+    SchemaMeta schemaMeta = Mockito.spy(meta.getSchemaMeta());
+    Mockito.when(meta.getSchemaMeta()).thenReturn(schemaMeta);
+    Mockito.when(schemaMeta.getSwagger()).thenReturn(swagger);
   }
 
   @Test
@@ -381,14 +385,9 @@
   @Test
   public void generatesAbsolutePathWithNonRootBasePath() {
     findOperation("textCharJsonChar");
-    new Expectations(swagger) {
-      {
-        swagger.getBasePath();
-        result = "/rest";
-      }
-    };
+    Mockito.when(swagger.getBasePath()).thenReturn("/rest");
     RestOperationMeta restOperationMeta = new RestOperationMeta();
-    restOperationMeta.init(operationMeta.getOperationMeta());
+    restOperationMeta.init(meta);
 
     MatcherAssert.assertThat(restOperationMeta.getAbsolutePath(), is("/rest/textCharJsonChar/"));
   }
@@ -396,20 +395,10 @@
   @Test
   public void generatesAbsolutePathWithNullPath() {
     findOperation("textCharJsonChar");
-    new Expectations(swagger) {
-      {
-        swagger.getBasePath();
-        result = null;
-      }
-    };
-    new Expectations(meta) {
-      {
-        meta.getOperationPath();
-        result = null;
-      }
-    };
+    Mockito.when(swagger.getBasePath()).thenReturn(null);
+    Mockito.when(meta.getOperationPath()).thenReturn(null);
     RestOperationMeta restOperationMeta = new RestOperationMeta();
-    restOperationMeta.init(operationMeta.getOperationMeta());
+    restOperationMeta.init(meta);
 
     MatcherAssert.assertThat(restOperationMeta.getAbsolutePath(), is("/"));
   }
@@ -417,20 +406,10 @@
   @Test
   public void generatesAbsolutePathWithEmptyPath() {
     findOperation("textCharJsonChar");
-    new Expectations(swagger) {
-      {
-        swagger.getBasePath();
-        result = "";
-      }
-    };
-    new Expectations(meta) {
-      {
-        meta.getOperationPath();
-        result = "";
-      }
-    };
+    Mockito.when(swagger.getBasePath()).thenReturn("");
+    Mockito.when(meta.getOperationPath()).thenReturn("");
     RestOperationMeta restOperationMeta = new RestOperationMeta();
-    restOperationMeta.init(operationMeta.getOperationMeta());
+    restOperationMeta.init(meta);
 
     MatcherAssert.assertThat(restOperationMeta.getAbsolutePath(), is("/"));
   }
@@ -438,20 +417,10 @@
   @Test
   public void consecutiveSlashesAreRemoved() {
     findOperation("textCharJsonChar");
-    new Expectations(swagger) {
-      {
-        swagger.getBasePath();
-        result = "//rest//";
-      }
-    };
-    new Expectations(meta) {
-      {
-        meta.getOperationPath();
-        result = "//sayHi//";
-      }
-    };
+    Mockito.when(swagger.getBasePath()).thenReturn("//rest//");
+    Mockito.when(meta.getOperationPath()).thenReturn("//sayHi//");
     RestOperationMeta restOperationMeta = new RestOperationMeta();
-    restOperationMeta.init(operationMeta.getOperationMeta());
+    restOperationMeta.init(meta);
 
     MatcherAssert.assertThat(restOperationMeta.getAbsolutePath(), is("/rest/sayHi/"));
   }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/path/PathVarParamWriterTest.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/path/PathVarParamWriterTest.java
index 81e8658..5aa4db1 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/path/PathVarParamWriterTest.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/path/PathVarParamWriterTest.java
@@ -24,9 +24,7 @@
 import org.apache.servicecomb.common.rest.definition.path.URLPathBuilder.URLPathStringBuilder;
 import org.junit.jupiter.api.Assertions;
 import org.junit.Test;
-
-import mockit.Mock;
-import mockit.MockUp;
+import org.mockito.Mockito;
 
 public class PathVarParamWriterTest {
 
@@ -85,12 +83,8 @@
   }
 
   private PathVarParamWriter createPathVarParamWriter() {
-    RestParam restParam = new MockUp<RestParam>() {
-      @Mock
-      public String getParamName(){
-        return "test";
-      }
-    }.getMockInstance();
+    RestParam restParam = Mockito.mock(RestParam.class);
+    Mockito.when(restParam.getParamName()).thenReturn("test");
     return new PathVarParamWriter(restParam);
   }
 }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/filter/TestHttpServerFilterBeforeSendResponseExecutor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/filter/TestHttpServerFilterBeforeSendResponseExecutor.java
index c004fec..4bb0c20 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/filter/TestHttpServerFilterBeforeSendResponseExecutor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/filter/TestHttpServerFilterBeforeSendResponseExecutor.java
@@ -26,15 +26,15 @@
 import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
 import org.junit.jupiter.api.Assertions;
 
-import mockit.Mocked;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
 
 public class TestHttpServerFilterBeforeSendResponseExecutor {
-  @Mocked
+  @Mock
   Invocation invocation;
 
-  @Mocked
+  @Mock
   HttpServletResponseEx responseEx;
 
   List<HttpServerFilter> httpServerFilters = new ArrayList<>();
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/filter/inner/RestServerCodecFilterTest.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/filter/inner/RestServerCodecFilterTest.java
index 204dfe5..14e9b8f 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/filter/inner/RestServerCodecFilterTest.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/filter/inner/RestServerCodecFilterTest.java
@@ -23,12 +23,13 @@
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
-import java.util.List;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 
+import com.fasterxml.jackson.databind.JavaType;
 import org.apache.servicecomb.common.rest.HttpTransportContext;
 import org.apache.servicecomb.common.rest.RestConst;
+import org.apache.servicecomb.common.rest.codec.produce.ProduceJsonProcessor;
 import org.apache.servicecomb.common.rest.definition.RestOperationMeta;
 import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.core.Endpoint;
@@ -36,7 +37,10 @@
 import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.core.SCBStatus;
 import org.apache.servicecomb.core.bootstrap.SCBBootstrap;
+import org.apache.servicecomb.core.definition.InvocationRuntimeType;
+import org.apache.servicecomb.core.definition.MicroserviceMeta;
 import org.apache.servicecomb.core.definition.OperationMeta;
+import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.filter.FilterNode;
 import org.apache.servicecomb.core.invocation.InvocationFactory;
 import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
@@ -52,29 +56,30 @@
 
 import io.vertx.core.MultiMap;
 import io.vertx.core.json.Json;
-import mockit.Expectations;
-import mockit.Mocked;
-import mockit.Verifications;
+import org.mockito.Mockito;
+
+import javax.servlet.http.Part;
 
 public class RestServerCodecFilterTest {
   RestServerCodecFilter codecFilter = new RestServerCodecFilter();
 
   Invocation invocation;
 
-  @Mocked
-  Endpoint endpoint;
+  Endpoint endpoint = Mockito.mock(Endpoint.class);
 
-  @Mocked
-  OperationMeta operationMeta;
+  OperationMeta operationMeta = Mockito.mock(OperationMeta.class);
 
-  @Mocked
-  RestOperationMeta restOperationMeta;
+  SchemaMeta schemaMeta = Mockito.mock(SchemaMeta.class);
 
-  @Mocked
-  HttpTransportContext transportContext;
+  MicroserviceMeta microserviceMeta = Mockito.mock(MicroserviceMeta.class);
 
-  @Mocked
-  HttpServletResponseEx responseEx;
+  InvocationRuntimeType invocationRuntimeType = Mockito.mock(InvocationRuntimeType.class);
+
+  RestOperationMeta restOperationMeta = Mockito.mock(RestOperationMeta.class);
+
+  HttpTransportContext transportContext = Mockito.mock(HttpTransportContext.class);
+
+  HttpServletResponseEx responseEx = Mockito.mock(HttpServletResponseEx.class);
 
   MultiMap headers = MultiMap.caseInsensitiveMultiMap();
 
@@ -103,45 +108,36 @@
 
   @Before
   public void setUp() {
-    invocation = InvocationFactory.forProvider(endpoint, operationMeta, null);
+    Mockito.when(operationMeta.getSchemaMeta()).thenReturn(schemaMeta);
+    Mockito.when(schemaMeta.getMicroserviceMeta()).thenReturn(microserviceMeta);
+    Mockito.when(microserviceMeta.getHandlerChain()).thenReturn(new ArrayList<>());
+    Mockito.when(operationMeta.buildBaseProviderRuntimeType()).thenReturn(invocationRuntimeType);
+    Mockito.when(transportContext.getProduceProcessor()).thenReturn(Mockito.mock(ProduceJsonProcessor.class));
+    invocation = Mockito.spy(InvocationFactory.forProvider(endpoint, operationMeta, null));
   }
 
   private void mockDecodeRequestFail() {
-    new Expectations(invocation) {
-      {
-        invocation.getTransportContext();
-        result = transportContext;
-
-        invocation.getRequestEx();
-        result = new RuntimeExceptionWithoutStackTrace("mock encode request failed");
-      }
-    };
+    Mockito.when(invocation.getTransportContext()).thenReturn(transportContext);
+    Mockito.when(transportContext.getResponseEx()).thenReturn(responseEx);
+    Mockito.when(invocation.getRequestEx()).thenThrow(new RuntimeExceptionWithoutStackTrace("mock encode request failed"));
   }
 
   @Test
-  public void should_not_invoke_filter_when_decode_request_failed(@Mocked FilterNode nextNode) {
+  public void should_not_invoke_filter_when_decode_request_failed() {
+    FilterNode nextNode = Mockito.mock(FilterNode.class);
     mockDecodeRequestFail();
 
     codecFilter.onFilter(invocation, nextNode);
 
-    new Verifications() {
-      {
-        nextNode.onFilter(invocation);
-        times = 0;
-      }
-    };
+    Mockito.verify(nextNode, Mockito.times(0)).onFilter(invocation);
   }
 
   @Test
   public void should_convert_exception_to_response_when_decode_request_failed()
       throws ExecutionException, InterruptedException {
     mockDecodeRequestFail();
-    new Expectations(invocation) {
-      {
-        invocation.findResponseType(anyInt);
-        result = TypeFactory.defaultInstance().constructType(String.class);
-      }
-    };
+    Mockito.when(invocation.findResponseType(INTERNAL_SERVER_ERROR.getStatusCode()))
+            .thenReturn(TypeFactory.defaultInstance().constructType(String.class));
 
     Response response = codecFilter.onFilter(invocation, nextNode).get();
 
@@ -151,18 +147,14 @@
   }
 
   private void success_invocation() throws InterruptedException, ExecutionException {
-    new Expectations(invocation) {
-      {
-        invocation.getTransportContext();
-        result = transportContext;
-
-        operationMeta.getExtData(RestConst.SWAGGER_REST_OPERATION);
-        result = restOperationMeta;
-
-        invocation.findResponseType(anyInt);
-        result = TypeFactory.defaultInstance().constructType(String.class);
-      }
-    };
+    Mockito.when(invocation.getTransportContext()).thenReturn(transportContext);
+    Mockito.when(operationMeta.getExtData(RestConst.SWAGGER_REST_OPERATION)).thenReturn(restOperationMeta);
+    Mockito.when(invocation.findResponseType(INTERNAL_SERVER_ERROR.getStatusCode())).thenReturn(TypeFactory.defaultInstance().constructType(String.class));
+    JavaType javaType = Mockito.mock(JavaType.class);
+    Mockito.when(invocationRuntimeType.findResponseType(200)).thenReturn(javaType);
+    Mockito.when(javaType.getRawClass()).thenAnswer(invocationOnMock -> Part.class);
+    Mockito.when(invocation.getTransportContext()).thenReturn(transportContext);
+    Mockito.when(transportContext.getResponseEx()).thenReturn(responseEx);
 
     codecFilter.onFilter(invocation, nextNode).get();
   }
@@ -172,15 +164,7 @@
     headers.add("h1", "v1");
     success_invocation();
 
-    new Verifications() {
-      {
-        String name;
-        String value;
-        responseEx.addHeader(name = withCapture(), value = withCapture());
-        assertThat(name).isEqualTo("h1");
-        assertThat(value).isEqualTo("v1");
-      }
-    };
+   Mockito.verify(responseEx).addHeader("h1", "v1");
   }
 
   @Test
@@ -190,15 +174,8 @@
         .add(CONTENT_LENGTH, "10");
     success_invocation();
 
-    new Verifications() {
-      {
-        List<String> names = new ArrayList<>();
-        List<String> values = new ArrayList<>();
-        responseEx.addHeader(withCapture(names), withCapture(values));
-        assertThat(names).containsExactly("h1", "h2");
-        assertThat(values).containsExactly("v1", "v2");
-      }
-    };
+    Mockito.verify(responseEx, Mockito.times(1)).addHeader("h1", "v1");
+    Mockito.verify(responseEx, Mockito.times(1)).addHeader("h2", "v2");
   }
 
   @Test
@@ -208,14 +185,7 @@
         .add(TRANSFER_ENCODING, "test");
     success_invocation();
 
-    new Verifications() {
-      {
-        List<String> names = new ArrayList<>();
-        List<String> values = new ArrayList<>();
-        responseEx.addHeader(withCapture(names), withCapture(values));
-        assertThat(names).containsExactly("h1", "h2");
-        assertThat(values).containsExactly("v1", "v2");
-      }
-    };
+    Mockito.verify(responseEx, Mockito.times(1)).addHeader("h1", "v1");
+    Mockito.verify(responseEx, Mockito.times(1)).addHeader("h2", "v2");
   }
 }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/filter/inner/TestServerRestArgsFilter.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/filter/inner/TestServerRestArgsFilter.java
index 30d6a45..2a190a0 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/filter/inner/TestServerRestArgsFilter.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/filter/inner/TestServerRestArgsFilter.java
@@ -16,16 +16,11 @@
  */
 package org.apache.servicecomb.common.rest.filter.inner;
 
-import java.util.concurrent.CompletableFuture;
-
 import javax.servlet.http.Part;
 
 import org.apache.servicecomb.common.rest.RestConst;
 import org.apache.servicecomb.common.rest.codec.RestObjectMapperFactory;
-import org.apache.servicecomb.common.rest.definition.RestMetaUtils;
-import org.apache.servicecomb.common.rest.definition.RestOperationMeta;
 import org.apache.servicecomb.core.Invocation;
-import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
 import org.apache.servicecomb.swagger.invocation.Response;
 import org.apache.servicecomb.swagger.invocation.response.ResponsesMeta;
@@ -33,55 +28,37 @@
 import org.junit.Test;
 
 import com.fasterxml.jackson.databind.type.TypeFactory;
+import org.mockito.Mockito;
 
-import mockit.Expectations;
-import mockit.Mock;
-import mockit.MockUp;
-import mockit.Mocked;
 
 public class TestServerRestArgsFilter {
-  @Mocked
-  Invocation invocation;
 
-  @Mocked
-  HttpServletResponseEx responseEx;
+  Invocation invocation = Mockito.mock(Invocation.class);
 
-  @Mocked
-  Response response;
+  HttpServletResponseEx responseEx = Mockito.mock(HttpServletResponseEx.class);
 
-  @Mocked
-  Part part;
+  Response response = Mockito.mock(Response.class);
 
-  @Mocked
-  OperationMeta operationMeta;
+  Part part = Mockito.mock(Part.class);
 
   boolean invokedSendPart;
 
   ServerRestArgsFilter filter = new ServerRestArgsFilter();
 
   @Test
-  public void asyncBeforeSendResponse_part(@Mocked RestOperationMeta restOperationMeta) {
+  public void asyncBeforeSendResponse_part() {
     ResponsesMeta responsesMeta = new ResponsesMeta();
     responsesMeta.getResponseMap().put(202, RestObjectMapperFactory.getRestObjectMapper().constructType(Part.class));
-    new Expectations(RestMetaUtils.class) {
-      {
-        responseEx.getAttribute(RestConst.INVOCATION_HANDLER_RESPONSE);
-        result = response;
-        response.getResult();
-        result = part;
-        response.getStatusCode();
-        result = 202;
-        invocation.findResponseType(202);
-        result = TypeFactory.defaultInstance().constructType(Part.class);
-      }
-    };
-    new MockUp<HttpServletResponseEx>(responseEx) {
-      @Mock
-      CompletableFuture<Void> sendPart(Part body) {
-        invokedSendPart = true;
-        return null;
-      }
-    };
+
+    Mockito.when(responseEx.getAttribute(RestConst.INVOCATION_HANDLER_RESPONSE)).thenReturn(response);
+    Mockito.when(response.getResult()).thenReturn(part);
+    Mockito.when(response.getStatusCode()).thenReturn(202);
+    Mockito.when(invocation.findResponseType(202)).thenReturn(TypeFactory.defaultInstance().constructType(Part.class));
+
+    Mockito.doAnswer(invocationOnMock -> {
+      invokedSendPart = true;
+      return null;
+    }).when(responseEx).sendPart(part);
 
     Assertions.assertNull(filter.beforeSendResponseAsync(invocation, responseEx));
     Assertions.assertTrue(invokedSendPart);
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/locator/TestMicroservicePaths.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/locator/TestMicroservicePaths.java
index 70aeabf..2a0b664 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/locator/TestMicroservicePaths.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/locator/TestMicroservicePaths.java
@@ -28,10 +28,7 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.jupiter.api.Assertions;
-
-import mockit.Deencapsulation;
-import mockit.Expectations;
-import mockit.Mocked;
+import org.mockito.Mockito;
 
 public class TestMicroservicePaths {
   static SCBEngine scbEngine;
@@ -46,7 +43,7 @@
         .run();
 
     ServicePathManager spm = ServicePathManager.getServicePathManager(scbEngine.getProducerMicroserviceMeta());
-    paths = Deencapsulation.getField(spm, "producerPaths");
+    paths = spm.producerPaths;
   }
 
   @AfterClass
@@ -65,17 +62,12 @@
   }
 
   @Test
-  public void testAddResourceStaticDuplicatedHttpMethod(@Mocked RestOperationMeta staticResPost) {
-    new Expectations() {
-      {
-        staticResPost.getHttpMethod();
-        result = "POST";
-        staticResPost.getAbsolutePath();
-        result = "/static/";
-        staticResPost.isAbsoluteStaticPath();
-        result = true;
-      }
-    };
+  public void testAddResourceStaticDuplicatedHttpMethod() {
+    RestOperationMeta staticResPost = Mockito.mock(RestOperationMeta.class);
+    Mockito.when(staticResPost.getHttpMethod()).thenReturn("POST");
+    Mockito.when(staticResPost.getAbsolutePath()).thenReturn("/static/");
+    Mockito.when(staticResPost.isAbsoluteStaticPath()).thenReturn(true);
+
 
     ServiceCombException exception = Assertions.assertThrows(ServiceCombException.class,
             () -> paths.addResource(staticResPost));
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/resource/TestClassPathStaticResourceHandler.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/resource/TestClassPathStaticResourceHandler.java
index 66ec649..144b67c 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/resource/TestClassPathStaticResourceHandler.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/resource/TestClassPathStaticResourceHandler.java
@@ -33,8 +33,7 @@
 import org.junit.jupiter.api.Assertions;
 import org.junit.BeforeClass;
 import org.junit.Test;
-
-import mockit.Expectations;
+import org.mockito.Mockito;
 
 public class TestClassPathStaticResourceHandler {
   static ClassPathStaticResourceHandler handler = new ClassPathStaticResourceHandler();
@@ -83,12 +82,9 @@
 
   @Test
   public void readContentFailed() throws IOException {
-    new Expectations(handler) {
-      {
-        handler.findResource(anyString);
-        result = new RuntimeExceptionWithoutStackTrace("read content failed.");
-      }
-    };
+    handler = Mockito.spy(TestClassPathStaticResourceHandler.handler);
+    Mockito.when(handler.findResource("web-root/index.html"))
+            .thenThrow(new RuntimeExceptionWithoutStackTrace("read content failed."));
 
     try (LogCollector logCollector = new LogCollector()) {
       Response response = handler.handle("index.html");
diff --git a/core/src/main/java/org/apache/servicecomb/core/Invocation.java b/core/src/main/java/org/apache/servicecomb/core/Invocation.java
index d11dad5..b1b48c7 100644
--- a/core/src/main/java/org/apache/servicecomb/core/Invocation.java
+++ b/core/src/main/java/org/apache/servicecomb/core/Invocation.java
@@ -27,6 +27,7 @@
 import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicLong;
 
+import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.servicecomb.core.definition.InvocationRuntimeType;
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
@@ -160,6 +161,11 @@
     return schemaMeta.getMicroserviceMeta().getHandlerChain();
   }
 
+  @VisibleForTesting
+  public void setHandlerList(List<Handler> handlerList) {
+    this.handlerList = handlerList;
+  }
+
   public Executor getResponseExecutor() {
     return responseExecutor;
   }