Use assertThrows instead of ExpectedException

This change is based on one generated by an automated refactoring tool.
See [1] for context.

The refactoring tool used Hamcrest matches to assert over the cause of
an exception; replace those manually with the Truth equivalent
.hasCauseThat().

[1] https://gerrit-review.googlesource.com/c/gerrit/+/223155

Change-Id: Icfba83fb225e7f14e1daefbe82483fbf8a76dd2c
diff --git a/javatests/com/google/gerrit/plugins/checks/acceptance/CheckerRefsIT.java b/javatests/com/google/gerrit/plugins/checks/acceptance/CheckerRefsIT.java
index 538c062..1fb36a4 100644
--- a/javatests/com/google/gerrit/plugins/checks/acceptance/CheckerRefsIT.java
+++ b/javatests/com/google/gerrit/plugins/checks/acceptance/CheckerRefsIT.java
@@ -18,6 +18,7 @@
 import static com.google.gerrit.acceptance.GitUtil.deleteRef;
 import static com.google.gerrit.acceptance.GitUtil.fetch;
 import static com.google.gerrit.server.group.SystemGroupBackend.REGISTERED_USERS;
+import static com.google.gerrit.testing.GerritJUnit.assertThrows;
 
 import com.google.gerrit.acceptance.PushOneCommit;
 import com.google.gerrit.acceptance.SkipProjectClone;
@@ -174,9 +175,10 @@
 
     grant(allProjects, CheckerRef.REFS_CHECKERS + "*", Permission.SUBMIT);
 
-    exception.expect(ResourceConflictException.class);
-    exception.expectMessage("submit to checker ref not allowed");
-    gApi.changes().id(changeId).current().submit();
+    ResourceConflictException thrown =
+        assertThrows(
+            ResourceConflictException.class, () -> gApi.changes().id(changeId).current().submit());
+    assertThat(thrown).hasMessageThat().contains("submit to checker ref not allowed");
   }
 
   @Test
@@ -257,9 +259,9 @@
     input.baseCommit = head.name();
     input.subject = "A change.";
 
-    exception.expect(ResourceConflictException.class);
-    exception.expectMessage("creating change for checker ref not allowed");
-    gApi.changes().create(input);
+    ResourceConflictException thrown =
+        assertThrows(ResourceConflictException.class, () -> gApi.changes().create(input));
+    assertThat(thrown).hasMessageThat().contains("creating change for checker ref not allowed");
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/checks/acceptance/api/CreateCheckIT.java b/javatests/com/google/gerrit/plugins/checks/acceptance/api/CreateCheckIT.java
index 00c876a..808027b 100644
--- a/javatests/com/google/gerrit/plugins/checks/acceptance/api/CreateCheckIT.java
+++ b/javatests/com/google/gerrit/plugins/checks/acceptance/api/CreateCheckIT.java
@@ -16,6 +16,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth8.assertThat;
+import static com.google.gerrit.testing.GerritJUnit.assertThrows;
 
 import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations;
 import com.google.gerrit.extensions.restapi.AuthException;
@@ -100,9 +101,11 @@
 
   @Test
   public void cannotCreateCheckWithoutCheckerUuid() throws Exception {
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("checker UUID is required");
-    checksApiFactory.revision(patchSetId).create(new CheckInput());
+    BadRequestException thrown =
+        assertThrows(
+            BadRequestException.class,
+            () -> checksApiFactory.revision(patchSetId).create(new CheckInput()));
+    assertThat(thrown).hasMessageThat().contains("checker UUID is required");
   }
 
   @Test
@@ -165,9 +168,10 @@
     input.checkerUuid = checkerUuid.get();
     input.url = CheckTestData.INVALID_URL;
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("only http/https URLs supported: " + input.url);
-    checksApiFactory.revision(patchSetId).create(input);
+    BadRequestException thrown =
+        assertThrows(
+            BadRequestException.class, () -> checksApiFactory.revision(patchSetId).create(input));
+    assertThat(thrown).hasMessageThat().contains("only http/https URLs supported: " + input.url);
   }
 
   @Test
@@ -202,9 +206,10 @@
     input.checkerUuid = CheckerTestData.INVALID_UUID;
     input.state = CheckState.RUNNING;
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("invalid checker UUID: " + input.checkerUuid);
-    checksApiFactory.revision(patchSetId).create(input);
+    BadRequestException thrown =
+        assertThrows(
+            BadRequestException.class, () -> checksApiFactory.revision(patchSetId).create(input));
+    assertThat(thrown).hasMessageThat().contains("invalid checker UUID: " + input.checkerUuid);
   }
 
   @Test
@@ -213,9 +218,11 @@
     input.checkerUuid = "foo:non-existing";
     input.state = CheckState.RUNNING;
 
-    exception.expect(UnprocessableEntityException.class);
-    exception.expectMessage("checker " + input.checkerUuid + " not found");
-    checksApiFactory.revision(patchSetId).create(input);
+    UnprocessableEntityException thrown =
+        assertThrows(
+            UnprocessableEntityException.class,
+            () -> checksApiFactory.revision(patchSetId).create(input));
+    assertThat(thrown).hasMessageThat().contains("checker " + input.checkerUuid + " not found");
   }
 
   @Test
