This is an automated email from the ASF dual-hosted git repository.

etudenhoefner pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iceberg.git


The following commit(s) were added to refs/heads/master by this push:
     new d230bb4f55 Core: Remove deprecated AssertHelpers usage (#8062)
d230bb4f55 is described below

commit d230bb4f55c7343cb1a9cbb71c5a211a74af7236
Author: Liu Xiao <[email protected]>
AuthorDate: Fri Jul 14 16:17:38 2023 +0800

    Core: Remove deprecated AssertHelpers usage (#8062)
---
 .../java/org/apache/iceberg/TestSchemaUpdate.java  | 754 ++++++++++-----------
 .../org/apache/iceberg/TestSnapshotManager.java    | 216 +++---
 .../apache/iceberg/TestUpdatePartitionSpec.java    | 214 +++---
 3 files changed, 565 insertions(+), 619 deletions(-)

diff --git a/core/src/test/java/org/apache/iceberg/TestSchemaUpdate.java 
b/core/src/test/java/org/apache/iceberg/TestSchemaUpdate.java
index 6c00f8b38c..04cb644035 100644
--- a/core/src/test/java/org/apache/iceberg/TestSchemaUpdate.java
+++ b/core/src/test/java/org/apache/iceberg/TestSchemaUpdate.java
@@ -30,6 +30,7 @@ import org.apache.iceberg.types.Type;
 import org.apache.iceberg.types.TypeUtil;
 import org.apache.iceberg.types.Types;
 import org.apache.iceberg.util.Pair;
+import org.assertj.core.api.Assertions;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -303,11 +304,10 @@ public class TestSchemaUpdate {
         }
 
         String typeChange = fromType.toString() + " -> " + toType.toString();
-        AssertHelpers.assertThrows(
-            "Should reject update: " + typeChange,
-            IllegalArgumentException.class,
-            "change column type: col: " + typeChange,
-            () -> new SchemaUpdate(fromSchema, 1).updateColumn("col", toType));
+        Assertions.assertThatThrownBy(
+                () -> new SchemaUpdate(fromSchema, 1).updateColumn("col", 
toType))
+            .isInstanceOf(IllegalArgumentException.class)
+            .hasMessage("Cannot change column type: col: " + typeChange);
       }
     }
   }
@@ -586,11 +586,10 @@ public class TestSchemaUpdate {
             required(1, "id", Types.IntegerType.get()),
             required(2, "data", Types.StringType.get()));
 
-    AssertHelpers.assertThrows(
-        "Should reject add required column if incompatible changes are not 
allowed",
-        IllegalArgumentException.class,
-        "Incompatible change: cannot add required column: data",
-        () -> new SchemaUpdate(schema, 1).addRequiredColumn("data", 
Types.StringType.get()));
+    Assertions.assertThatThrownBy(
+            () -> new SchemaUpdate(schema, 1).addRequiredColumn("data", 
Types.StringType.get()))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Incompatible change: cannot add required column: data");
 
     Schema result =
         new SchemaUpdate(schema, 1)
