diff --git a/javatests/com/google/gerrit/httpd/AllowRenderInFrameFilterTest.java b/javatests/com/google/gerrit/httpd/AllowRenderInFrameFilterTest.java
index 0d6d482..2679829 100644
--- a/javatests/com/google/gerrit/httpd/AllowRenderInFrameFilterTest.java
+++ b/javatests/com/google/gerrit/httpd/AllowRenderInFrameFilterTest.java
@@ -17,53 +17,41 @@
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.gerrit.httpd.AllowRenderInFrameFilter.X_FRAME_OPTIONS_HEADER_NAME;
 import static com.google.gerrit.testing.GerritJUnit.assertThrows;
-import static org.easymock.EasyMock.expectLastCall;
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 
 import com.google.gerrit.httpd.AllowRenderInFrameFilter.XFrameOption;
-import com.google.gerrit.testing.GerritBaseTests;
 import java.io.IOException;
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import org.easymock.EasyMockSupport;
 import org.eclipse.jgit.lib.Config;
-import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
 
-public class AllowRenderInFrameFilterTest extends GerritBaseTests {
+@RunWith(MockitoJUnitRunner.class)
+public class AllowRenderInFrameFilterTest {
 
-  Config cfg;
-  ServletRequest request;
-  HttpServletResponse response;
-  FilterChain filterChain;
-
-  EasyMockSupport ems = new EasyMockSupport();
-
-  @Before
-  public void setup() throws IOException, ServletException {
-    cfg = new Config();
-    request = ems.createMock(ServletRequest.class);
-    response = ems.createMock(HttpServletResponse.class);
-    filterChain = ems.createMock(FilterChain.class);
-    ems.resetAll();
-    // we want to make sure that doFilter is always called
-    filterChain.doFilter(request, response);
-  }
+  private Config cfg = new Config();
+  @Mock ServletRequest request;
+  @Mock HttpServletResponse response;
+  @Mock FilterChain filterChain;
 
   @Test
   public void shouldDenyInFrameRenderingWhenCanRenderInFrameIsFalse()
       throws IOException, ServletException {
     cfg.setBoolean("gerrit", null, "canLoadInIFrame", false);
 
-    response.addHeader(X_FRAME_OPTIONS_HEADER_NAME, "DENY");
-    expectLastCall().times(1);
-    ems.replayAll();
-
     AllowRenderInFrameFilter objectUnderTest = new AllowRenderInFrameFilter(cfg);
     objectUnderTest.doFilter(request, response, filterChain);
 
-    ems.verifyAll();
+    verify(response, times(1)).addHeader(X_FRAME_OPTIONS_HEADER_NAME, "DENY");
   }
 
   @Test
@@ -72,14 +60,10 @@
     cfg.setBoolean("gerrit", null, "canLoadInIFrame", false);
     cfg.setEnum("gerrit", null, "xframeOption", XFrameOption.SAMEORIGIN);
 
-    response.addHeader(X_FRAME_OPTIONS_HEADER_NAME, "DENY");
-    expectLastCall().times(1);
-    ems.replayAll();
-
     AllowRenderInFrameFilter objectUnderTest = new AllowRenderInFrameFilter(cfg);
     objectUnderTest.doFilter(request, response, filterChain);
 
-    ems.verifyAll();
+    verify(response, times(1)).addHeader(X_FRAME_OPTIONS_HEADER_NAME, "DENY");
   }
 
   @Test
@@ -88,14 +72,10 @@
     cfg.setBoolean("gerrit", null, "canLoadInIFrame", false);
     cfg.setEnum("gerrit", null, "xframeOption", XFrameOption.ALLOW);
 
-    response.addHeader(X_FRAME_OPTIONS_HEADER_NAME, "DENY");
-    expectLastCall().times(1);
-    ems.replayAll();
-
     AllowRenderInFrameFilter objectUnderTest = new AllowRenderInFrameFilter(cfg);
     objectUnderTest.doFilter(request, response, filterChain);
 
-    ems.verifyAll();
+    verify(response, times(1)).addHeader(X_FRAME_OPTIONS_HEADER_NAME, "DENY");
   }
 
   @Test
@@ -103,14 +83,10 @@
       throws IOException, ServletException {
     cfg.setBoolean("gerrit", null, "canLoadInIFrame", true);
 
-    response.addHeader(X_FRAME_OPTIONS_HEADER_NAME, "SAMEORIGIN");
-    expectLastCall().times(1);
-    ems.replayAll();
-
     AllowRenderInFrameFilter objectUnderTest = new AllowRenderInFrameFilter(cfg);
     objectUnderTest.doFilter(request, response, filterChain);
 
-    ems.verifyAll();
+    verify(response, times(1)).addHeader(X_FRAME_OPTIONS_HEADER_NAME, "SAMEORIGIN");
   }
 
   @Test
@@ -118,12 +94,11 @@
       throws IOException, ServletException {
     cfg.setBoolean("gerrit", null, "canLoadInIFrame", true);
     cfg.setEnum("gerrit", null, "xframeOption", XFrameOption.ALLOW);
-    ems.replayAll();
 
     AllowRenderInFrameFilter objectUnderTest = new AllowRenderInFrameFilter(cfg);
     objectUnderTest.doFilter(request, response, filterChain);
 
-    ems.verifyAll();
+    verify(response, never()).addHeader(eq(X_FRAME_OPTIONS_HEADER_NAME), anyString());
   }
 
   @Test
@@ -132,14 +107,10 @@
     cfg.setBoolean("gerrit", null, "canLoadInIFrame", true);
     cfg.setEnum("gerrit", null, "xframeOption", XFrameOption.SAMEORIGIN);
 
-    response.addHeader(X_FRAME_OPTIONS_HEADER_NAME, "SAMEORIGIN");
-    expectLastCall().times(1);
-    ems.replayAll();
-
     AllowRenderInFrameFilter objectUnderTest = new AllowRenderInFrameFilter(cfg);
     objectUnderTest.doFilter(request, response, filterChain);
 
-    ems.verifyAll();
+    verify(response, times(1)).addHeader(X_FRAME_OPTIONS_HEADER_NAME, "SAMEORIGIN");
   }
 
   @Test
@@ -147,14 +118,10 @@
     cfg.setBoolean("gerrit", null, "canLoadInIFrame", true);
     cfg.setString("gerrit", null, "xframeOption", "sameOrigin");
 
-    response.addHeader(X_FRAME_OPTIONS_HEADER_NAME, "SAMEORIGIN");
-    expectLastCall().times(1);
-    ems.replayAll();
-
     AllowRenderInFrameFilter objectUnderTest = new AllowRenderInFrameFilter(cfg);
     objectUnderTest.doFilter(request, response, filterChain);
 
-    ems.verifyAll();
+    verify(response, times(1)).addHeader(X_FRAME_OPTIONS_HEADER_NAME, "SAMEORIGIN");
   }
 
   @Test
