diff --git a/.gitignore b/.gitignore
index 72f041f..78857a0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
 /.settings/
 /bazel-*
 /eclipse-out/
+/.apt_generated/
diff --git a/WORKSPACE b/WORKSPACE
index 107f1b4..a31b6df 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "a029d8e41d6211c8b23052aa0a0c2c7649577e85",
+    commit = "87fd5f0d0a89d01df13deaf2d21a4bdb3bc03cfd",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
diff --git a/src/test/java/com/ericsson/gerrit/plugins/heartbeat/HeartbeatDaemonTest.java b/src/test/java/com/ericsson/gerrit/plugins/heartbeat/HeartbeatDaemonTest.java
index 35c8347..0b796ff 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/heartbeat/HeartbeatDaemonTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/heartbeat/HeartbeatDaemonTest.java
@@ -14,14 +14,11 @@
 
 package com.ericsson.gerrit.plugins.heartbeat;
 
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.isA;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.reset;
-import static org.easymock.EasyMock.verify;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.gerrit.server.events.EventDispatcher;
@@ -36,27 +33,19 @@
   @SuppressWarnings("unchecked")
   @Before
   public void setUp() throws Exception {
-    eventDispatcherMock = createNiceMock(EventDispatcher.class);
-    replay(eventDispatcherMock);
-    DynamicItem<EventDispatcher> dynamicEventDispatcherMock = createNiceMock(DynamicItem.class);
-    expect(dynamicEventDispatcherMock.get()).andReturn(eventDispatcherMock).anyTimes();
-    replay(dynamicEventDispatcherMock);
-    HeartbeatConfig heartbeatConfigMock = createMock(HeartbeatConfig.class);
-    expect(heartbeatConfigMock.getDelay()).andReturn(1).anyTimes();
-    replay(heartbeatConfigMock);
+    eventDispatcherMock = mock(EventDispatcher.class);
+    DynamicItem<EventDispatcher> dynamicEventDispatcherMock = mock(DynamicItem.class);
+    when(dynamicEventDispatcherMock.get()).thenReturn(eventDispatcherMock);
+    HeartbeatConfig heartbeatConfigMock = mock(HeartbeatConfig.class);
+    when(heartbeatConfigMock.getDelay()).thenReturn(1);
     heartbeatDaemon = new HeartbeatDaemon(dynamicEventDispatcherMock, heartbeatConfigMock);
   }
 
   @Test
   public void thatDaemonSendsHeartbeatEvents() throws Exception {
-    reset(eventDispatcherMock);
-    eventDispatcherMock.postEvent(isA(HeartbeatEvent.class));
-    expectLastCall().atLeastOnce();
-    replay(eventDispatcherMock);
-
     heartbeatDaemon.start();
     TimeUnit.MILLISECONDS.sleep(500);
-    verify(eventDispatcherMock);
+    verify(eventDispatcherMock, atLeastOnce()).postEvent(any(HeartbeatEvent.class));
     heartbeatDaemon.stop();
   }
 }