@@ -605,16 +604,15 @@ public class TestSchemaUpdate {
   public void testAddRequiredColumnCaseInsensitive() {
     Schema schema = new Schema(required(1, "id", Types.IntegerType.get()));
 
-    AssertHelpers.assertThrows(
-        "Should reject add required column if same column name different case 
found",
-        IllegalArgumentException.class,
-        "Cannot add column, name already exists: ID",
-        () ->
-            new SchemaUpdate(schema, 1)
-                .caseSensitive(false)
-                .allowIncompatibleChanges()
-                .addRequiredColumn("ID", Types.StringType.get())
-                .apply());
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(schema, 1)
+                    .caseSensitive(false)
+                    .allowIncompatibleChanges()
+                    .addRequiredColumn("ID", Types.StringType.get())
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot add column, name already exists: ID");
   }
 
   @Test
@@ -633,11 +631,9 @@ public class TestSchemaUpdate {
     Schema schema = new Schema(optional(1, "id", Types.IntegerType.get()));
     Schema expected = new Schema(required(1, "id", Types.IntegerType.get()));
 
-    AssertHelpers.assertThrows(
-        "Should reject change to required if incompatible changes are not 
allowed",
-        IllegalArgumentException.class,
-        "Cannot change column nullability: id: optional -> required",
-        () -> new SchemaUpdate(schema, 1).requireColumn("id"));
+    Assertions.assertThatThrownBy(() -> new SchemaUpdate(schema, 
1).requireColumn("id"))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot change column nullability: id: optional -> 
required");
 
     // required to required is not an incompatible change
     new SchemaUpdate(expected, 1).requireColumn("id").apply();
@@ -739,34 +735,32 @@ public class TestSchemaUpdate {
   @Test
   public void testAmbiguousAdd() {
     // preferences.booleans could be top-level or a field of preferences
-    AssertHelpers.assertThrows(
-        "Should reject ambiguous column name",
-        IllegalArgumentException.class,
-        "ambiguous name: preferences.booleans",
-        () -> {
-          UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
-          update.addColumn("preferences.booleans", Types.BooleanType.get());
-        });
+    Assertions.assertThatThrownBy(
+            () -> {
+              UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
+              update.addColumn("preferences.booleans", 
Types.BooleanType.get());
+            })
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot add column with ambiguous name: 
preferences.booleans");
   }
 
   @Test
   public void testAddAlreadyExists() {
-    AssertHelpers.assertThrows(
-        "Should reject column name that already exists",
-        IllegalArgumentException.class,
-        "already exists: preferences.feature1",
-        () -> {
-          UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
-          update.addColumn("preferences", "feature1", Types.BooleanType.get());
-        });
-    AssertHelpers.assertThrows(
-        "Should reject column name that already exists",
-        IllegalArgumentException.class,
-        "already exists: preferences",
-        () -> {
-          UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
-          update.addColumn("preferences", Types.BooleanType.get());
-        });
+    Assertions.assertThatThrownBy(
+            () -> {
+              UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
+              update.addColumn("preferences", "feature1", 
Types.BooleanType.get());
+            })
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot add column, name already exists: 
preferences.feature1");
+
+    Assertions.assertThatThrownBy(
+            () -> {
+              UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
+              update.addColumn("preferences", Types.BooleanType.get());
+            })
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot add column, name already exists: preferences");
   }
 
   @Test
@@ -839,153 +833,141 @@ public class TestSchemaUpdate {
 
   @Test
   public void testDeleteMissingColumn() {
-    AssertHelpers.assertThrows(
-        "Should reject delete missing column",
-        IllegalArgumentException.class,
-        "missing column: col",
-        () -> {
-          UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
-          update.deleteColumn("col");
-        });
+    Assertions.assertThatThrownBy(
+            () -> {
+              UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
+              update.deleteColumn("col");
+            })
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot delete missing column: col");
   }
 
   @Test
   public void testAddDeleteConflict() {
-    AssertHelpers.assertThrows(
-        "Should reject add then delete",
-        IllegalArgumentException.class,
-        "missing column: col",
-        () -> {
-          UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
-          update.addColumn("col", Types.IntegerType.get()).deleteColumn("col");
-        });
-    AssertHelpers.assertThrows(
-        "Should reject add then delete",
-        IllegalArgumentException.class,
-        "column that has additions: preferences",
-        () -> {
-          UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
-          update
-              .addColumn("preferences", "feature3", Types.IntegerType.get())
-              .deleteColumn("preferences");
-        });
+    Assertions.assertThatThrownBy(
+            () -> {
+              UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
+              update.addColumn("col", 
Types.IntegerType.get()).deleteColumn("col");
+            })
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot delete missing column: col");
+
+    Assertions.assertThatThrownBy(
+            () -> {
+              UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
+              update
+                  .addColumn("preferences", "feature3", 
Types.IntegerType.get())
+                  .deleteColumn("preferences");
+            })
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot delete a column that has additions: preferences");
   }
 
   @Test
   public void testRenameMissingColumn() {
-    AssertHelpers.assertThrows(
-        "Should reject rename missing column",
-        IllegalArgumentException.class,
-        "missing column: col",
-        () -> {
-          UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
-          update.renameColumn("col", "fail");
-        });
+    Assertions.assertThatThrownBy(
+            () -> {
+              UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
+              update.renameColumn("col", "fail");
+            })
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot rename missing column: col");
   }
 
   @Test
   public void testRenameDeleteConflict() {
-    AssertHelpers.assertThrows(
-        "Should reject rename then delete",
-        IllegalArgumentException.class,
-        "column that has updates: id",
-        () -> {
-          UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
-          update.renameColumn("id", "col").deleteColumn("id");
-        });
-    AssertHelpers.assertThrows(
-        "Should reject rename then delete",
-        IllegalArgumentException.class,
-        "missing column: col",
-        () -> {
-          UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
-          update.renameColumn("id", "col").deleteColumn("col");
-        });
+    Assertions.assertThatThrownBy(
+            () -> {
+              UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
+              update.renameColumn("id", "col").deleteColumn("id");
+            })
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot delete a column that has updates: id");
+
+    Assertions.assertThatThrownBy(
+            () -> {
+              UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
+              update.renameColumn("id", "col").deleteColumn("col");
+            })
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot delete missing column: col");
   }
 
   @Test
   public void testDeleteRenameConflict() {
-    AssertHelpers.assertThrows(
-        "Should reject delete then rename",
-        IllegalArgumentException.class,
-        "column that will be deleted: id",
-        () -> {
-          UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
-          update.deleteColumn("id").renameColumn("id", "identifier");
-        });
+    Assertions.assertThatThrownBy(
+            () -> {
+              UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
+              update.deleteColumn("id").renameColumn("id", "identifier");
+            })
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot rename a column that will be deleted: id");
   }
 
   @Test
   public void testUpdateMissingColumn() {
-    AssertHelpers.assertThrows(
-        "Should reject rename missing column",
-        IllegalArgumentException.class,
-        "missing column: col",
-        () -> {
-          UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
-          update.updateColumn("col", Types.DateType.get());
-        });
+    Assertions.assertThatThrownBy(
+            () -> {
+              UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
+              update.updateColumn("col", Types.DateType.get());
+            })
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot update missing column: col");
   }
 
   @Test
   public void testUpdateDeleteConflict() {
-    AssertHelpers.assertThrows(
-        "Should reject update then delete",
-        IllegalArgumentException.class,
-        "column that has updates: id",
-        () -> {
-          UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
-          update.updateColumn("id", Types.LongType.get()).deleteColumn("id");
-        });
+    Assertions.assertThatThrownBy(
+            () -> {
+              UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
+              update.updateColumn("id", 
Types.LongType.get()).deleteColumn("id");
+            })
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot delete a column that has updates: id");
   }
 
   @Test
   public void testDeleteUpdateConflict() {
-    AssertHelpers.assertThrows(
-        "Should reject delete then update",
-        IllegalArgumentException.class,
-        "column that will be deleted: id",
-        () -> {
-          UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
-          update.deleteColumn("id").updateColumn("id", Types.LongType.get());
-        });
+    Assertions.assertThatThrownBy(
+            () -> {
+              UpdateSchema update = new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID);
+              update.deleteColumn("id").updateColumn("id", 
Types.LongType.get());
+            })
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot update a column that will be deleted: id");
   }
 
   @Test
   public void testDeleteMapKey() {
-    AssertHelpers.assertThrows(
-        "Should reject delete map key",
-        IllegalArgumentException.class,
-        "Cannot delete map keys",
-        () -> {
-          new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID).deleteColumn("locations.key").apply();
-        });
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(SCHEMA, SCHEMA_LAST_COLUMN_ID)
+                    .deleteColumn("locations.key")
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot delete map keys");
   }
 
   @Test
   public void testAddFieldToMapKey() {
-    AssertHelpers.assertThrows(
-        "Should reject add sub-field to map key",
-        IllegalArgumentException.class,
-        "Cannot add fields to map keys",
-        () -> {
-          new SchemaUpdate(SCHEMA, SCHEMA_LAST_COLUMN_ID)
-              .addColumn("locations.key", "address_line_2", 
Types.StringType.get())
-              .apply();
-        });
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(SCHEMA, SCHEMA_LAST_COLUMN_ID)
+                    .addColumn("locations.key", "address_line_2", 
Types.StringType.get())
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot add fields to map keys");
   }
 
   @Test
   public void testAlterMapKey() {
-    AssertHelpers.assertThrows(
-        "Should reject alter sub-field of map key",
-        IllegalArgumentException.class,
-        "Cannot alter map keys",
-        () -> {
-          new SchemaUpdate(SCHEMA, SCHEMA_LAST_COLUMN_ID)
-              .updateColumn("locations.key.zip", Types.LongType.get())
-              .apply();
-        });
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(SCHEMA, SCHEMA_LAST_COLUMN_ID)
+                    .updateColumn("locations.key.zip", Types.LongType.get())
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot alter map keys");
   }
 
   @Test
@@ -996,40 +978,36 @@ public class TestSchemaUpdate {
                 1,
                 "m",
                 Types.MapType.ofOptional(2, 3, Types.IntegerType.get(), 
Types.DoubleType.get())));
-    AssertHelpers.assertThrows(
-        "Should reject update map key",
-        IllegalArgumentException.class,
-        "Cannot update map keys",
-        () -> {
-          new SchemaUpdate(schema, 3).updateColumn("m.key", 
Types.LongType.get()).apply();
-        });
+    Assertions.assertThatThrownBy(
+            () -> new SchemaUpdate(schema, 3).updateColumn("m.key", 
Types.LongType.get()).apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot update map keys: map<int, double>");
   }
 
   @Test
   public void testUpdateAddedColumnDoc() {
     Schema schema = new Schema(required(1, "i", Types.IntegerType.get()));
-    AssertHelpers.assertThrows(
-        "Should reject add and update doc",
-        IllegalArgumentException.class,
-        "Cannot update missing column",
-        () -> {
-          new SchemaUpdate(schema, 3)
-              .addColumn("value", Types.LongType.get())
-              .updateColumnDoc("value", "a value")
-              .apply();
-        });
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(schema, 3)
+                    .addColumn("value", Types.LongType.get())
+                    .updateColumnDoc("value", "a value")
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot update missing column: value");
   }
 
   @Test
   public void testUpdateDeletedColumnDoc() {
     Schema schema = new Schema(required(1, "i", Types.IntegerType.get()));
-    AssertHelpers.assertThrows(
-        "Should reject add and update doc",
-        IllegalArgumentException.class,
-        "Cannot update a column that will be deleted",
-        () -> {
-          new SchemaUpdate(schema, 3).deleteColumn("i").updateColumnDoc("i", 
"a value").apply();
-        });
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(schema, 3)
+                    .deleteColumn("i")
+                    .updateColumnDoc("i", "a value")
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot update a column that will be deleted: i");
   }
 
   @Test
@@ -1454,17 +1432,13 @@ public class TestSchemaUpdate {
         new Schema(
             required(1, "id", Types.LongType.get()), required(2, "data", 
Types.StringType.get()));
 
-    AssertHelpers.assertThrows(
-        "Should fail move for a field that is not in the schema",
-        IllegalArgumentException.class,
-        "Cannot move id before itself",
-        () -> new SchemaUpdate(schema, 2).moveBefore("id", "id").apply());
+    Assertions.assertThatThrownBy(() -> new SchemaUpdate(schema, 
2).moveBefore("id", "id").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move id before itself");
 
-    AssertHelpers.assertThrows(
-        "Should fail move for a field that is not in the schema",
-        IllegalArgumentException.class,
-        "Cannot move id after itself",
-        () -> new SchemaUpdate(schema, 2).moveAfter("id", "id").apply());
+    Assertions.assertThatThrownBy(() -> new SchemaUpdate(schema, 
2).moveAfter("id", "id").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move id after itself");
   }
 
   @Test
@@ -1473,23 +1447,19 @@ public class TestSchemaUpdate {
         new Schema(
             required(1, "id", Types.LongType.get()), required(2, "data", 
Types.StringType.get()));
 
-    AssertHelpers.assertThrows(
-        "Should fail move for a field that is not in the schema",
-        IllegalArgumentException.class,
-        "Cannot move missing column",
-        () -> new SchemaUpdate(schema, 2).moveFirst("items").apply());
+    Assertions.assertThatThrownBy(() -> new SchemaUpdate(schema, 
2).moveFirst("items").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move missing column: items");
 
-    AssertHelpers.assertThrows(
-        "Should fail move for a field that is not in the schema",
-        IllegalArgumentException.class,
-        "Cannot move missing column",
-        () -> new SchemaUpdate(schema, 2).moveBefore("items", "id").apply());
+    Assertions.assertThatThrownBy(
+            () -> new SchemaUpdate(schema, 2).moveBefore("items", 
"id").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move missing column: items");
 
-    AssertHelpers.assertThrows(
-        "Should fail move for a field that is not in the schema",
-        IllegalArgumentException.class,
-        "Cannot move missing column",
-        () -> new SchemaUpdate(schema, 2).moveAfter("items", "data").apply());
+    Assertions.assertThatThrownBy(
+            () -> new SchemaUpdate(schema, 2).moveAfter("items", 
"data").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move missing column: items");
   }
 
   @Test
@@ -1498,35 +1468,32 @@ public class TestSchemaUpdate {
         new Schema(
             required(1, "id", Types.LongType.get()), required(2, "data", 
Types.StringType.get()));
 
-    AssertHelpers.assertThrows(
-        "Should fail move for a field that has not been added yet",
-        IllegalArgumentException.class,
-        "Cannot move missing column",
-        () ->
-            new SchemaUpdate(schema, 2)
-                .moveFirst("ts")
-                .addColumn("ts", Types.TimestampType.withZone())
-                .apply());
-
-    AssertHelpers.assertThrows(
-        "Should fail move for a field that has not been added yet",
-        IllegalArgumentException.class,
-        "Cannot move missing column",
-        () ->
-            new SchemaUpdate(schema, 2)
-                .moveBefore("ts", "id")
-                .addColumn("ts", Types.TimestampType.withZone())
-                .apply());
-
-    AssertHelpers.assertThrows(
-        "Should fail move for a field that has not been added yet",
-        IllegalArgumentException.class,
-        "Cannot move missing column",
-        () ->
-            new SchemaUpdate(schema, 2)
-                .moveAfter("ts", "data")
-                .addColumn("ts", Types.TimestampType.withZone())
-                .apply());
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(schema, 2)
+                    .moveFirst("ts")
+                    .addColumn("ts", Types.TimestampType.withZone())
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move missing column: ts");
+
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(schema, 2)
+                    .moveBefore("ts", "id")
+                    .addColumn("ts", Types.TimestampType.withZone())
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move missing column: ts");
+
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(schema, 2)
+                    .moveAfter("ts", "data")
+                    .addColumn("ts", Types.TimestampType.withZone())
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move missing column: ts");
   }
 
   @Test
@@ -1535,17 +1502,15 @@ public class TestSchemaUpdate {
         new Schema(
             required(1, "id", Types.LongType.get()), required(2, "data", 
Types.StringType.get()));
 
-    AssertHelpers.assertThrows(
-        "Should fail move before a field that is not in the schema",
-        IllegalArgumentException.class,
-        "Cannot move id before missing column",
-        () -> new SchemaUpdate(schema, 2).moveBefore("id", "items").apply());
+    Assertions.assertThatThrownBy(
+            () -> new SchemaUpdate(schema, 2).moveBefore("id", 
"items").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move id before missing column: items");
 
-    AssertHelpers.assertThrows(
-        "Should fail move after for a field that is not in the schema",
-        IllegalArgumentException.class,
-        "Cannot move data after missing column",
-        () -> new SchemaUpdate(schema, 2).moveAfter("data", "items").apply());
+    Assertions.assertThatThrownBy(
+            () -> new SchemaUpdate(schema, 2).moveAfter("data", 
"items").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move data after missing column: items");
   }
 
   @Test
@@ -1559,11 +1524,10 @@ public class TestSchemaUpdate {
                 "map",
                 Types.MapType.ofRequired(4, 5, Types.StringType.get(), 
Types.StringType.get())));
 
-    AssertHelpers.assertThrows(
-        "Should fail move for map key",
-        IllegalArgumentException.class,
-        "Cannot move fields in non-struct type",
-        () -> new SchemaUpdate(schema, 5).moveBefore("map.key", 
"map.value").apply());
+    Assertions.assertThatThrownBy(
+            () -> new SchemaUpdate(schema, 5).moveBefore("map.key", 
"map.value").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move fields in non-struct type: map<string, 
string>");
   }
 
   @Test
@@ -1577,11 +1541,10 @@ public class TestSchemaUpdate {
                 "map",
                 Types.MapType.ofRequired(4, 5, Types.StringType.get(), 
Types.StructType.of())));
 
-    AssertHelpers.assertThrows(
-        "Should fail move for map value",
-        IllegalArgumentException.class,
-        "Cannot move fields in non-struct type",
-        () -> new SchemaUpdate(schema, 5).moveBefore("map.value", 
"map.key").apply());
+    Assertions.assertThatThrownBy(
+            () -> new SchemaUpdate(schema, 5).moveBefore("map.value", 
"map.key").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move fields in non-struct type: map<string, 
struct<>>");
   }
 
   @Test
@@ -1592,11 +1555,10 @@ public class TestSchemaUpdate {
             required(2, "data", Types.StringType.get()),
             optional(3, "list", Types.ListType.ofRequired(4, 
Types.StringType.get())));
 
-    AssertHelpers.assertThrows(
-        "Should fail move for list element",
-        IllegalArgumentException.class,
-        "Cannot move fields in non-struct type",
-        () -> new SchemaUpdate(schema, 4).moveBefore("list.element", 
"list").apply());
+    Assertions.assertThatThrownBy(
+            () -> new SchemaUpdate(schema, 4).moveBefore("list.element", 
"list").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move fields in non-struct type: list<string>");
   }
 
   @Test
@@ -1612,11 +1574,10 @@ public class TestSchemaUpdate {
                     required(4, "x", Types.IntegerType.get()),
                     required(5, "y", Types.IntegerType.get()))));
 
-    AssertHelpers.assertThrows(
-        "Should fail move between separate structs",
-        IllegalArgumentException.class,
-        "Cannot move field a to a different struct",
-        () -> new SchemaUpdate(schema, 5).moveBefore("a", "struct.x").apply());
+    Assertions.assertThatThrownBy(
+            () -> new SchemaUpdate(schema, 5).moveBefore("a", 
"struct.x").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move field a to a different struct");
   }
 
   @Test
@@ -1636,11 +1597,10 @@ public class TestSchemaUpdate {
                     required(5, "x", Types.IntegerType.get()),
                     required(6, "y", Types.IntegerType.get()))));
 
-    AssertHelpers.assertThrows(
-        "Should fail move between separate structs",
-        IllegalArgumentException.class,
-        "Cannot move field s2.x to a different struct",
-        () -> new SchemaUpdate(schema, 6).moveBefore("s2.x", "s1.a").apply());
+    Assertions.assertThatThrownBy(
+            () -> new SchemaUpdate(schema, 6).moveBefore("s2.x", 
"s1.a").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot move field s2.x to a different struct");
   }
 
   @Test
@@ -1800,69 +1760,71 @@ public class TestSchemaUpdate {
             required(2, "float", Types.FloatType.get()),
             required(3, "double", Types.DoubleType.get()));
 
-    AssertHelpers.assertThrows(
-        "Creating schema with nonexistent identifier fieldId should fail",
-        IllegalArgumentException.class,
-        "Cannot add fieldId 999 as an identifier field: field does not exist",
-        () -> new Schema(testSchema.asStruct().fields(), 
ImmutableSet.of(999)));
-
-    AssertHelpers.assertThrows(
-        "Creating schema with optional identifier field should fail",
-        IllegalArgumentException.class,
-        "Cannot add field id as an identifier field: not a required field",
-        () -> new Schema(testSchema.asStruct().fields(), ImmutableSet.of(1)));
-
-    AssertHelpers.assertThrows(
-        "Creating schema with float identifier field should fail",
-        IllegalArgumentException.class,
-        "Cannot add field float as an identifier field: must not be float or 
double field",
-        () -> new Schema(testSchema.asStruct().fields(), ImmutableSet.of(2)));
-
-    AssertHelpers.assertThrows(
-        "Creating schema with double identifier field should fail",
-        IllegalArgumentException.class,
-        "Cannot add field double as an identifier field: must not be float or 
double field",
-        () -> new Schema(testSchema.asStruct().fields(), ImmutableSet.of(3)));
-
-    AssertHelpers.assertThrows(
-        "add a field with name not exist should fail",
-        IllegalArgumentException.class,
-        "not found in current schema or added columns",
-        () ->
-            new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID).setIdentifierFields("unknown").apply());
-
-    AssertHelpers.assertThrows(
-        "add a field of non-primitive type should fail",
-        IllegalArgumentException.class,
-        "not a primitive type field",
-        () ->
-            new SchemaUpdate(SCHEMA, SCHEMA_LAST_COLUMN_ID)
-                .setIdentifierFields("locations")
-                .apply());
-
-    AssertHelpers.assertThrows(
-        "add an optional field should fail",
-        IllegalArgumentException.class,
-        "not a required field",
-        () -> new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID).setIdentifierFields("data").apply());
-
-    AssertHelpers.assertThrows(
-        "add a map key nested field should fail",
-        IllegalArgumentException.class,
-        "must not be nested in " + SCHEMA.findField("locations"),
-        () ->
-            new SchemaUpdate(SCHEMA, SCHEMA_LAST_COLUMN_ID)
-                .setIdentifierFields("locations.key.zip")
-                .apply());
-
-    AssertHelpers.assertThrows(
-        "add a nested field in list should fail",
-        IllegalArgumentException.class,
-        "must not be nested in " + SCHEMA.findField("points"),
-        () ->
-            new SchemaUpdate(SCHEMA, SCHEMA_LAST_COLUMN_ID)
-                .setIdentifierFields("points.element.x")
-                .apply());
+    Assertions.assertThatThrownBy(
+            () -> new Schema(testSchema.asStruct().fields(), 
ImmutableSet.of(999)))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot add fieldId 999 as an identifier field: field does 
not exist");
+
+    Assertions.assertThatThrownBy(
+            () -> new Schema(testSchema.asStruct().fields(), 
ImmutableSet.of(1)))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot add field id as an identifier field: not a 
required field");
+
+    Assertions.assertThatThrownBy(
+            () -> new Schema(testSchema.asStruct().fields(), 
ImmutableSet.of(2)))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage(
+            "Cannot add field float as an identifier field: must not be float 
or double field");
+
+    Assertions.assertThatThrownBy(
+            () -> new Schema(testSchema.asStruct().fields(), 
ImmutableSet.of(3)))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage(
+            "Cannot add field double as an identifier field: must not be float 
or double field");
+
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(SCHEMA, SCHEMA_LAST_COLUMN_ID)
+                    .setIdentifierFields("unknown")
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage(
+            "Cannot add field unknown as an identifier field: not found in 
current schema or added columns");
+
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(SCHEMA, SCHEMA_LAST_COLUMN_ID)
+                    .setIdentifierFields("locations")
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage(
+            "Cannot add field locations as an identifier field: not a 
primitive type field");
+
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID).setIdentifierFields("data").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot add field data as an identifier field: not a 
required field");
+
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(SCHEMA, SCHEMA_LAST_COLUMN_ID)
+                    .setIdentifierFields("locations.key.zip")
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith(
+            "Cannot add field zip as an identifier field: must not be nested 
in "
+                + SCHEMA.findField("locations"));
+
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(SCHEMA, SCHEMA_LAST_COLUMN_ID)
+                    .setIdentifierFields("points.element.x")
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith(
+            "Cannot add field x as an identifier field: must not be nested in "
+                + SCHEMA.findField("points"));
 
     Schema newSchema =
         new SchemaUpdate(SCHEMA, SCHEMA_LAST_COLUMN_ID)
@@ -1903,53 +1865,57 @@ public class TestSchemaUpdate {
 
     int lastColId = SCHEMA_LAST_COLUMN_ID + 15;
 
-    AssertHelpers.assertThrows(
-        "add a nested field in list should fail",
-        IllegalArgumentException.class,
-        "must not be nested in " + newSchema.findField("required_list"),
-        () ->
-            new SchemaUpdate(newSchema, lastColId)
-                .setIdentifierFields("required_list.element.x")
-                .apply());
-
-    AssertHelpers.assertThrows(
-        "add a double field should fail",
-        IllegalArgumentException.class,
-        "must not be float or double field",
-        () -> new SchemaUpdate(newSchema, 
lastColId).setIdentifierFields("col_double").apply());
-
-    AssertHelpers.assertThrows(
-        "add a float field should fail",
-        IllegalArgumentException.class,
-        "must not be float or double field",
-        () -> new SchemaUpdate(newSchema, 
lastColId).setIdentifierFields("col_float").apply());
-
-    AssertHelpers.assertThrows(
-        "add a map value nested field should fail",
-        IllegalArgumentException.class,
-        "must not be nested in " + newSchema.findField("new_map"),
-        () ->
-            new SchemaUpdate(newSchema, lastColId)
-                .setIdentifierFields("new_map.value.val_col")
-                .apply());
-
-    AssertHelpers.assertThrows(
-        "add a nested field in struct of a list should fail",
-        IllegalArgumentException.class,
-        "must not be nested in " + newSchema.findField("new.fields"),
-        () ->
-            new SchemaUpdate(newSchema, lastColId)
-                .setIdentifierFields("new.fields.element.nested")
-                .apply());
-
-    AssertHelpers.assertThrows(
-        "add a nested field in an optional struct should fail",
-        IllegalArgumentException.class,
-        "must not be nested in an optional field " + 
newSchema.findField("preferences"),
-        () ->
-            new SchemaUpdate(newSchema, lastColId)
-                .setIdentifierFields("preferences.feature1")
-                .apply());
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(newSchema, lastColId)
+                    .setIdentifierFields("required_list.element.x")
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith(
+            "Cannot add field x as an identifier field: must not be nested in "
+                + newSchema.findField("required_list"));
+
+    Assertions.assertThatThrownBy(
+            () -> new SchemaUpdate(newSchema, 
lastColId).setIdentifierFields("col_double").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage(
+            "Cannot add field col_double as an identifier field: must not be 
float or double field");
+
+    Assertions.assertThatThrownBy(
+            () -> new SchemaUpdate(newSchema, 
lastColId).setIdentifierFields("col_float").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage(
+            "Cannot add field col_float as an identifier field: must not be 
float or double field");
+
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(newSchema, lastColId)
+                    .setIdentifierFields("new_map.value.val_col")
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith(
+            "Cannot add field val_col as an identifier field: must not be 
nested in "
+                + newSchema.findField("new_map"));
+
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(newSchema, lastColId)
+                    .setIdentifierFields("new.fields.element.nested")
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith(
+            "Cannot add field nested as an identifier field: must not be 
nested in "
+                + newSchema.findField("new.fields"));
+
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(newSchema, lastColId)
+                    .setIdentifierFields("preferences.feature1")
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage(
+            "Cannot add field feature1 as an identifier field: must not be 
nested in an optional field "
+                + newSchema.findField("preferences"));
   }
 
   @Test
@@ -1981,15 +1947,14 @@ public class TestSchemaUpdate {
     Schema schemaWithIdentifierFields =
         new SchemaUpdate(SCHEMA, 
SCHEMA_LAST_COLUMN_ID).setIdentifierFields("id").apply();
 
-    AssertHelpers.assertThrows(
-        "delete an identifier column without setting identifier fields should 
fail",
-        IllegalArgumentException.class,
-        "Cannot delete identifier field 1: id: required int. To force 
deletion, "
-            + "also call setIdentifierFields to update identifier fields.",
-        () ->
-            new SchemaUpdate(schemaWithIdentifierFields, SCHEMA_LAST_COLUMN_ID)
-                .deleteColumn("id")
-                .apply());
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(schemaWithIdentifierFields, 
SCHEMA_LAST_COLUMN_ID)
+                    .deleteColumn("id")
+                    .apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage(
+            "Cannot delete identifier field 1: id: required int. To force 
deletion, also call setIdentifierFields to update identifier fields.");
   }
 
   @Test
@@ -2005,12 +1970,13 @@ public class TestSchemaUpdate {
             .setIdentifierFields("out.nested")
             .apply();
 
-    AssertHelpers.assertThrows(
-        "delete a struct with a nested identifier column without setting 
identifier fields should fail",
-        IllegalArgumentException.class,
-        "Cannot delete field 24: out: required struct<25: nested: required 
string> "
-            + "as it will delete nested identifier field 25: nested: required 
string",
-        () -> new SchemaUpdate(newSchema, SCHEMA_LAST_COLUMN_ID + 
2).deleteColumn("out").apply());
+    Assertions.assertThatThrownBy(
+            () ->
+                new SchemaUpdate(newSchema, SCHEMA_LAST_COLUMN_ID + 
2).deleteColumn("out").apply())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage(
+            "Cannot delete field 24: out: required struct<25: nested: required 
string> "
+                + "as it will delete nested identifier field 25: nested: 
required string");
   }
 
   @Test
diff --git a/core/src/test/java/org/apache/iceberg/TestSnapshotManager.java 
b/core/src/test/java/org/apache/iceberg/TestSnapshotManager.java
index 5c248bb59f..ba4e85f494 100644
--- a/core/src/test/java/org/apache/iceberg/TestSnapshotManager.java
+++ b/core/src/test/java/org/apache/iceberg/TestSnapshotManager.java
@@ -20,6 +20,7 @@ package org.apache.iceberg;
 
 import org.apache.iceberg.exceptions.ValidationException;
 import org.apache.iceberg.relocated.com.google.common.collect.Iterables;
+import org.assertj.core.api.Assertions;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -115,11 +116,10 @@ public class TestSnapshotManager extends TableTestBase {
     long lastSnapshotId = table.currentSnapshot().snapshotId();
 
     // pick the snapshot into the current state
-    AssertHelpers.assertThrows(
-        "Should reject partition replacement when a partition has been 
modified",
-        ValidationException.class,
-        "Cannot cherry-pick replace partitions with changed partition",
-        () -> 
table.manageSnapshots().cherrypick(staged.snapshotId()).commit());
+    Assertions.assertThatThrownBy(
+            () -> 
table.manageSnapshots().cherrypick(staged.snapshotId()).commit())
+        .isInstanceOf(ValidationException.class)
+        .hasMessageStartingWith("Cannot cherry-pick replace partitions with 
changed partition");
 
     Assert.assertEquals(
         "Failed cherry-pick should not change the table state",
@@ -147,11 +147,10 @@ public class TestSnapshotManager extends TableTestBase {
     long lastSnapshotId = table.currentSnapshot().snapshotId();
 
     // pick the snapshot into the current state
-    AssertHelpers.assertThrows(
-        "Should reject partition replacement when a partition has been 
modified",
-        ValidationException.class,
-        "Missing required files to delete",
-        () -> 
table.manageSnapshots().cherrypick(staged.snapshotId()).commit());
+    Assertions.assertThatThrownBy(
+            () -> 
table.manageSnapshots().cherrypick(staged.snapshotId()).commit())
+        .isInstanceOf(ValidationException.class)
+        .hasMessageStartingWith("Missing required files to delete");
 
     Assert.assertEquals(
         "Failed cherry-pick should not change the table state",
@@ -178,11 +177,11 @@ public class TestSnapshotManager extends TableTestBase {
     long lastSnapshotId = table.currentSnapshot().snapshotId();
 
     // pick the snapshot into the current state
-    AssertHelpers.assertThrows(
-        "Should reject partition replacement when a partition has been 
modified",
-        ValidationException.class,
-        "Cannot cherry-pick overwrite not based on an ancestor of the current 
state",
-        () -> table.manageSnapshots().cherrypick(replaceSnapshotId).commit());
+    Assertions.assertThatThrownBy(
+            () -> 
table.manageSnapshots().cherrypick(replaceSnapshotId).commit())
+        .isInstanceOf(ValidationException.class)
+        .hasMessageStartingWith(
+            "Cannot cherry-pick overwrite not based on an ancestor of the 
current state");
 
     Assert.assertEquals(
         "Failed cherry-pick should not change the table state",
@@ -207,11 +206,10 @@ public class TestSnapshotManager extends TableTestBase {
     long lastSnapshotId = table.currentSnapshot().snapshotId();
 
     // pick the snapshot into the current state
-    AssertHelpers.assertThrows(
-        "Should reject partition replacement when a partition has been 
modified",
-        ValidationException.class,
-        "not append, dynamic overwrite, or fast-forward",
-        () -> 
table.manageSnapshots().cherrypick(staged.snapshotId()).commit());
+    Assertions.assertThatThrownBy(
+            () -> 
table.manageSnapshots().cherrypick(staged.snapshotId()).commit())
+        .isInstanceOf(ValidationException.class)
+        .hasMessageEndingWith("not append, dynamic overwrite, or 
fast-forward");
 
     Assert.assertEquals(
         "Failed cherry-pick should not change the table state",
@@ -238,23 +236,21 @@ public class TestSnapshotManager extends TableTestBase {
     long snapshotId = table.currentSnapshot().snapshotId();
     table.manageSnapshots().createBranch("branch1", snapshotId).commit();
     // Trying to create a branch with an existing name should fail
-    AssertHelpers.assertThrows(
-        "Creating branch which already exists should fail",
-        IllegalArgumentException.class,
-        "Ref branch1 already exists",
-        () -> table.manageSnapshots().createBranch("branch1", 
snapshotId).commit());
+    Assertions.assertThatThrownBy(
+            () -> table.manageSnapshots().createBranch("branch1", 
snapshotId).commit())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Ref branch1 already exists");
 
     // Trying to create another branch within the same chain
-    AssertHelpers.assertThrows(
-        "Creating branch which already exists should fail",
-        IllegalArgumentException.class,
-        "Ref branch2 already exists",
-        () ->
-            table
-                .manageSnapshots()
-                .createBranch("branch2", snapshotId)
-                .createBranch("branch2", snapshotId)
-                .commit());
+    Assertions.assertThatThrownBy(
+            () ->
+                table
+                    .manageSnapshots()
+                    .createBranch("branch2", snapshotId)
+                    .createBranch("branch2", snapshotId)
+                    .commit())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Ref branch2 already exists");
   }
 
   @Test
@@ -276,23 +272,21 @@ public class TestSnapshotManager extends TableTestBase {
     table.manageSnapshots().createTag("tag1", snapshotId).commit();
 
     // Trying to create a tag with an existing name should fail
-    AssertHelpers.assertThrows(
-        "Creating tag which already exists should fail",
-        IllegalArgumentException.class,
-        "Ref tag1 already exists",
-        () -> table.manageSnapshots().createTag("tag1", snapshotId).commit());
+    Assertions.assertThatThrownBy(
+            () -> table.manageSnapshots().createTag("tag1", 
snapshotId).commit())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Ref tag1 already exists");
 
     // Trying to create another tag within the same chain
-    AssertHelpers.assertThrows(
-        "Creating branch which already exists should fail",
-        IllegalArgumentException.class,
-        "Ref tag2 already exists",
-        () ->
-            table
-                .manageSnapshots()
-                .createTag("tag2", snapshotId)
-                .createTag("tag2", snapshotId)
-                .commit());
+    Assertions.assertThatThrownBy(
+            () ->
+                table
+                    .manageSnapshots()
+                    .createTag("tag2", snapshotId)
+                    .createTag("tag2", snapshotId)
+                    .commit())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Ref tag2 already exists");
   }
 
   @Test
@@ -315,20 +309,18 @@ public class TestSnapshotManager extends TableTestBase {
 
   @Test
   public void testRemovingNonExistingBranchFails() {
-    AssertHelpers.assertThrows(
-        "Trying to remove non-existent branch should fail",
-        IllegalArgumentException.class,
-        "Branch does not exist: non-existing",
-        () -> table.manageSnapshots().removeBranch("non-existing").commit());
+    Assertions.assertThatThrownBy(
+            () -> 
table.manageSnapshots().removeBranch("non-existing").commit())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Branch does not exist: non-existing");
   }
 
   @Test
   public void testRemovingMainBranchFails() {
-    AssertHelpers.assertThrows(
-        "Removing main should fail",
-        IllegalArgumentException.class,
-        "Cannot remove main branch",
-        () -> 
table.manageSnapshots().removeBranch(SnapshotRef.MAIN_BRANCH).commit());
+    Assertions.assertThatThrownBy(
+            () -> 
table.manageSnapshots().removeBranch(SnapshotRef.MAIN_BRANCH).commit())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot remove main branch");
   }
 
   @Test
@@ -350,11 +342,9 @@ public class TestSnapshotManager extends TableTestBase {
 
   @Test
   public void testRemovingNonExistingTagFails() {
-    AssertHelpers.assertThrows(
-        "Removing a non-existing tag should fail",
-        IllegalArgumentException.class,
-        "Tag does not exist: non-existing",
-        () -> table.manageSnapshots().removeTag("non-existing").commit());
+    Assertions.assertThatThrownBy(() -> 
table.manageSnapshots().removeTag("non-existing").commit())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Tag does not exist: non-existing");
   }
 
   @Test
@@ -372,11 +362,10 @@ public class TestSnapshotManager extends TableTestBase {
 
   @Test
   public void testReplaceBranchNonExistingTargetBranchFails() {
-    AssertHelpers.assertThrows(
-        "Replacing a non-existing branch should fail",
-        IllegalArgumentException.class,
-        "Target branch does not exist: non-existing",
-        () -> table.manageSnapshots().replaceBranch("non-existing", 
"other-branch").commit());
+    Assertions.assertThatThrownBy(
+            () -> table.manageSnapshots().replaceBranch("non-existing", 
"other-branch").commit())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Target branch does not exist: non-existing");
   }
 
   @Test
@@ -384,11 +373,10 @@ public class TestSnapshotManager extends TableTestBase {
     table.newAppend().appendFile(FILE_A).commit();
     long snapshotId = table.currentSnapshot().snapshotId();
     table.manageSnapshots().createBranch("branch1", snapshotId).commit();
-    AssertHelpers.assertThrows(
-        "Replacing where the source ref does not exist should fail",
-        IllegalArgumentException.class,
-        "Ref does not exist: non-existing",
-        () -> table.manageSnapshots().replaceBranch("branch1", 
"non-existing").commit());
+    Assertions.assertThatThrownBy(
+            () -> table.manageSnapshots().replaceBranch("branch1", 
"non-existing").commit())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Ref does not exist: non-existing");
   }
 
   @Test
@@ -422,12 +410,15 @@ public class TestSnapshotManager extends TableTestBase {
     final String newBranch = "new-branch-at-staged-snapshot";
     table.manageSnapshots().createBranch(newBranch, snapshot).commit();
 
-    AssertHelpers.assertThrows(
-        "Fast-forward should fail if target is not an ancestor of the source",
-        IllegalArgumentException.class,
-        "Cannot fast-forward: main is not an ancestor of 
new-branch-at-staged-snapshot",
-        () ->
-            table.manageSnapshots().fastForwardBranch(SnapshotRef.MAIN_BRANCH, 
newBranch).commit());
+    Assertions.assertThatThrownBy(
+            () ->
+                table
+                    .manageSnapshots()
+                    .fastForwardBranch(SnapshotRef.MAIN_BRANCH, newBranch)
+                    .commit())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage(
+            "Cannot fast-forward: main is not an ancestor of 
new-branch-at-staged-snapshot");
   }
 
   @Test
@@ -473,26 +464,25 @@ public class TestSnapshotManager extends TableTestBase {
     table.newAppend().appendFile(FILE_A).commit();
     long snapshotId = table.currentSnapshot().snapshotId();
 
-    AssertHelpers.assertThrows(
-        "Setting minSnapshotsToKeep should fail for tags",
-        IllegalArgumentException.class,
-        "Tags do not support setting minSnapshotsToKeep",
-        () ->
-            table
-                .manageSnapshots()
-                .createTag("tag1", snapshotId)
-                .setMinSnapshotsToKeep("tag1", 10)
-                .commit());
-    AssertHelpers.assertThrows(
-        "Setting maxSnapshotAgeMs should fail for tags",
-        IllegalArgumentException.class,
-        "Tags do not support setting maxSnapshotAgeMs",
-        () ->
-            table
-                .manageSnapshots()
-                .createTag("tag1", snapshotId)
-                .setMaxSnapshotAgeMs("tag1", 10)
-                .commit());
+    Assertions.assertThatThrownBy(
+            () ->
+                table
+                    .manageSnapshots()
+                    .createTag("tag1", snapshotId)
+                    .setMinSnapshotsToKeep("tag1", 10)
+                    .commit())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Tags do not support setting minSnapshotsToKeep");
+
+    Assertions.assertThatThrownBy(
+            () ->
+                table
+                    .manageSnapshots()
+                    .createTag("tag1", snapshotId)
+                    .setMaxSnapshotAgeMs("tag1", 10)
+                    .commit())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Tags do not support setting maxSnapshotAgeMs");
   }
 
   @Test
@@ -558,21 +548,23 @@ public class TestSnapshotManager extends TableTestBase {
 
   @Test
   public void testFailRenamingMainBranch() {
-    AssertHelpers.assertThrows(
-        "Renaming main branch should fail",
-        IllegalArgumentException.class,
-        "Cannot rename main branch",
-        () ->
-            table.manageSnapshots().renameBranch(SnapshotRef.MAIN_BRANCH, 
"some-branch").commit());
+    Assertions.assertThatThrownBy(
+            () ->
+                table
+                    .manageSnapshots()
+                    .renameBranch(SnapshotRef.MAIN_BRANCH, "some-branch")
+                    .commit())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot rename main branch");
   }
 
   @Test
   public void testRenamingNonExistingBranchFails() {
-    AssertHelpers.assertThrows(
-        "Renaming non-existent branch should fail",
-        IllegalArgumentException.class,
-        "Branch does not exist: some-missing-branch",
-        () -> table.manageSnapshots().renameBranch("some-missing-branch", 
"some-branch").commit());
+    Assertions.assertThatThrownBy(
+            () ->
+                table.manageSnapshots().renameBranch("some-missing-branch", 
"some-branch").commit())
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Branch does not exist: some-missing-branch");
   }
 
   @Test
diff --git a/core/src/test/java/org/apache/iceberg/TestUpdatePartitionSpec.java 
b/core/src/test/java/org/apache/iceberg/TestUpdatePartitionSpec.java
index 97210e51b5..926272e60f 100644
--- a/core/src/test/java/org/apache/iceberg/TestUpdatePartitionSpec.java
+++ b/core/src/test/java/org/apache/iceberg/TestUpdatePartitionSpec.java
@@ -29,6 +29,7 @@ import static org.apache.iceberg.expressions.Expressions.year;
 import org.apache.iceberg.relocated.com.google.common.collect.ImmutableList;
 import org.apache.iceberg.transforms.Transforms;
 import org.apache.iceberg.types.Types;
+import org.assertj.core.api.Assertions;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -419,71 +420,65 @@ public class TestUpdatePartitionSpec extends 
TableTestBase {
 
   @Test
   public void testRemoveNewlyAddedFieldByName() {
-    AssertHelpers.assertThrows(
-        "Should fail trying to remove unknown field",
-        IllegalArgumentException.class,
-        "Cannot delete newly added field",
-        () ->
-            new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
-                .addField("prefix", truncate("data", 4))
-                .removeField("prefix"));
+    Assertions.assertThatThrownBy(
+            () ->
+                new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
+                    .addField("prefix", truncate("data", 4))
+                    .removeField("prefix"))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot delete newly added field");
   }
 
   @Test
   public void testRemoveNewlyAddedFieldByTransform() {
-    AssertHelpers.assertThrows(
-        "Should fail adding a duplicate field",
-        IllegalArgumentException.class,
-        "Cannot delete newly added field",
-        () ->
-            new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
-                .addField("prefix", truncate("data", 4))
-                .removeField(truncate("data", 4)));
+    Assertions.assertThatThrownBy(
+            () ->
+                new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
+                    .addField("prefix", truncate("data", 4))
+                    .removeField(truncate("data", 4)))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot delete newly added field");
   }
 
   @Test
   public void testAddAlreadyAddedFieldByTransform() {
-    AssertHelpers.assertThrows(
-        "Should fail adding a duplicate field",
-        IllegalArgumentException.class,
-        "Cannot add duplicate partition field",
-        () ->
-            new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
-                .addField("prefix", truncate("data", 4))
-                .addField(truncate("data", 4)));
+    Assertions.assertThatThrownBy(
+            () ->
+                new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
+                    .addField("prefix", truncate("data", 4))
+                    .addField(truncate("data", 4)))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot add duplicate partition field");
   }
 
   @Test
   public void testAddAlreadyAddedFieldByName() {
-    AssertHelpers.assertThrows(
-        "Should fail adding a duplicate field",
-        IllegalArgumentException.class,
-        "Cannot add duplicate partition field",
-        () ->
-            new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
-                .addField("prefix", truncate("data", 4))
-                .addField("prefix", truncate("data", 6)));
+    Assertions.assertThatThrownBy(
+            () ->
+                new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
+                    .addField("prefix", truncate("data", 4))
+                    .addField("prefix", truncate("data", 6)))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot add duplicate partition field");
   }
 
   @Test
   public void testAddRedundantTimePartition() {
-    AssertHelpers.assertThrows(
-        "Should fail adding a duplicate field",
-        IllegalArgumentException.class,
-        "Cannot add redundant partition field",
-        () ->
-            new BaseUpdatePartitionSpec(formatVersion, UNPARTITIONED)
-                .addField(day("ts"))
-                .addField(hour("ts"))); // conflicts with hour
-
-    AssertHelpers.assertThrows(
-        "Should fail adding a duplicate field",
-        IllegalArgumentException.class,
-        "Cannot add redundant partition",
-        () ->
-            new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
-                .addField(hour("ts")) // does not conflict with day because 
day already exists
-                .addField(month("ts"))); // conflicts with hour
+    Assertions.assertThatThrownBy(
+            () ->
+                new BaseUpdatePartitionSpec(formatVersion, UNPARTITIONED)
+                    .addField(day("ts"))
+                    .addField(hour("ts"))) // conflicts with hour
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot add redundant partition field");
+
+    Assertions.assertThatThrownBy(
+            () ->
+                new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
+                    .addField(hour("ts")) // does not conflict with day 
because day already exists
+                    .addField(month("ts"))) // conflicts with hour
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot add redundant partition");
   }
 
   @Test
@@ -532,106 +527,99 @@ public class TestUpdatePartitionSpec extends 
TableTestBase {
 
   @Test
   public void testAddDuplicateByName() {
-    AssertHelpers.assertThrows(
-        "Should fail adding a duplicate field",
-        IllegalArgumentException.class,
-        "Cannot add duplicate partition field",
-        () -> new BaseUpdatePartitionSpec(formatVersion, 
PARTITIONED).addField("category"));
+    Assertions.assertThatThrownBy(
+            () -> new BaseUpdatePartitionSpec(formatVersion, 
PARTITIONED).addField("category"))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot add duplicate partition field");
   }
 
   @Test
   public void testAddDuplicateByRef() {
-    AssertHelpers.assertThrows(
-        "Should fail adding a duplicate field",
-        IllegalArgumentException.class,
-        "Cannot add duplicate partition field",
-        () -> new BaseUpdatePartitionSpec(formatVersion, 
PARTITIONED).addField(ref("category")));
+    Assertions.assertThatThrownBy(
+            () -> new BaseUpdatePartitionSpec(formatVersion, 
PARTITIONED).addField(ref("category")))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot add duplicate partition field");
   }
 
   @Test
   public void testAddDuplicateTransform() {
-    AssertHelpers.assertThrows(
-        "Should fail adding a duplicate field",
-        IllegalArgumentException.class,
-        "Cannot add duplicate partition field",
-        () -> new BaseUpdatePartitionSpec(formatVersion, 
PARTITIONED).addField(bucket("id", 16)));
+    Assertions.assertThatThrownBy(
+            () ->
+                new BaseUpdatePartitionSpec(formatVersion, 
PARTITIONED).addField(bucket("id", 16)))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot add duplicate partition field");
   }
 
   @Test
   public void testAddNamedDuplicate() {
-    AssertHelpers.assertThrows(
-        "Should fail adding a duplicate field",
-        IllegalArgumentException.class,
-        "Cannot add duplicate partition field",
-        () ->
-            new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
-                .addField("b16", bucket("id", 16)));
+    Assertions.assertThatThrownBy(
+            () ->
+                new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
+                    .addField("b16", bucket("id", 16)))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot add duplicate partition field");
   }
 
   @Test
   public void testRemoveUnknownFieldByName() {
-    AssertHelpers.assertThrows(
-        "Should fail trying to remove unknown field",
-        IllegalArgumentException.class,
-        "Cannot find partition field to remove",
-        () -> new BaseUpdatePartitionSpec(formatVersion, 
PARTITIONED).removeField("moon"));
+    Assertions.assertThatThrownBy(
+            () -> new BaseUpdatePartitionSpec(formatVersion, 
PARTITIONED).removeField("moon"))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot find partition field to remove");
   }
 
   @Test
   public void testRemoveUnknownFieldByEquivalent() {
-    AssertHelpers.assertThrows(
-        "Should fail trying to remove unknown field",
-        IllegalArgumentException.class,
-        "Cannot find partition field to remove",
-        () ->
-            new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
-                .removeField(hour("ts")) // day(ts) exists
-        );
+    Assertions.assertThatThrownBy(
+            () ->
+                new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
+                    .removeField(hour("ts")) // day(ts) exists
+            )
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessageStartingWith("Cannot find partition field to remove");
   }
 
   @Test
   public void testRenameUnknownField() {
-    AssertHelpers.assertThrows(
-        "Should fail trying to rename an unknown field",
-        IllegalArgumentException.class,
-        "Cannot find partition field to rename",
-        () -> new BaseUpdatePartitionSpec(formatVersion, 
PARTITIONED).renameField("shake", "seal"));
+    Assertions.assertThatThrownBy(
+            () ->
+                new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
+                    .renameField("shake", "seal"))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot find partition field to rename: shake");
   }
 
   @Test
   public void testRenameAfterAdd() {
-    AssertHelpers.assertThrows(
-        "Should fail trying to rename an added field",
-        IllegalArgumentException.class,
-        "Cannot rename newly added partition field",
-        () ->
-            new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
-                .addField("data_trunc", truncate("data", 4))
-                .renameField("data_trunc", "prefix"));
+    Assertions.assertThatThrownBy(
+            () ->
+                new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
+                    .addField("data_trunc", truncate("data", 4))
+                    .renameField("data_trunc", "prefix"))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot rename newly added partition field: data_trunc");
   }
 
   @Test
   public void testDeleteAndRename() {
-    AssertHelpers.assertThrows(
-        "Should fail trying to rename a deleted field",
-        IllegalArgumentException.class,
-        "Cannot rename and delete partition field",
-        () ->
-            new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
-                .renameField("shard", "id_bucket")
-                .removeField(bucket("id", 16)));
+    Assertions.assertThatThrownBy(
+            () ->
+                new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
+                    .renameField("shard", "id_bucket")
+                    .removeField(bucket("id", 16)))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot rename and delete partition field: shard");
   }
 
   @Test
   public void testRenameAndDelete() {
-    AssertHelpers.assertThrows(
-        "Should fail trying to delete a renamed field",
-        IllegalArgumentException.class,
-        "Cannot delete and rename partition field",
-        () ->
-            new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
-                .removeField(bucket("id", 16))
-                .renameField("shard", "id_bucket"));
+    Assertions.assertThatThrownBy(
+            () ->
+                new BaseUpdatePartitionSpec(formatVersion, PARTITIONED)
+                    .removeField(bucket("id", 16))
+                    .renameField("shard", "id_bucket"))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot delete and rename partition field: shard");
   }
 
   @Test

Reply via email to