@@ -227,9 +234,10 @@
     input.checkerUuid = checkerUuid.get();
     input.state = CheckState.RUNNING;
 
-    exception.expect(RestApiException.class);
-    exception.expectMessage("Cannot create check");
-    checksApiFactory.revision(patchSetId).create(input);
+    RestApiException thrown =
+        assertThrows(
+            RestApiException.class, () -> checksApiFactory.revision(patchSetId).create(input));
+    assertThat(thrown).hasMessageThat().contains("Cannot create check");
   }
 
   @Test
@@ -324,9 +332,10 @@
     input.checkerUuid = checkerUuid.get();
     input.state = CheckState.RUNNING;
 
-    exception.expect(AuthException.class);
-    exception.expectMessage("not permitted");
-    checksApiFactory.revision(patchSetId).create(input);
+    AuthException thrown =
+        assertThrows(
+            AuthException.class, () -> checksApiFactory.revision(patchSetId).create(input));
+    assertThat(thrown).hasMessageThat().contains("not permitted");
   }
 
   @Test
@@ -339,9 +348,10 @@
     input.checkerUuid = checkerUuid.get();
     input.state = CheckState.RUNNING;
 
-    exception.expect(AuthException.class);
-    exception.expectMessage("Authentication required");
-    checksApiFactory.revision(patchSetId).create(input);
+    AuthException thrown =
+        assertThrows(
+            AuthException.class, () -> checksApiFactory.revision(patchSetId).create(input));
+    assertThat(thrown).hasMessageThat().contains("Authentication required");
   }
 
   // TODO(gerrit-team) More tests, especially for multiple checkers and PS and how commits behave
diff --git a/javatests/com/google/gerrit/plugins/checks/acceptance/api/CreateCheckerIT.java b/javatests/com/google/gerrit/plugins/checks/acceptance/api/CreateCheckerIT.java
index 00a57e0..88859f1 100644
--- a/javatests/com/google/gerrit/plugins/checks/acceptance/api/CreateCheckerIT.java
+++ b/javatests/com/google/gerrit/plugins/checks/acceptance/api/CreateCheckerIT.java
@@ -17,6 +17,7 @@
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assert_;
 import static com.google.gerrit.git.testing.CommitSubject.assertCommit;
+import static com.google.gerrit.testing.GerritJUnit.assertThrows;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.gerrit.acceptance.testsuite.project.ProjectOperations;
@@ -203,9 +204,9 @@
 
     CheckerInput input = new CheckerInput();
     input.url = CheckerTestData.INVALID_URL;
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("only http/https URLs supported: " + input.url);
-    checkersApi.id(checkerUuid).update(input);
+    BadRequestException thrown =
+        assertThrows(BadRequestException.class, () -> checkersApi.id(checkerUuid).update(input));
+    assertThat(thrown).hasMessageThat().contains("only http/https URLs supported: " + input.url);
   }
 
   @Test
@@ -231,9 +232,9 @@
     input.repository = allProjects.get();
     checkersApi.create(input).get();
 
-    exception.expect(ResourceConflictException.class);
-    exception.expectMessage("Checker test:my-checker already exists");
-    checkersApi.create(input);
+    ResourceConflictException thrown =
+        assertThrows(ResourceConflictException.class, () -> checkersApi.create(input));
+    assertThat(thrown).hasMessageThat().contains("Checker test:my-checker already exists");
   }
 
   @Test
@@ -241,9 +242,9 @@
     CheckerInput input = new CheckerInput();
     input.repository = allProjects.get();
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("uuid is required");
-    checkersApi.create(input);
+    BadRequestException thrown =
+        assertThrows(BadRequestException.class, () -> checkersApi.create(input));
+    assertThat(thrown).hasMessageThat().contains("uuid is required");
   }
 
   @Test
@@ -252,9 +253,9 @@
     input.uuid = "";
     input.repository = allProjects.get();
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("uuid is required");
-    checkersApi.create(input);
+    BadRequestException thrown =
+        assertThrows(BadRequestException.class, () -> checkersApi.create(input));
+    assertThat(thrown).hasMessageThat().contains("uuid is required");
   }
 
   @Test
@@ -263,9 +264,9 @@
     input.uuid = " ";
     input.repository = allProjects.get();
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("invalid uuid:  ");
-    checkersApi.create(input);
+    BadRequestException thrown =
+        assertThrows(BadRequestException.class, () -> checkersApi.create(input));
+    assertThat(thrown).hasMessageThat().contains("invalid uuid:  ");
   }
 
   @Test
@@ -274,9 +275,9 @@
     input.uuid = CheckerTestData.INVALID_UUID;
     input.repository = allProjects.get();
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("invalid uuid: " + input.uuid);
-    checkersApi.create(input);
+    BadRequestException thrown =
+        assertThrows(BadRequestException.class, () -> checkersApi.create(input));
+    assertThat(thrown).hasMessageThat().contains("invalid uuid: " + input.uuid);
   }
 
   @Test
