diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationIT.java b/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationIT.java
index c4d1b3e..19269f0 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationIT.java
@@ -98,7 +98,7 @@
 
     Project.NameKey sourceProject = createTestProject("foo");
 
-    assertReplicationTaskCount("refs/meta/config", 1);
+    assertThat(listReplicationTasks("refs/meta/config")).hasSize(1);
 
     waitUntil(() -> projectExists(Project.nameKey(sourceProject + "replica.git")));
 
@@ -117,7 +117,7 @@
     RevCommit sourceCommit = pushResult.getCommit();
     String sourceRef = pushResult.getPatchSet().refName();
 
-    assertReplicationTaskCount("refs/changes/\\d*/\\d*/\\d*", 1);
+    assertThat(listReplicationTasks("refs/changes/\\d*/\\d*/\\d*")).hasSize(1);
 
     try (Repository repo = repoManager.openRepository(targetProject)) {
       waitUntil(() -> checkedGetRef(repo, sourceRef) != null);
@@ -140,7 +140,7 @@
     input.revision = master;
     gApi.projects().name(project.get()).branch(newBranch).create(input);
 
-    assertReplicationTaskCount("refs/heads/(mybranch|master)", 2);
+    assertThat(listReplicationTasks("refs/heads/(mybranch|master)")).hasSize(2);
 
     try (Repository repo = repoManager.openRepository(targetProject);
         Repository sourceRepo = repoManager.openRepository(project)) {
@@ -166,7 +166,7 @@
     RevCommit sourceCommit = pushResult.getCommit();
     String sourceRef = pushResult.getPatchSet().refName();
 
-    assertReplicationTaskCount("refs/changes/\\d*/\\d*/\\d*", 2);
+    assertThat(listReplicationTasks("refs/changes/\\d*/\\d*/\\d*")).hasSize(2);
 
     try (Repository repo1 = repoManager.openRepository(targetProject1);
         Repository repo2 = repoManager.openRepository(targetProject2)) {
@@ -198,7 +198,7 @@
 
     createChange();
 
-    assertReplicationTaskCount("refs/changes/\\d*/\\d*/\\d*", 4);
+    assertThat(listReplicationTasks("refs/changes/\\d*/\\d*/\\d*")).hasSize(4);
 
     setReplicationDestination("foo1", replicaSuffixes, ALL_PROJECTS);
     setReplicationDestination("foo2", replicaSuffixes, ALL_PROJECTS);
@@ -234,7 +234,7 @@
         .getInstance(ReplicationQueue.class)
         .scheduleFullSync(project, null, new ReplicationState(pushResultProcessing), true);
 
-    assertReplicationTaskCount(".*all.*", 1);
+    assertThat(listReplicationTasks(".*all.*")).hasSize(1);
   }
 
   @Test
@@ -397,10 +397,6 @@
     return projectOperations.newProject().name(name).create();
   }
 
-  private void assertReplicationTaskCount(String refRegex, int expectedCount) throws Exception {
-    waitUntil(() -> listReplicationTasks(refRegex).size() == expectedCount);
-  }
-
   private List<ReplicateRefUpdate> listReplicationTasks(String refRegex) {
     Pattern refmaskPattern = Pattern.compile(refRegex);
     return tasksStorage.listWaiting().stream()
