diff --git a/javatests/com/google/gerrit/plugins/checks/rules/ChecksSubmitRuleTest.java b/javatests/com/google/gerrit/plugins/checks/rules/ChecksSubmitRuleTest.java
index 2d75e6b..ebfac2e 100644
--- a/javatests/com/google/gerrit/plugins/checks/rules/ChecksSubmitRuleTest.java
+++ b/javatests/com/google/gerrit/plugins/checks/rules/ChecksSubmitRuleTest.java
@@ -16,9 +16,9 @@
 
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth8.assertThat;
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import com.google.gerrit.common.data.SubmitRecord;
 import com.google.gerrit.plugins.checks.Checks;
@@ -30,21 +30,18 @@
 import com.google.gerrit.server.util.time.TimeUtil;
 import java.io.IOException;
 import java.util.Optional;
-import org.easymock.EasyMock;
 import org.eclipse.jgit.lib.ObjectId;
 import org.junit.Test;
 
 public class ChecksSubmitRuleTest {
   @Test
   public void loadingCurrentPatchSetFails() throws Exception {
-    ChecksSubmitRule checksSubmitRule =
-        new ChecksSubmitRule(EasyMock.createStrictMock(Checks.class));
+    ChecksSubmitRule checksSubmitRule = new ChecksSubmitRule(mock(Checks.class));
 
-    ChangeData cd = EasyMock.createStrictMock(ChangeData.class);
-    expect(cd.project()).andReturn(Project.nameKey("My-Project"));
-    expect(cd.getId()).andReturn(Change.id(1));
-    expect(cd.currentPatchSet()).andThrow(new IllegalStateException("Fail for test"));
-    replay(cd);
+    ChangeData cd = mock(ChangeData.class);
+    when(cd.project()).thenReturn(Project.nameKey("My-Project"));
+    when(cd.getId()).thenReturn(Change.id(1));
+    when(cd.currentPatchSet()).thenThrow(new IllegalStateException("Fail for test"));
 
     Optional<SubmitRecord> submitRecords = checksSubmitRule.evaluate(cd);
     assertErrorRecord(submitRecords, "failed to load the current patch set of change 1");
@@ -52,26 +49,24 @@
 
   @Test
   public void getCombinedCheckStateFails() throws Exception {
-    Checks checks = EasyMock.createStrictMock(Checks.class);
-    expect(checks.areAllRequiredCheckersPassing(anyObject(), anyObject()))
-        .andThrow(new IOException("Fail for test"));
-    replay(checks);
+    Checks checks = mock(Checks.class);
+    when(checks.areAllRequiredCheckersPassing(any(), any()))
+        .thenThrow(new IOException("Fail for test"));
 
     ChecksSubmitRule checksSubmitRule = new ChecksSubmitRule(checks);
 
     Change.Id changeId = Change.id(1);
-    ChangeData cd = EasyMock.createStrictMock(ChangeData.class);
-    expect(cd.project()).andReturn(Project.nameKey("My-Project"));
-    expect(cd.getId()).andReturn(Change.id(1));
-    expect(cd.currentPatchSet())
-        .andReturn(
+    ChangeData cd = mock(ChangeData.class);
+    when(cd.project()).thenReturn(Project.nameKey("My-Project"));
+    when(cd.getId()).thenReturn(Change.id(1));
+    when(cd.currentPatchSet())
+        .thenReturn(
             PatchSet.builder()
                 .id(PatchSet.id(changeId, 1))
                 .commitId(ObjectId.zeroId())
                 .uploader(Account.id(1000))
                 .createdOn(TimeUtil.nowTs())
                 .build());
-    replay(cd);
 
     Optional<SubmitRecord> submitRecords = checksSubmitRule.evaluate(cd);
     assertErrorRecord(submitRecords, "failed to evaluate check states for change 1");