@@ -284,9 +285,9 @@
     CheckerInput input = new CheckerInput();
     input.uuid = "test:my-checker";
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("repository is required");
-    checkersApi.create(input);
+    BadRequestException thrown =
+        assertThrows(BadRequestException.class, () -> checkersApi.create(input));
+    assertThat(thrown).hasMessageThat().contains("repository is required");
   }
 
   @Test
@@ -295,9 +296,9 @@
     input.uuid = "test:my-checker";
     input.repository = "";
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("repository is required");
-    checkersApi.create(input);
+    BadRequestException thrown =
+        assertThrows(BadRequestException.class, () -> checkersApi.create(input));
+    assertThat(thrown).hasMessageThat().contains("repository is required");
   }
 
   @Test
@@ -306,9 +307,9 @@
     input.uuid = "test:my-checker";
     input.repository = " ";
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("repository is required");
-    checkersApi.create(input);
+    BadRequestException thrown =
+        assertThrows(BadRequestException.class, () -> checkersApi.create(input));
+    assertThat(thrown).hasMessageThat().contains("repository is required");
   }
 
   @Test
@@ -317,9 +318,9 @@
     input.uuid = "test:my-checker";
     input.repository = "non-existing";
 
-    exception.expect(UnprocessableEntityException.class);
-    exception.expectMessage("repository non-existing not found");
-    checkersApi.create(input);
+    UnprocessableEntityException thrown =
+        assertThrows(UnprocessableEntityException.class, () -> checkersApi.create(input));
+    assertThat(thrown).hasMessageThat().contains("repository non-existing not found");
   }
 
   @Test
@@ -460,9 +461,10 @@
     input.uuid = "test:my-checker";
     input.repository = allProjects.get();
 
-    exception.expect(AuthException.class);
-    exception.expectMessage("administrateCheckers for plugin checks not permitted");
-    checkersApi.create(input);
+    AuthException thrown = assertThrows(AuthException.class, () -> checkersApi.create(input));
+    assertThat(thrown)
+        .hasMessageThat()
+        .contains("administrateCheckers for plugin checks not permitted");
   }
 
   @Test
@@ -473,8 +475,7 @@
     input.uuid = "test:my-checker";
     input.repository = allProjects.get();
 
-    exception.expect(AuthException.class);
-    exception.expectMessage("Authentication required");
-    checkersApi.create(input);
+    AuthException thrown = assertThrows(AuthException.class, () -> checkersApi.create(input));
+    assertThat(thrown).hasMessageThat().contains("Authentication required");
   }
 }
diff --git a/javatests/com/google/gerrit/plugins/checks/acceptance/api/GetCheckIT.java b/javatests/com/google/gerrit/plugins/checks/acceptance/api/GetCheckIT.java
index a19359c..a8239bb 100644
--- a/javatests/com/google/gerrit/plugins/checks/acceptance/api/GetCheckIT.java
+++ b/javatests/com/google/gerrit/plugins/checks/acceptance/api/GetCheckIT.java
@@ -18,6 +18,7 @@
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assert_;
 import static com.google.gerrit.extensions.client.ListChangesOption.CURRENT_REVISION;
+import static com.google.gerrit.testing.GerritJUnit.assertThrows;
 import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
 
 import com.google.common.collect.ImmutableSortedSet;
@@ -459,9 +460,13 @@
 
   @Test
   public void getCheckForInvalidCheckerUuid() throws Exception {
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("invalid checker UUID: " + CheckerTestData.INVALID_UUID);
-    checksApiFactory.revision(patchSetId).id(CheckerTestData.INVALID_UUID);
+    BadRequestException thrown =
+        assertThrows(
+            BadRequestException.class,
+            () -> checksApiFactory.revision(patchSetId).id(CheckerTestData.INVALID_UUID));
+    assertThat(thrown)
+        .hasMessageThat()
+        .contains("invalid checker UUID: " + CheckerTestData.INVALID_UUID);
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/checks/acceptance/api/GetCheckerIT.java b/javatests/com/google/gerrit/plugins/checks/acceptance/api/GetCheckerIT.java
index 7a9c811..84463c6 100644
--- a/javatests/com/google/gerrit/plugins/checks/acceptance/api/GetCheckerIT.java
+++ b/javatests/com/google/gerrit/plugins/checks/acceptance/api/GetCheckerIT.java
@@ -15,6 +15,7 @@
 package com.google.gerrit.plugins.checks.acceptance.api;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.gerrit.testing.GerritJUnit.assertThrows;
 
 import com.google.common.collect.ImmutableSortedSet;
 import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations;
@@ -194,9 +195,9 @@
   public void getNonExistingCheckerFails() throws Exception {
     CheckerUuid checkerUuid = CheckerUuid.parse("test:non-existing");
 
-    exception.expect(ResourceNotFoundException.class);
-    exception.expectMessage("Not found: " + checkerUuid);
-    getCheckerInfo(checkerUuid);
+    ResourceNotFoundException thrown =
+        assertThrows(ResourceNotFoundException.class, () -> getCheckerInfo(checkerUuid));
+    assertThat(thrown).hasMessageThat().contains("Not found: " + checkerUuid);
   }
 
   @Test
@@ -204,9 +205,9 @@
     CheckerUuid checkerUuid = checkerOperations.newChecker().create();
     checkerOperations.checker(checkerUuid).forInvalidation().nonParseableConfig().invalidate();
 
-    exception.expect(RestApiException.class);
-    exception.expectMessage("Cannot retrieve checker " + checkerUuid);
-    getCheckerInfo(checkerUuid);
+    RestApiException thrown =
+        assertThrows(RestApiException.class, () -> getCheckerInfo(checkerUuid));
+    assertThat(thrown).hasMessageThat().contains("Cannot retrieve checker " + checkerUuid);
   }
 
   @Test
@@ -214,9 +215,9 @@
     CheckerUuid checkerUuid = checkerOperations.newChecker().create();
     checkerOperations.checker(checkerUuid).forInvalidation().invalidUuid().invalidate();
 
-    exception.expect(RestApiException.class);
-    exception.expectMessage("Cannot retrieve checker " + checkerUuid);
-    getCheckerInfo(checkerUuid);
+    RestApiException thrown =
+        assertThrows(RestApiException.class, () -> getCheckerInfo(checkerUuid));
+    assertThat(thrown).hasMessageThat().contains("Cannot retrieve checker " + checkerUuid);
   }
 
   @Test
@@ -228,9 +229,9 @@
         .invalidBlockingCondition()
         .invalidate();
 
-    exception.expect(RestApiException.class);
-    exception.expectMessage("Cannot retrieve checker " + checkerUuid);
-    getCheckerInfo(checkerUuid);
+    RestApiException thrown =
+        assertThrows(RestApiException.class, () -> getCheckerInfo(checkerUuid));
+    assertThat(thrown).hasMessageThat().contains("Cannot retrieve checker " + checkerUuid);
   }
 
   @Test
@@ -238,9 +239,9 @@
     CheckerUuid checkerUuid = checkerOperations.newChecker().create();
     checkerOperations.checker(checkerUuid).forInvalidation().invalidStatus().invalidate();
 
-    exception.expect(RestApiException.class);
-    exception.expectMessage("Cannot retrieve checker " + checkerUuid);
-    getCheckerInfo(checkerUuid);
+    RestApiException thrown =
+        assertThrows(RestApiException.class, () -> getCheckerInfo(checkerUuid));
+    assertThat(thrown).hasMessageThat().contains("Cannot retrieve checker " + checkerUuid);
   }
 
   @Test
@@ -248,9 +249,9 @@
     CheckerUuid checkerUuid = checkerOperations.newChecker().create();
     checkerOperations.checker(checkerUuid).forInvalidation().unsetUuid().invalidate();
 
-    exception.expect(RestApiException.class);
-    exception.expectMessage("Cannot retrieve checker " + checkerUuid);
-    getCheckerInfo(checkerUuid);
+    RestApiException thrown =
+        assertThrows(RestApiException.class, () -> getCheckerInfo(checkerUuid));
+    assertThat(thrown).hasMessageThat().contains("Cannot retrieve checker " + checkerUuid);
   }
 
   @Test
@@ -258,9 +259,9 @@
     CheckerUuid checkerUuid = checkerOperations.newChecker().create();
     checkerOperations.checker(checkerUuid).forInvalidation().unsetRepository().invalidate();
 
-    exception.expect(RestApiException.class);
-    exception.expectMessage("Cannot retrieve checker " + checkerUuid);
-    getCheckerInfo(checkerUuid);
+    RestApiException thrown =
+        assertThrows(RestApiException.class, () -> getCheckerInfo(checkerUuid));
+    assertThat(thrown).hasMessageThat().contains("Cannot retrieve checker " + checkerUuid);
   }
 
   @Test
@@ -268,9 +269,9 @@
     CheckerUuid checkerUuid = checkerOperations.newChecker().create();
     checkerOperations.checker(checkerUuid).forInvalidation().unsetStatus().invalidate();
 
-    exception.expect(RestApiException.class);
-    exception.expectMessage("Cannot retrieve checker " + checkerUuid);
-    getCheckerInfo(checkerUuid);
+    RestApiException thrown =
+        assertThrows(RestApiException.class, () -> getCheckerInfo(checkerUuid));
+    assertThat(thrown).hasMessageThat().contains("Cannot retrieve checker " + checkerUuid);
   }
 
   @Test
@@ -278,9 +279,9 @@
     String name = "my-checker";
     checkerOperations.newChecker().name(name).create();
 
-    exception.expect(ResourceNotFoundException.class);
-    exception.expectMessage("Not found: " + name);
-    checkersApi.id(name);
+    ResourceNotFoundException thrown =
+        assertThrows(ResourceNotFoundException.class, () -> checkersApi.id(name));
+    assertThat(thrown).hasMessageThat().contains("Not found: " + name);
   }
 
   @Test
@@ -290,9 +291,10 @@
 
     requestScopeOperations.setApiUser(user.id());
 
-    exception.expect(AuthException.class);
-    exception.expectMessage("administrateCheckers for plugin checks not permitted");
-    getCheckerInfo(checkerUuid);
+    AuthException thrown = assertThrows(AuthException.class, () -> getCheckerInfo(checkerUuid));
+    assertThat(thrown)
+        .hasMessageThat()
+        .contains("administrateCheckers for plugin checks not permitted");
   }
 
   @Test
@@ -302,9 +304,8 @@
 
     requestScopeOperations.setApiUserAnonymous();
 
-    exception.expect(AuthException.class);
-    exception.expectMessage("Authentication required");
-    getCheckerInfo(checkerUuid);
+    AuthException thrown = assertThrows(AuthException.class, () -> getCheckerInfo(checkerUuid));
+    assertThat(thrown).hasMessageThat().contains("Authentication required");
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/checks/acceptance/api/QueryPendingChecksIT.java b/javatests/com/google/gerrit/plugins/checks/acceptance/api/QueryPendingChecksIT.java
index ca1e1a2..697d183 100644
--- a/javatests/com/google/gerrit/plugins/checks/acceptance/api/QueryPendingChecksIT.java
+++ b/javatests/com/google/gerrit/plugins/checks/acceptance/api/QueryPendingChecksIT.java
@@ -18,7 +18,7 @@
 import static com.google.common.truth.Truth.assert_;
 import static com.google.gerrit.plugins.checks.testing.PendingChecksInfoSubject.assertThat;
 import static com.google.gerrit.server.group.SystemGroupBackend.REGISTERED_USERS;
-import static org.hamcrest.CoreMatchers.instanceOf;
+import static com.google.gerrit.testing.GerritJUnit.assertThrows;
 
 import com.google.common.collect.Iterables;
 import com.google.gerrit.acceptance.RestResponse;
@@ -155,7 +155,8 @@
     assertThat(
             queryPendingChecks(
                 String.format(
-                    "checker:\"%s\" AND (NOT state:FAILED AND NOT (state:RUNNING OR state:SUCCESSFUL))",
+                    "checker:\"%s\" AND (NOT state:FAILED AND NOT (state:RUNNING OR"
+                        + " state:SUCCESSFUL))",
                     checkerUuid)))
         .hasSize(1);
   }
@@ -515,10 +516,10 @@
     CheckerUuid checkerUuid = checkerOperations.newChecker().repository(project).create();
     checkerOperations.checker(checkerUuid).forInvalidation().nonParseableConfig().invalidate();
 
-    exception.expect(RestApiException.class);
-    exception.expectMessage("Cannot query pending checks");
-    exception.expectCause(instanceOf(ConfigInvalidException.class));
-    queryPendingChecks(checkerUuid);
+    RestApiException thrown =
+        assertThrows(RestApiException.class, () -> queryPendingChecks(checkerUuid));
+    assertThat(thrown).hasMessageThat().contains("Cannot query pending checks");
+    assertThat(thrown).hasCauseThat().isInstanceOf(ConfigInvalidException.class);
   }
 
   @Test
@@ -530,10 +531,10 @@
             .query(CheckerTestData.INVALID_QUERY)
             .create();
 
-    exception.expect(RestApiException.class);
-    exception.expectMessage("Cannot query pending checks");
-    exception.expectCause(instanceOf(ConfigInvalidException.class));
-    queryPendingChecks(checkerUuid);
+    RestApiException thrown =
+        assertThrows(RestApiException.class, () -> queryPendingChecks(checkerUuid));
+    assertThat(thrown).hasMessageThat().contains("Cannot query pending checks");
+    assertThat(thrown).hasCauseThat().isInstanceOf(ConfigInvalidException.class);
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/checks/acceptance/api/UpdateCheckIT.java b/javatests/com/google/gerrit/plugins/checks/acceptance/api/UpdateCheckIT.java
index 27d673f..6d15caa 100644
--- a/javatests/com/google/gerrit/plugins/checks/acceptance/api/UpdateCheckIT.java
+++ b/javatests/com/google/gerrit/plugins/checks/acceptance/api/UpdateCheckIT.java
@@ -15,6 +15,7 @@
 package com.google.gerrit.plugins.checks.acceptance.api;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.gerrit.testing.GerritJUnit.assertThrows;
 
 import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations;
 import com.google.gerrit.extensions.restapi.AuthException;
@@ -76,10 +77,13 @@
     CheckInput input = new CheckInput();
     input.checkerUuid = "foo:bar";
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage(
-        "checker UUID in input must either be null or the same as on the resource");
-    checksApiFactory.revision(patchSetId).id(checkKey.checkerUuid()).update(input);
+    BadRequestException thrown =
+        assertThrows(
+            BadRequestException.class,
+            () -> checksApiFactory.revision(patchSetId).id(checkKey.checkerUuid()).update(input));
+    assertThat(thrown)
+        .hasMessageThat()
+        .contains("checker UUID in input must either be null or the same as on the resource");
   }
 
   @Test
@@ -135,9 +139,11 @@
     CheckInput input = new CheckInput();
     input.url = CheckTestData.INVALID_URL;
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("only http/https URLs supported: " + input.url);
-    checksApiFactory.revision(patchSetId).id(checkKey.checkerUuid()).update(input);
+    BadRequestException thrown =
+        assertThrows(
+            BadRequestException.class,
+            () -> checksApiFactory.revision(patchSetId).id(checkKey.checkerUuid()).update(input));
+    assertThat(thrown).hasMessageThat().contains("only http/https URLs supported: " + input.url);
   }
 
   @Test
@@ -287,18 +293,30 @@
   public void cannotUpdateCheckWithoutAdministrateCheckers() throws Exception {
     requestScopeOperations.setApiUser(user.id());
 
-    exception.expect(AuthException.class);
-    exception.expectMessage("not permitted");
-    checksApiFactory.revision(patchSetId).id(checkKey.checkerUuid()).update(new CheckInput());
+    AuthException thrown =
+        assertThrows(
+            AuthException.class,
+            () ->
+                checksApiFactory
+                    .revision(patchSetId)
+                    .id(checkKey.checkerUuid())
+                    .update(new CheckInput()));
+    assertThat(thrown).hasMessageThat().contains("not permitted");
   }
 
   @Test
   public void cannotUpdateCheckAnonymously() throws Exception {
     requestScopeOperations.setApiUserAnonymous();
 
-    exception.expect(AuthException.class);
-    exception.expectMessage("Authentication required");
-    checksApiFactory.revision(patchSetId).id(checkKey.checkerUuid()).update(new CheckInput());
+    AuthException thrown =
+        assertThrows(
+            AuthException.class,
+            () ->
+                checksApiFactory
+                    .revision(patchSetId)
+                    .id(checkKey.checkerUuid())
+                    .update(new CheckInput()));
+    assertThat(thrown).hasMessageThat().contains("Authentication required");
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/checks/acceptance/api/UpdateCheckerIT.java b/javatests/com/google/gerrit/plugins/checks/acceptance/api/UpdateCheckerIT.java
index a5d7d50..8b9be46 100644
--- a/javatests/com/google/gerrit/plugins/checks/acceptance/api/UpdateCheckerIT.java
+++ b/javatests/com/google/gerrit/plugins/checks/acceptance/api/UpdateCheckerIT.java
@@ -18,6 +18,7 @@
 import static com.google.common.truth.Truth.assert_;
 import static com.google.common.truth.Truth8.assertThat;
 import static com.google.gerrit.git.testing.CommitSubject.assertCommit;
+import static com.google.gerrit.testing.GerritJUnit.assertThrows;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.gerrit.acceptance.SkipProjectClone;
@@ -114,9 +115,9 @@
     CheckerInput input = new CheckerInput();
     input.uuid = "some:id";
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("uuid cannot be updated");
-    checkersApi.id(checkerUuid).update(input);
+    BadRequestException thrown =
+        assertThrows(BadRequestException.class, () -> checkersApi.id(checkerUuid).update(input));
+    assertThat(thrown).hasMessageThat().contains("uuid cannot be updated");
   }
 
   @Test
@@ -154,9 +155,10 @@
     CheckerInput checkerInput = new CheckerInput();
     checkerInput.name = "";
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("name cannot be unset");
-    checkersApi.id(checkerUuid).update(checkerInput);
+    BadRequestException thrown =
+        assertThrows(
+            BadRequestException.class, () -> checkersApi.id(checkerUuid).update(checkerInput));
+    assertThat(thrown).hasMessageThat().contains("name cannot be unset");
   }
 
   @Test
@@ -166,9 +168,10 @@
     CheckerInput checkerInput = new CheckerInput();
     checkerInput.name = " ";
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("name cannot be unset");
-    checkersApi.id(checkerUuid).update(checkerInput);
+    BadRequestException thrown =
+        assertThrows(
+            BadRequestException.class, () -> checkersApi.id(checkerUuid).update(checkerInput));
+    assertThat(thrown).hasMessageThat().contains("name cannot be unset");
   }
 
   @Test
@@ -338,9 +341,10 @@
     CheckerInput checkerInput = new CheckerInput();
     checkerInput.repository = "";
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("repository cannot be unset");
-    checkersApi.id(checkerUuid).update(checkerInput);
+    BadRequestException thrown =
+        assertThrows(
+            BadRequestException.class, () -> checkersApi.id(checkerUuid).update(checkerInput));
+    assertThat(thrown).hasMessageThat().contains("repository cannot be unset");
   }
 
   @Test
@@ -350,9 +354,10 @@
     CheckerInput checkerInput = new CheckerInput();
     checkerInput.repository = " ";
 
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("repository cannot be unset");
-    checkersApi.id(checkerUuid).update(checkerInput);
+    BadRequestException thrown =
+        assertThrows(
+            BadRequestException.class, () -> checkersApi.id(checkerUuid).update(checkerInput));
+    assertThat(thrown).hasMessageThat().contains("repository cannot be unset");
   }
 
   @Test
@@ -362,9 +367,11 @@
     CheckerInput checkerInput = new CheckerInput();
     checkerInput.repository = "non-existing";
 
-    exception.expect(UnprocessableEntityException.class);
-    exception.expectMessage("repository non-existing not found");
-    checkersApi.id(checkerUuid).update(checkerInput);
+    UnprocessableEntityException thrown =
+        assertThrows(
+            UnprocessableEntityException.class,
+            () -> checkersApi.id(checkerUuid).update(checkerInput));
+    assertThat(thrown).hasMessageThat().contains("repository non-existing not found");
   }
 
   @Test
@@ -373,9 +380,11 @@
 
     CheckerInput input = new CheckerInput();
     input.url = CheckerTestData.INVALID_URL;
-    exception.expect(BadRequestException.class);
-    exception.expectMessage("only http/https URLs supported: ftp://example.com/my-checker");
-    checkersApi.id(checkerUuid).update(input);
+    BadRequestException thrown =
+        assertThrows(BadRequestException.class, () -> checkersApi.id(checkerUuid).update(input));
+    assertThat(thrown)
+        .hasMessageThat()
+        .contains("only http/https URLs supported: ftp://example.com/my-checker");
   }
 
   @Test
@@ -575,9 +584,11 @@
     CheckerInput input = new CheckerInput();
     input.name = "my-renamed-checker";
 
-    exception.expect(AuthException.class);
-    exception.expectMessage("administrateCheckers for plugin checks not permitted");
-    checkersApi.id(checkerUuid).update(input);
+    AuthException thrown =
+        assertThrows(AuthException.class, () -> checkersApi.id(checkerUuid).update(input));
+    assertThat(thrown)
+        .hasMessageThat()
+        .contains("administrateCheckers for plugin checks not permitted");
   }
 
   @Test
@@ -589,8 +600,8 @@
     CheckerInput input = new CheckerInput();
     input.name = "my-renamed-checker";
 
-    exception.expect(AuthException.class);
-    exception.expectMessage("Authentication required");
-    checkersApi.id(checkerUuid).update(input);
+    AuthException thrown =
+        assertThrows(AuthException.class, () -> checkersApi.id(checkerUuid).update(input));
+    assertThat(thrown).hasMessageThat().contains("Authentication required");
   }
 }
diff --git a/javatests/com/google/gerrit/plugins/checks/acceptance/testsuite/CheckOperationsImplTest.java b/javatests/com/google/gerrit/plugins/checks/acceptance/testsuite/CheckOperationsImplTest.java
index d831d3d..4e63bde 100644
--- a/javatests/com/google/gerrit/plugins/checks/acceptance/testsuite/CheckOperationsImplTest.java
+++ b/javatests/com/google/gerrit/plugins/checks/acceptance/testsuite/CheckOperationsImplTest.java
@@ -17,10 +17,12 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth8.assertThat;
+import static com.google.gerrit.testing.GerritJUnit.assertThrows;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
 import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.gerrit.extensions.restapi.RestApiException;
@@ -89,9 +91,10 @@
         CheckKey.create(
             Project.nameKey("non-existing"), createChange().getPatchSetId(), checkerUuid);
 
-    exception.expect(IllegalStateException.class);
-    exception.expectCause(instanceOf(RepositoryNotFoundException.class));
-    checkOperations.newCheck(checkKey).upsert();
+    IllegalStateException thrown =
+        assertThrows(
+            IllegalStateException.class, () -> checkOperations.newCheck(checkKey).upsert());
+    assertThat(thrown.getCause(), instanceOf(RepositoryNotFoundException.class));
   }
 
   @Test
@@ -99,10 +102,11 @@
     CheckerUuid checkerUuid = checkerOperations.newChecker().create();
     CheckKey checkKey = CheckKey.create(project, PatchSet.id(Change.id(1), 1), checkerUuid);
 
-    exception.expect(IllegalStateException.class);
-    exception.expectCause(instanceOf(IOException.class));
-    exception.expectMessage("patchset 1,1 not found");
-    checkOperations.newCheck(checkKey).upsert();
+    IllegalStateException thrown =
+        assertThrows(
+            IllegalStateException.class, () -> checkOperations.newCheck(checkKey).upsert());
+    assertThat(thrown.getCause(), instanceOf(IOException.class));
+    assertThat(thrown).hasMessageThat().contains("patchset 1,1 not found");
   }
 
   @Test
@@ -110,10 +114,11 @@
     CheckKey checkKey =
         CheckKey.create(project, createChange().getPatchSetId(), CheckerUuid.parse("foo:bar"));
 
-    exception.expect(IllegalStateException.class);
-    exception.expectCause(instanceOf(IOException.class));
-    exception.expectMessage("checker foo:bar not found");
-    checkOperations.newCheck(checkKey).upsert();
+    IllegalStateException thrown =
+        assertThrows(
+            IllegalStateException.class, () -> checkOperations.newCheck(checkKey).upsert());
+    assertThat(thrown.getCause(), instanceOf(IOException.class));
+    assertThat(thrown).hasMessageThat().contains("checker foo:bar not found");
   }
 
   @Test
@@ -228,9 +233,8 @@
     CheckerUuid checkerUuid = checkerOperations.newChecker().repository(allProjects).create();
     CheckKey notExistingCheckKey =
         CheckKey.create(project, createChange().getPatchSetId(), checkerUuid);
-
-    exception.expect(IllegalStateException.class);
-    checkOperations.check(notExistingCheckKey).get();
+    assertThrows(
+        IllegalStateException.class, () -> checkOperations.check(notExistingCheckKey).get());
   }
 
   @Test
@@ -239,8 +243,8 @@
     CheckKey notExistingCheckKey =
         CheckKey.create(project, createChange().getPatchSetId(), checkerUuid);
 
-    exception.expect(IllegalStateException.class);
-    checkOperations.check(notExistingCheckKey).get();
+    assertThrows(
+        IllegalStateException.class, () -> checkOperations.check(notExistingCheckKey).get());
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/checks/acceptance/testsuite/CheckerOperationsImplTest.java b/javatests/com/google/gerrit/plugins/checks/acceptance/testsuite/CheckerOperationsImplTest.java
index 65b4fb8..ade6bad 100644
--- a/javatests/com/google/gerrit/plugins/checks/acceptance/testsuite/CheckerOperationsImplTest.java
+++ b/javatests/com/google/gerrit/plugins/checks/acceptance/testsuite/CheckerOperationsImplTest.java
@@ -18,6 +18,7 @@
 import static com.google.common.truth.Truth.assertWithMessage;
 import static com.google.common.truth.Truth.assert_;
 import static com.google.common.truth.Truth8.assertThat;
+import static com.google.gerrit.testing.GerritJUnit.assertThrows;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
 
@@ -218,16 +219,17 @@
 
   @Test
   public void retrievingCheckerForInvalidUuidFails() throws Exception {
-    exception.expect(IllegalArgumentException.class);
-    checkerOperations.checker(CheckerTestData.INVALID_UUID).get();
+    assertThrows(
+        IllegalArgumentException.class,
+        () -> checkerOperations.checker(CheckerTestData.INVALID_UUID).get());
   }
 
   @Test
   public void retrievingNotExistingCheckerFails() throws Exception {
     String notExistingCheckerUuid = "foo:bar";
 
-    exception.expect(IllegalStateException.class);
-    checkerOperations.checker(notExistingCheckerUuid).get();
+    assertThrows(
+        IllegalStateException.class, () -> checkerOperations.checker(notExistingCheckerUuid).get());
   }
 
   @Test
diff --git a/javatests/com/google/gerrit/plugins/checks/db/CheckerConfigTest.java b/javatests/com/google/gerrit/plugins/checks/db/CheckerConfigTest.java
index 4f7a2b1..d6d9f4d 100644
--- a/javatests/com/google/gerrit/plugins/checks/db/CheckerConfigTest.java
+++ b/javatests/com/google/gerrit/plugins/checks/db/CheckerConfigTest.java
@@ -18,7 +18,7 @@
 import static com.google.common.truth.Truth.assertWithMessage;
 import static com.google.common.truth.Truth.assert_;
 import static com.google.gerrit.plugins.checks.testing.CheckerConfigSubject.assertThat;
-import static org.hamcrest.CoreMatchers.instanceOf;
+import static com.google.gerrit.testing.GerritJUnit.assertThrows;
 
 import com.google.common.collect.ImmutableSortedSet;
 import com.google.common.truth.StringSubject;
@@ -209,10 +209,11 @@
         CheckerConfig.createForNewChecker(projectName, repository, checkerCreation);
 
     try (MetaDataUpdate metaDataUpdate = createMetaDataUpdate()) {
-      exception.expectCause(instanceOf(ConfigInvalidException.class));
-      exception.expectMessage(
-          String.format("Repository of the checker %s must be defined", checkerUuid));
-      checkerConfig.commit(metaDataUpdate);
+      Throwable thrown = assertThrows(Throwable.class, () -> checkerConfig.commit(metaDataUpdate));
+      assertThat(thrown).hasCauseThat().isInstanceOf(ConfigInvalidException.class);
+      assertThat(thrown)
+          .hasMessageThat()
+          .contains(String.format("Repository of the checker %s must be defined", checkerUuid));
     }
   }
 
@@ -230,9 +231,11 @@
   public void uuidInConfigMayNotBeUndefined() throws Exception {
     populateCheckerConfig(checkerUuid, "[checker]");
 
-    exception.expect(ConfigInvalidException.class);
-    exception.expectMessage("checker.uuid is not set in config file for checker " + checkerUuid);
-    loadChecker(checkerUuid);
+    ConfigInvalidException thrown =
+        assertThrows(ConfigInvalidException.class, () -> loadChecker(checkerUuid));
+    assertThat(thrown)
+        .hasMessageThat()
+        .contains("checker.uuid is not set in config file for checker " + checkerUuid);
   }
 
   @Test
@@ -346,10 +349,11 @@
     CheckerUpdate checkerUpdate =
         CheckerUpdate.builder().setRepository(Project.nameKey("")).build();
 
-    exception.expect(IOException.class);
-    exception.expectMessage(
-        String.format("Repository of the checker %s must be defined", checkerUuid));
-    updateChecker(checkerUuid, checkerUpdate);
+    IOException thrown =
+        assertThrows(IOException.class, () -> updateChecker(checkerUuid, checkerUpdate));
+    assertThat(thrown)
+        .hasMessageThat()
+        .contains(String.format("Repository of the checker %s must be defined", checkerUuid));
   }
 
   @Test