You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ma...@apache.org on 2020/12/18 12:46:36 UTC

[commons-geometry] branch master updated (ef65dd7 -> 7f8c326)

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

mattjuntunen pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/commons-geometry.git.


    from ef65dd7  bumping pmd and spotbugs versions; using managed antrun version
     new 5403a8d  GEOMETRY-105 - Replace the try-catch pattern with assertThrows()
     new 73fe3c0  Fix javadoc comment remove extra line
     new 7f8c326  fixing test docs, formatting, and compile errors

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../commons/geometry/core/GeometryTestUtils.java   |  66 ++-------
 .../core/internal/IteratorTransformTest.java       |   4 +-
 .../AbstractConvexHyperplaneBoundedRegionTest.java |  21 +--
 .../bsp/AbstractPartitionedRegionBuilderTest.java  |   4 +-
 .../bsp/AbstractRegionBSPTreeTest.java             |   4 +-
 .../EpsilonDoublePrecisionContextTest.java         |  10 +-
 .../geometry/enclosing/EnclosingBallTest.java      |   4 +-
 .../euclidean/threed/WelzlEncloser3DTest.java      |   4 +-
 .../euclidean/twod/WelzlEncloser2DTest.java        |   4 +-
 .../geometry/euclidean/internal/MatricesTest.java  |  14 +-
 .../geometry/euclidean/internal/VectorsTest.java   |  16 +-
 .../oned/AffineTransformMatrix1DTest.java          |  30 ++--
 .../geometry/euclidean/oned/IntervalTest.java      | 112 +++++---------
 .../geometry/euclidean/oned/OrientedPointTest.java |   6 +-
 .../geometry/euclidean/oned/Vector1DTest.java      |  88 ++++-------
 .../threed/AffineTransformMatrix3DTest.java        |  30 ++--
 .../geometry/euclidean/threed/Bounds3DTest.java    |  20 ++-
 .../euclidean/threed/ConvexVolumeTest.java         |   4 +-
 .../threed/EmbeddedAreaPlaneConvexSubsetTest.java  |   6 +-
 .../threed/EmbeddedTreePlaneSubsetTest.java        |  23 ++-
 .../euclidean/threed/EmbeddingPlaneTest.java       |  19 +--
 .../geometry/euclidean/threed/PlaneTest.java       | 107 +++++---------
 .../geometry/euclidean/threed/PlanesTest.java      |  87 +++++------
 .../euclidean/threed/RegionBSPTree3DTest.java      |  12 +-
 .../euclidean/threed/SimpleTriangle3DTest.java     |   4 +-
 .../euclidean/threed/SphericalCoordinatesTest.java |   4 +-
 .../geometry/euclidean/threed/Vector3DTest.java    | 159 ++++++++------------
 .../threed/VertexListConvexPolygon3DTest.java      |   6 +-
 .../geometry/euclidean/threed/line/Line3DTest.java |   8 +-
 .../threed/line/LineConvexSubset3DTest.java        |   8 +-
 .../geometry/euclidean/threed/line/Ray3DTest.java  |   8 +-
 .../euclidean/threed/line/ReverseRay3DTest.java    |   8 +-
 .../euclidean/threed/line/Segment3DTest.java       |  20 +--
 .../threed/mesh/SimpleTriangleMeshTest.java        |  42 +++---
 .../threed/rotation/QuaternionRotationTest.java    |  95 +++++-------
 .../euclidean/threed/shape/ParallelepipedTest.java |  35 ++---
 .../euclidean/threed/shape/SphereTest.java         |  30 ++--
 .../twod/AffineTransformMatrix2DTest.java          |  30 ++--
 .../geometry/euclidean/twod/Bounds2DTest.java      |  19 +--
 .../geometry/euclidean/twod/ConvexAreaTest.java    |  44 +++---
 .../euclidean/twod/EmbeddedTreeLineSubsetTest.java |   9 +-
 .../euclidean/twod/LineConvexSubsetTest.java       |  12 +-
 .../commons/geometry/euclidean/twod/LineTest.java  |  10 +-
 .../euclidean/twod/PolarCoordinatesTest.java       |   4 +-
 .../commons/geometry/euclidean/twod/RayTest.java   |  14 +-
 .../euclidean/twod/RegionBSPTree2DTest.java        |  12 +-
 .../geometry/euclidean/twod/ReverseRayTest.java    |  14 +-
 .../geometry/euclidean/twod/SegmentTest.java       |  20 +--
 .../geometry/euclidean/twod/Vector2DTest.java      | 162 ++++++++-------------
 .../geometry/euclidean/twod/path/LinePathTest.java |  52 ++-----
 .../euclidean/twod/rotation/Rotation2DTest.java    |  35 +----
 .../geometry/euclidean/twod/shape/CircleTest.java  |  26 ++--
 .../euclidean/twod/shape/ParallelogramTest.java    |  28 +---
 .../io/threed/ModelIOHandlerRegistryTest.java      |  16 +-
 .../io/threed/obj/OBJModelIOHandlerTest.java       |  20 +--
 .../examples/io/threed/obj/OBJReaderTest.java      |  41 ++----
 .../examples/io/threed/obj/OBJWriterTest.java      |   4 +-
 .../hull/euclidean/twod/ConvexHull2DTest.java      |   5 +-
 .../hull/euclidean/twod/MonotoneChainTest.java     |   5 +-
 .../spherical/oned/AngularIntervalTest.java        | 138 ++++--------------
 .../geometry/spherical/oned/Point1STest.java       |  46 ++----
 .../geometry/spherical/twod/ConvexArea2STest.java  |  10 +-
 .../twod/EmbeddedTreeSubGreatCircleTest.java       |   5 +-
 .../geometry/spherical/twod/GreatArcPathTest.java  |  18 +--
 .../geometry/spherical/twod/GreatArcTest.java      |   9 +-
 .../geometry/spherical/twod/GreatCircleTest.java   |  25 +---
 .../geometry/spherical/twod/Point2STest.java       |   3 +-
 .../spherical/twod/RegionBSPTree2STest.java        |   5 +-
 68 files changed, 695 insertions(+), 1268 deletions(-)


[commons-geometry] 02/03: Fix javadoc comment remove extra line

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mattjuntunen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-geometry.git

commit 73fe3c04c66f3aa38b8c726dbac169b65fe90caf
Author: Arturo Bernal <ar...@gmail.com>
AuthorDate: Fri Dec 18 06:28:30 2020 +0100

    Fix javadoc comment
    remove extra line
---
 .../test/java/org/apache/commons/geometry/core/GeometryTestUtils.java | 4 ++--
 .../geometry/core/precision/EpsilonDoublePrecisionContextTest.java    | 1 -
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/GeometryTestUtils.java b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/GeometryTestUtils.java
index 0ae6ec3..fe21385 100644
--- a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/GeometryTestUtils.java
+++ b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/GeometryTestUtils.java
@@ -56,7 +56,7 @@ public final class GeometryTestUtils {
      * given value.
      * @param executable the Executable instance
      * @param exceptionType the expected exception type
-     * @param message the expected exception message; ignored if null
+     * @param message the expected exception message
      */
     public static <T extends Throwable> void assertThrowsWithMessage(final Executable executable, final Class<T> exceptionType, final String message) {
         Assertions.assertEquals(message, Assertions.assertThrows(exceptionType, executable).getMessage());
@@ -67,7 +67,7 @@ public final class GeometryTestUtils {
      * given regex.
      * @param executable the Executable instance
      * @param exceptionType the expected exception type
-     * @param pattern regex pattern to match; ignored if null
+     * @param pattern regex pattern to match
      */
     public static <T extends Throwable> void assertThrowsWithMessage(final Executable executable, final Class<T> exceptionType, final Pattern pattern) {
         final String message = Assertions.assertThrows(exceptionType, executable).getMessage();
diff --git a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContextTest.java b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContextTest.java
index 846b779..299eddb 100644
--- a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContextTest.java
+++ b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContextTest.java
@@ -20,7 +20,6 @@ import org.apache.commons.geometry.core.GeometryTestUtils;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class EpsilonDoublePrecisionContextTest {
 
     @Test


[commons-geometry] 03/03: fixing test docs, formatting, and compile errors

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mattjuntunen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-geometry.git

commit 7f8c326fc32387789f4d16b0d445c3f26ad0925c
Author: Matt Juntunen <ma...@apache.org>
AuthorDate: Fri Dec 18 07:46:17 2020 -0500

    fixing test docs, formatting, and compile errors
---
 .../commons/geometry/core/GeometryTestUtils.java   | 18 ++++++------
 .../core/internal/IteratorTransformTest.java       |  1 -
 .../AbstractConvexHyperplaneBoundedRegionTest.java |  2 --
 .../geometry/enclosing/EnclosingBallTest.java      |  1 -
 .../oned/AffineTransformMatrix1DTest.java          |  1 -
 .../geometry/euclidean/oned/IntervalTest.java      |  1 -
 .../geometry/euclidean/oned/Vector1DTest.java      |  1 -
 .../threed/AffineTransformMatrix3DTest.java        |  1 -
 .../geometry/euclidean/threed/Bounds3DTest.java    |  1 -
 .../euclidean/threed/EmbeddingPlaneTest.java       |  1 -
 .../geometry/euclidean/threed/PlaneTest.java       |  1 -
 .../geometry/euclidean/threed/PlanesTest.java      |  1 -
 .../euclidean/threed/RegionBSPTree3DTest.java      |  1 -
 .../euclidean/threed/SimpleTriangle3DTest.java     |  1 -
 .../euclidean/threed/SphericalCoordinatesTest.java |  1 -
 .../geometry/euclidean/threed/Vector3DTest.java    |  3 --
 .../threed/VertexListConvexPolygon3DTest.java      |  1 -
 .../geometry/euclidean/threed/line/Line3DTest.java |  1 -
 .../threed/mesh/SimpleTriangleMeshTest.java        |  1 -
 .../threed/rotation/QuaternionRotationTest.java    |  2 --
 .../euclidean/threed/shape/ParallelepipedTest.java |  1 -
 .../euclidean/threed/shape/SphereTest.java         |  1 -
 .../twod/AffineTransformMatrix2DTest.java          |  1 -
 .../geometry/euclidean/twod/Bounds2DTest.java      |  1 -
 .../geometry/euclidean/twod/ConvexAreaTest.java    |  1 -
 .../euclidean/twod/EmbeddedTreeLineSubsetTest.java |  1 -
 .../euclidean/twod/PolarCoordinatesTest.java       |  1 -
 .../euclidean/twod/RegionBSPTree2DTest.java        |  1 -
 .../geometry/euclidean/twod/Vector2DTest.java      |  1 -
 .../geometry/euclidean/twod/path/LinePathTest.java |  1 -
 .../euclidean/twod/rotation/Rotation2DTest.java    |  1 -
 .../geometry/euclidean/twod/shape/CircleTest.java  |  1 -
 .../euclidean/twod/shape/ParallelogramTest.java    |  1 -
 .../io/threed/obj/OBJModelIOHandlerTest.java       |  8 +++---
 .../examples/io/threed/obj/OBJReaderTest.java      | 33 ++++++----------------
 .../hull/euclidean/twod/ConvexHull2DTest.java      |  1 -
 .../hull/euclidean/twod/MonotoneChainTest.java     |  1 -
 .../spherical/oned/AngularIntervalTest.java        |  1 -
 .../geometry/spherical/oned/Point1STest.java       |  1 -
 .../geometry/spherical/twod/ConvexArea2STest.java  |  1 -
 .../geometry/spherical/twod/GreatArcTest.java      |  1 -
 .../geometry/spherical/twod/GreatCircleTest.java   |  1 -
 .../spherical/twod/RegionBSPTree2STest.java        |  1 -
 43 files changed, 20 insertions(+), 83 deletions(-)

diff --git a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/GeometryTestUtils.java b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/GeometryTestUtils.java
index fe21385..23774b9 100644
--- a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/GeometryTestUtils.java
+++ b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/GeometryTestUtils.java
@@ -27,7 +27,6 @@ import org.junit.jupiter.api.function.Executable;
 
 /** Class containing various geometry-related test utilities.
  */
-
 public final class GeometryTestUtils {
 
     /** Utility class; no instantiation. */
@@ -51,25 +50,24 @@ public final class GeometryTestUtils {
         Assertions.assertTrue(value < 0, msg);
     }
 
-    /** Asserts that the given Executable throws an exception of the given type. If
-     * {@code message} is not null, the exception message is asserted to equal the
-     * given value.
+    /** Asserts that the Executable throws an exception matching the given type and message.
      * @param executable the Executable instance
      * @param exceptionType the expected exception type
-     * @param message the expected exception message
+     * @param message the expected exception message; may be null
      */
-    public static <T extends Throwable> void assertThrowsWithMessage(final Executable executable, final Class<T> exceptionType, final String message) {
+    public static <T extends Throwable> void assertThrowsWithMessage(final Executable executable,
+            final Class<T> exceptionType, final String message) {
         Assertions.assertEquals(message, Assertions.assertThrows(exceptionType, executable).getMessage());
     }
 
-    /** Asserts that the given Executable throws an exception of the given type. If
-     * {@code pattern} is not null, the exception message is asserted to match the
-     * given regex.
+    /** Asserts that the Executable throws an exception of the given type with a non-null message matching
+     * the specified regex pattern.
      * @param executable the Executable instance
      * @param exceptionType the expected exception type
      * @param pattern regex pattern to match
      */
-    public static <T extends Throwable> void assertThrowsWithMessage(final Executable executable, final Class<T> exceptionType, final Pattern pattern) {
+    public static <T extends Throwable> void assertThrowsWithMessage(final Executable executable,
+            final Class<T> exceptionType, final Pattern pattern) {
         final String message = Assertions.assertThrows(exceptionType, executable).getMessage();
         Assertions.assertTrue(pattern.matcher(message).matches(),
                 "Expected exception message to match /" + pattern + "/ but was [" + message + "]");
diff --git a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/internal/IteratorTransformTest.java b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/internal/IteratorTransformTest.java
index c52f1fc..cb8a019 100644
--- a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/internal/IteratorTransformTest.java
+++ b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/internal/IteratorTransformTest.java
@@ -26,7 +26,6 @@ import java.util.NoSuchElementException;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class IteratorTransformTest {
 
     @Test
diff --git a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegionTest.java b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegionTest.java
index f537c1f..b018d21 100644
--- a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegionTest.java
+++ b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegionTest.java
@@ -33,7 +33,6 @@ import org.apache.commons.geometry.core.partitioning.test.TestTransform2D;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class AbstractConvexHyperplaneBoundedRegionTest {
 
     @Test
@@ -636,7 +635,6 @@ public class AbstractConvexHyperplaneBoundedRegionTest {
                 TestLine.Y_AXIS,
                 new TestLine(new TestPoint2D(1, 0), new TestPoint2D(0, -1)),
                 new TestLine(new TestPoint2D(1, 0), new TestPoint2D(0, -2)))));
-
     }
 
     @Test
diff --git a/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/EnclosingBallTest.java b/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/EnclosingBallTest.java
index 566d356..130b7da 100644
--- a/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/EnclosingBallTest.java
+++ b/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/EnclosingBallTest.java
@@ -27,7 +27,6 @@ import org.apache.commons.geometry.euclidean.twod.Vector2D;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class EnclosingBallTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/AffineTransformMatrix1DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/AffineTransformMatrix1DTest.java
index dd2c0df..4926159 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/AffineTransformMatrix1DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/AffineTransformMatrix1DTest.java
@@ -24,7 +24,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class AffineTransformMatrix1DTest {
 
     private static final double EPS = 1e-12;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/IntervalTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/IntervalTest.java
index d40691b..ae2aaf8 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/IntervalTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/IntervalTest.java
@@ -25,7 +25,6 @@ import org.apache.commons.geometry.euclidean.EuclideanTestUtils;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class IntervalTest {
 
     private static final double TEST_EPS = 1e-15;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/Vector1DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/Vector1DTest.java
index 085eb9d..b44edfe 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/Vector1DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/Vector1DTest.java
@@ -27,7 +27,6 @@ import org.apache.commons.numbers.core.Precision;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class Vector1DTest {
 
     private static final double TEST_TOLERANCE = 1e-15;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/AffineTransformMatrix3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/AffineTransformMatrix3DTest.java
index 525aae7..744c626 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/AffineTransformMatrix3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/AffineTransformMatrix3DTest.java
@@ -29,7 +29,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class AffineTransformMatrix3DTest {
 
     private static final double EPS = 1e-12;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Bounds3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Bounds3DTest.java
index 636de3f..cd994e4 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Bounds3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Bounds3DTest.java
@@ -31,7 +31,6 @@ import org.apache.commons.geometry.euclidean.threed.shape.Parallelepiped;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class Bounds3DTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddingPlaneTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddingPlaneTest.java
index 2deaf74..1d5dd20 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddingPlaneTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddingPlaneTest.java
@@ -28,7 +28,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class EmbeddingPlaneTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlaneTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlaneTest.java
index 8254e04..72522a7 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlaneTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlaneTest.java
@@ -32,7 +32,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class PlaneTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlanesTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlanesTest.java
index 2f08f97..78d1e0e 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlanesTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlanesTest.java
@@ -40,7 +40,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class PlanesTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/RegionBSPTree3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/RegionBSPTree3DTest.java
index 7eae12e..12519b6 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/RegionBSPTree3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/RegionBSPTree3DTest.java
@@ -44,7 +44,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class RegionBSPTree3DTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SimpleTriangle3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SimpleTriangle3DTest.java
index 497512a..5257950 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SimpleTriangle3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SimpleTriangle3DTest.java
@@ -32,7 +32,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class SimpleTriangle3DTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SphericalCoordinatesTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SphericalCoordinatesTest.java
index 25068bb..4fd9193 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SphericalCoordinatesTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SphericalCoordinatesTest.java
@@ -23,7 +23,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class SphericalCoordinatesTest {
 
     private static final double EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Vector3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Vector3DTest.java
index b378665..daec297 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Vector3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Vector3DTest.java
@@ -61,14 +61,11 @@ public class Vector3DTest {
     @Test
     public void testConstants_normalize() {
         // act/assert
-
-
         Assertions.assertThrows(IllegalArgumentException.class, Vector3D.ZERO::normalize);
         Assertions.assertThrows(IllegalArgumentException.class, Vector3D.NaN::normalize);
         Assertions.assertThrows(IllegalArgumentException.class, Vector3D.POSITIVE_INFINITY::normalize);
         Assertions.assertThrows(IllegalArgumentException.class, Vector3D.NEGATIVE_INFINITY::normalize);
 
-
         Assertions.assertSame(Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_X.normalize());
         Assertions.assertSame(Vector3D.Unit.MINUS_X, Vector3D.Unit.MINUS_X.normalize());
 
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/VertexListConvexPolygon3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/VertexListConvexPolygon3DTest.java
index ef5a7dc..c8f323e 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/VertexListConvexPolygon3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/VertexListConvexPolygon3DTest.java
@@ -34,7 +34,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class VertexListConvexPolygon3DTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Line3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Line3DTest.java
index b0f6e23..6ecd991 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Line3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Line3DTest.java
@@ -29,7 +29,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class Line3DTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/mesh/SimpleTriangleMeshTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/mesh/SimpleTriangleMeshTest.java
index 89189b4..4c3c18e 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/mesh/SimpleTriangleMeshTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/mesh/SimpleTriangleMeshTest.java
@@ -40,7 +40,6 @@ import org.apache.commons.geometry.euclidean.threed.shape.Parallelepiped;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class SimpleTriangleMeshTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/rotation/QuaternionRotationTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/rotation/QuaternionRotationTest.java
index 74e4752..40c9f17 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/rotation/QuaternionRotationTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/rotation/QuaternionRotationTest.java
@@ -35,7 +35,6 @@ import org.apache.commons.rng.simple.RandomSource;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class QuaternionRotationTest {
 
     private static final double EPS = 1e-12;
@@ -250,7 +249,6 @@ public class QuaternionRotationTest {
     @Test
     public void testFromAxisAngle_invalidAxisNorm() {
         // act/assert
-
         Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.fromAxisAngle(Vector3D.ZERO, PlaneAngleRadians.PI_OVER_TWO));
         Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.fromAxisAngle(Vector3D.NaN, PlaneAngleRadians.PI_OVER_TWO));
         Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.fromAxisAngle(Vector3D.POSITIVE_INFINITY, PlaneAngleRadians.PI_OVER_TWO));
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/ParallelepipedTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/ParallelepipedTest.java
index 47545fd..2e90803 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/ParallelepipedTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/ParallelepipedTest.java
@@ -34,7 +34,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class ParallelepipedTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/SphereTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/SphereTest.java
index 0108da0..51cb67d 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/SphereTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/SphereTest.java
@@ -44,7 +44,6 @@ import org.apache.commons.rng.simple.RandomSource;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class SphereTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/AffineTransformMatrix2DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/AffineTransformMatrix2DTest.java
index e17ee8f..85f3eef 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/AffineTransformMatrix2DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/AffineTransformMatrix2DTest.java
@@ -27,7 +27,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class AffineTransformMatrix2DTest {
 
     private static final double EPS = 1e-12;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Bounds2DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Bounds2DTest.java
index b36ac2f..67561ef 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Bounds2DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Bounds2DTest.java
@@ -31,7 +31,6 @@ import org.apache.commons.geometry.euclidean.twod.shape.Parallelogram;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class Bounds2DTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/ConvexAreaTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/ConvexAreaTest.java
index 634c60c..113795c 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/ConvexAreaTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/ConvexAreaTest.java
@@ -35,7 +35,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class ConvexAreaTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/EmbeddedTreeLineSubsetTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/EmbeddedTreeLineSubsetTest.java
index cdf5704..652a914 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/EmbeddedTreeLineSubsetTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/EmbeddedTreeLineSubsetTest.java
@@ -30,7 +30,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class EmbeddedTreeLineSubsetTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/PolarCoordinatesTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/PolarCoordinatesTest.java
index a5e9be9..acc8899 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/PolarCoordinatesTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/PolarCoordinatesTest.java
@@ -23,7 +23,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class PolarCoordinatesTest {
 
     private static final double EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/RegionBSPTree2DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/RegionBSPTree2DTest.java
index 341476f..93a11be 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/RegionBSPTree2DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/RegionBSPTree2DTest.java
@@ -40,7 +40,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class RegionBSPTree2DTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Vector2DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Vector2DTest.java
index 4231fec..07eba28 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Vector2DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Vector2DTest.java
@@ -31,7 +31,6 @@ import org.apache.commons.numbers.core.Precision;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class Vector2DTest {
 
     private static final double EPS = Math.ulp(1d);
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/path/LinePathTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/path/LinePathTest.java
index a492dd3..5f23e92 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/path/LinePathTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/path/LinePathTest.java
@@ -43,7 +43,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class LinePathTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/rotation/Rotation2DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/rotation/Rotation2DTest.java
index 84c34f4..19d8281 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/rotation/Rotation2DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/rotation/Rotation2DTest.java
@@ -32,7 +32,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class Rotation2DTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/CircleTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/CircleTest.java
index 4b54709..e818221 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/CircleTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/CircleTest.java
@@ -37,7 +37,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class CircleTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/ParallelogramTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/ParallelogramTest.java
index d151acd..c2d15b6 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/ParallelogramTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/ParallelogramTest.java
@@ -30,7 +30,6 @@ import org.apache.commons.geometry.euclidean.twod.rotation.Rotation2D;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class ParallelogramTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJModelIOHandlerTest.java b/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJModelIOHandlerTest.java
index 5c2513e..845307b 100644
--- a/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJModelIOHandlerTest.java
+++ b/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJModelIOHandlerTest.java
@@ -97,9 +97,9 @@ public class OBJModelIOHandlerTest {
         final File file = new File("doesnotexist.obj");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        Assertions.assertThrows(UncheckedIOException.class, () -> {
             handler.read("obj", file, TEST_PRECISION);
-        }, UncheckedIOException.class);
+        });
     }
 
     @Test
@@ -178,9 +178,9 @@ public class OBJModelIOHandlerTest {
             );
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        Assertions.assertThrows(UncheckedIOException.class, () -> {
             handler.write(src, "OBJ", out);
-        }, UncheckedIOException.class);
+        });
     }
 
     @Test
diff --git a/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJReaderTest.java b/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJReaderTest.java
index 95fd42e..a568ffc 100644
--- a/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJReaderTest.java
+++ b/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJReaderTest.java
@@ -19,7 +19,6 @@ package org.apache.commons.geometry.examples.io.threed.obj;
 import java.io.File;
 import java.io.IOException;
 import java.io.StringReader;
-import java.io.UncheckedIOException;
 import java.net.URL;
 
 import org.apache.commons.geometry.core.GeometryTestUtils;
@@ -163,20 +162,12 @@ public class OBJReaderTest {
             "f 1 2 3\n";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            try {
-                reader.readTriangleMesh(new StringReader(badNumber), TEST_PRECISION);
-            } catch (final IOException exc) {
-                throw new UncheckedIOException(exc);
-            }
-        }, NumberFormatException.class);
+        Assertions.assertThrows(NumberFormatException.class, () -> {
+            reader.readTriangleMesh(new StringReader(badNumber), TEST_PRECISION);
+        });
 
         GeometryTestUtils.assertThrowsWithMessage(() -> {
-            try {
-                reader.readTriangleMesh(new StringReader(notEnoughVertices), TEST_PRECISION);
-            } catch (final IOException exc) {
-                throw new UncheckedIOException(exc);
-            }
+            reader.readTriangleMesh(new StringReader(notEnoughVertices), TEST_PRECISION);
         }, IllegalArgumentException.class, "Invalid vertex definition: at least 3 fields required but found only 2");
     }
 
@@ -196,20 +187,12 @@ public class OBJReaderTest {
             "f 1 2\n";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            try {
-                reader.readTriangleMesh(new StringReader(badNumber), TEST_PRECISION);
-            } catch (final IOException exc) {
-                throw new UncheckedIOException(exc);
-            }
-        }, NumberFormatException.class);
+        Assertions.assertThrows(NumberFormatException.class, () -> {
+            reader.readTriangleMesh(new StringReader(badNumber), TEST_PRECISION);
+        });
 
         GeometryTestUtils.assertThrowsWithMessage(() -> {
-            try {
-                reader.readTriangleMesh(new StringReader(notEnoughIndices), TEST_PRECISION);
-            } catch (final IOException exc) {
-                throw new UncheckedIOException(exc);
-            }
+            reader.readTriangleMesh(new StringReader(notEnoughIndices), TEST_PRECISION);
         }, IllegalArgumentException.class, "Invalid face definition: at least 3 fields required but found only 2");
     }
 
diff --git a/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/ConvexHull2DTest.java b/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/ConvexHull2DTest.java
index 937f25b..7911bd5 100644
--- a/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/ConvexHull2DTest.java
+++ b/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/ConvexHull2DTest.java
@@ -30,7 +30,6 @@ import org.apache.commons.geometry.euclidean.twod.path.LinePath;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class ConvexHull2DTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/MonotoneChainTest.java b/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/MonotoneChainTest.java
index a13c52d..dc9740e 100644
--- a/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/MonotoneChainTest.java
+++ b/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/MonotoneChainTest.java
@@ -24,7 +24,6 @@ import org.apache.commons.geometry.euclidean.twod.Vector2D;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 /**
  * Test class for MonotoneChain.
  */
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/AngularIntervalTest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/AngularIntervalTest.java
index b93ea0b..80bbf21 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/AngularIntervalTest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/AngularIntervalTest.java
@@ -28,7 +28,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class AngularIntervalTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/Point1STest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/Point1STest.java
index 8809632..5c922e4 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/Point1STest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/Point1STest.java
@@ -28,7 +28,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class Point1STest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/ConvexArea2STest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/ConvexArea2STest.java
index 8d9430f..78c38a1 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/ConvexArea2STest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/ConvexArea2STest.java
@@ -34,7 +34,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class ConvexArea2STest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatArcTest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatArcTest.java
index da3c941..4a99dd3 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatArcTest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatArcTest.java
@@ -31,7 +31,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class GreatArcTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatCircleTest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatCircleTest.java
index 47d1a81..b544081 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatCircleTest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatCircleTest.java
@@ -30,7 +30,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class GreatCircleTest {
 
     private static final double TEST_EPS = 1e-10;
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/RegionBSPTree2STest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/RegionBSPTree2STest.java
index 40f706a..867d4d8 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/RegionBSPTree2STest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/RegionBSPTree2STest.java
@@ -36,7 +36,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-
 public class RegionBSPTree2STest {
 
     private static final double TEST_EPS = 1e-10;


[commons-geometry] 01/03: GEOMETRY-105 - Replace the try-catch pattern with assertThrows()

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mattjuntunen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-geometry.git

commit 5403a8d96e01d5bf8846d36955db35e618a139f7
Author: Arturo Bernal <ar...@gmail.com>
AuthorDate: Wed Dec 16 16:30:04 2020 +0100

    GEOMETRY-105 - Replace the try-catch pattern with assertThrows()
---
 .../commons/geometry/core/GeometryTestUtils.java   |  54 ++-----
 .../core/internal/IteratorTransformTest.java       |   3 +-
 .../AbstractConvexHyperplaneBoundedRegionTest.java |  21 +--
 .../bsp/AbstractPartitionedRegionBuilderTest.java  |   4 +-
 .../bsp/AbstractRegionBSPTreeTest.java             |   4 +-
 .../EpsilonDoublePrecisionContextTest.java         |  11 +-
 .../geometry/enclosing/EnclosingBallTest.java      |   3 +-
 .../euclidean/threed/WelzlEncloser3DTest.java      |   4 +-
 .../euclidean/twod/WelzlEncloser2DTest.java        |   4 +-
 .../geometry/euclidean/internal/MatricesTest.java  |  14 +-
 .../geometry/euclidean/internal/VectorsTest.java   |  16 +-
 .../oned/AffineTransformMatrix1DTest.java          |  31 ++--
 .../geometry/euclidean/oned/IntervalTest.java      | 113 +++++---------
 .../geometry/euclidean/oned/OrientedPointTest.java |   6 +-
 .../geometry/euclidean/oned/Vector1DTest.java      |  87 ++++-------
 .../threed/AffineTransformMatrix3DTest.java        |  31 ++--
 .../geometry/euclidean/threed/Bounds3DTest.java    |  21 ++-
 .../euclidean/threed/ConvexVolumeTest.java         |   4 +-
 .../threed/EmbeddedAreaPlaneConvexSubsetTest.java  |   6 +-
 .../threed/EmbeddedTreePlaneSubsetTest.java        |  23 ++-
 .../euclidean/threed/EmbeddingPlaneTest.java       |  20 +--
 .../geometry/euclidean/threed/PlaneTest.java       | 108 +++++---------
 .../geometry/euclidean/threed/PlanesTest.java      |  88 +++++------
 .../euclidean/threed/RegionBSPTree3DTest.java      |  13 +-
 .../euclidean/threed/SimpleTriangle3DTest.java     |   5 +-
 .../euclidean/threed/SphericalCoordinatesTest.java |   3 +-
 .../geometry/euclidean/threed/Vector3DTest.java    | 162 ++++++++-------------
 .../threed/VertexListConvexPolygon3DTest.java      |   7 +-
 .../geometry/euclidean/threed/line/Line3DTest.java |   7 +-
 .../threed/line/LineConvexSubset3DTest.java        |   8 +-
 .../geometry/euclidean/threed/line/Ray3DTest.java  |   8 +-
 .../euclidean/threed/line/ReverseRay3DTest.java    |   8 +-
 .../euclidean/threed/line/Segment3DTest.java       |  20 +--
 .../threed/mesh/SimpleTriangleMeshTest.java        |  43 +++---
 .../threed/rotation/QuaternionRotationTest.java    |  97 +++++-------
 .../euclidean/threed/shape/ParallelepipedTest.java |  36 ++---
 .../euclidean/threed/shape/SphereTest.java         |  31 ++--
 .../twod/AffineTransformMatrix2DTest.java          |  31 ++--
 .../geometry/euclidean/twod/Bounds2DTest.java      |  20 ++-
 .../geometry/euclidean/twod/ConvexAreaTest.java    |  45 +++---
 .../euclidean/twod/EmbeddedTreeLineSubsetTest.java |  10 +-
 .../euclidean/twod/LineConvexSubsetTest.java       |  12 +-
 .../commons/geometry/euclidean/twod/LineTest.java  |  10 +-
 .../euclidean/twod/PolarCoordinatesTest.java       |   3 +-
 .../commons/geometry/euclidean/twod/RayTest.java   |  14 +-
 .../euclidean/twod/RegionBSPTree2DTest.java        |  13 +-
 .../geometry/euclidean/twod/ReverseRayTest.java    |  14 +-
 .../geometry/euclidean/twod/SegmentTest.java       |  20 +--
 .../geometry/euclidean/twod/Vector2DTest.java      | 161 ++++++++------------
 .../geometry/euclidean/twod/path/LinePathTest.java |  53 ++-----
 .../euclidean/twod/rotation/Rotation2DTest.java    |  36 ++---
 .../geometry/euclidean/twod/shape/CircleTest.java  |  27 ++--
 .../euclidean/twod/shape/ParallelogramTest.java    |  29 ++--
 .../io/threed/ModelIOHandlerRegistryTest.java      |  16 +-
 .../io/threed/obj/OBJModelIOHandlerTest.java       |  12 +-
 .../examples/io/threed/obj/OBJReaderTest.java      |   4 +-
 .../examples/io/threed/obj/OBJWriterTest.java      |   4 +-
 .../hull/euclidean/twod/ConvexHull2DTest.java      |   6 +-
 .../hull/euclidean/twod/MonotoneChainTest.java     |   4 +-
 .../spherical/oned/AngularIntervalTest.java        | 139 ++++--------------
 .../geometry/spherical/oned/Point1STest.java       |  45 ++----
 .../geometry/spherical/twod/ConvexArea2STest.java  |  11 +-
 .../twod/EmbeddedTreeSubGreatCircleTest.java       |   5 +-
 .../geometry/spherical/twod/GreatArcPathTest.java  |  18 +--
 .../geometry/spherical/twod/GreatArcTest.java      |  10 +-
 .../geometry/spherical/twod/GreatCircleTest.java   |  26 +---
 .../geometry/spherical/twod/Point2STest.java       |   3 +-
 .../spherical/twod/RegionBSPTree2STest.java        |   6 +-
 68 files changed, 711 insertions(+), 1220 deletions(-)

diff --git a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/GeometryTestUtils.java b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/GeometryTestUtils.java
index 908cc02..0ae6ec3 100644
--- a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/GeometryTestUtils.java
+++ b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/GeometryTestUtils.java
@@ -23,6 +23,7 @@ import java.io.ObjectOutputStream;
 import java.util.regex.Pattern;
 
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.function.Executable;
 
 /** Class containing various geometry-related test utilities.
  */
@@ -50,61 +51,28 @@ public final class GeometryTestUtils {
         Assertions.assertTrue(value < 0, msg);
     }
 
-    /** Asserts that the given Runnable throws an exception of the given type.
-     * @param r the Runnable instance
-     * @param exceptionType the expected exception type
-     */
-    public static void assertThrows(final Runnable r, final Class<?> exceptionType) {
-        assertThrows(r, exceptionType, (String) null);
-    }
-
-    /** Asserts that the given Runnable throws an exception of the given type. If
+    /** Asserts that the given Executable throws an exception of the given type. If
      * {@code message} is not null, the exception message is asserted to equal the
      * given value.
-     * @param r the Runnable instance
+     * @param executable the Executable instance
      * @param exceptionType the expected exception type
      * @param message the expected exception message; ignored if null
      */
-    public static void assertThrows(final Runnable r, final Class<?> exceptionType, final String message) {
-        try {
-            r.run();
-            Assertions.fail("Operation should have thrown an exception");
-        } catch (final Exception exc) {
-            final Class<?> actualType = exc.getClass();
-
-            Assertions.assertTrue(exceptionType.isAssignableFrom(actualType),
-                    "Expected exception of type " + exceptionType.getName() + " but was " + actualType.getName());
-
-            if (message != null) {
-                Assertions.assertEquals(message, exc.getMessage());
-            }
-        }
+    public static <T extends Throwable> void assertThrowsWithMessage(final Executable executable, final Class<T> exceptionType, final String message) {
+        Assertions.assertEquals(message, Assertions.assertThrows(exceptionType, executable).getMessage());
     }
 
-    /** Asserts that the given Runnable throws an exception of the given type. If
+    /** Asserts that the given Executable throws an exception of the given type. If
      * {@code pattern} is not null, the exception message is asserted to match the
      * given regex.
-     * @param r the Runnable instance
+     * @param executable the Executable instance
      * @param exceptionType the expected exception type
      * @param pattern regex pattern to match; ignored if null
      */
-    public static void assertThrows(final Runnable r, final Class<?> exceptionType, final Pattern pattern) {
-        try {
-            r.run();
-            Assertions.fail("Operation should have thrown an exception");
-        } catch (final Exception exc) {
-            final Class<?> actualType = exc.getClass();
-
-            Assertions.assertTrue(exceptionType.isAssignableFrom(actualType),
-                    "Expected exception of type " + exceptionType.getName() + " but was " + actualType.getName());
-
-            if (pattern != null) {
-                final String message = exc.getMessage();
-
-                final String err = "Expected exception message to match /" + pattern + "/ but was [" + message + "]";
-                Assertions.assertTrue(pattern.matcher(message).matches(), err);
-            }
-        }
+    public static <T extends Throwable> void assertThrowsWithMessage(final Executable executable, final Class<T> exceptionType, final Pattern pattern) {
+        final String message = Assertions.assertThrows(exceptionType, executable).getMessage();
+        Assertions.assertTrue(pattern.matcher(message).matches(),
+                "Expected exception message to match /" + pattern + "/ but was [" + message + "]");
     }
 
     /** Assert that a string contains a given substring value.
diff --git a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/internal/IteratorTransformTest.java b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/internal/IteratorTransformTest.java
index 827c117..c52f1fc 100644
--- a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/internal/IteratorTransformTest.java
+++ b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/internal/IteratorTransformTest.java
@@ -26,7 +26,6 @@ import java.util.NoSuchElementException;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class IteratorTransformTest {
 
@@ -50,7 +49,7 @@ public class IteratorTransformTest {
 
         // act/assert
         Assertions.assertFalse(it.hasNext());
-        assertThrows(NoSuchElementException.class, it::next);
+        Assertions.assertThrows(NoSuchElementException.class, it::next);
     }
 
     private static <T> List<T> toList(final Iterator<T> it) {
diff --git a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegionTest.java b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegionTest.java
index 750287d..f537c1f 100644
--- a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegionTest.java
+++ b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/AbstractConvexHyperplaneBoundedRegionTest.java
@@ -33,6 +33,7 @@ import org.apache.commons.geometry.core.partitioning.test.TestTransform2D;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class AbstractConvexHyperplaneBoundedRegionTest {
 
     @Test
@@ -41,9 +42,7 @@ public class AbstractConvexHyperplaneBoundedRegionTest {
         final StubRegion region = new StubRegion(new ArrayList<>());
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            region.getBoundaries().add(TestLine.X_AXIS.span());
-        }, UnsupportedOperationException.class);
+        Assertions.assertThrows(UnsupportedOperationException.class, () ->  region.getBoundaries().add(TestLine.X_AXIS.span()));
     }
 
     @Test
@@ -631,17 +630,13 @@ public class AbstractConvexHyperplaneBoundedRegionTest {
     @Test
     public void testConvexRegionBoundaryBuilder() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            StubRegion.fromBounds(Arrays.asList(TestLine.X_AXIS, TestLine.X_AXIS.reverse()));
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> StubRegion.fromBounds(Arrays.asList(TestLine.X_AXIS, TestLine.X_AXIS.reverse())));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> StubRegion.fromBounds(Arrays.asList(
+                TestLine.X_AXIS,
+                TestLine.Y_AXIS,
+                new TestLine(new TestPoint2D(1, 0), new TestPoint2D(0, -1)),
+                new TestLine(new TestPoint2D(1, 0), new TestPoint2D(0, -2)))));
 
-        GeometryTestUtils.assertThrows(() -> {
-            StubRegion.fromBounds(Arrays.asList(
-                    TestLine.X_AXIS,
-                    TestLine.Y_AXIS,
-                    new TestLine(new TestPoint2D(1, 0), new TestPoint2D(0, -1)),
-                    new TestLine(new TestPoint2D(1, 0), new TestPoint2D(0, -2))));
-        }, IllegalArgumentException.class);
     }
 
     @Test
diff --git a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/bsp/AbstractPartitionedRegionBuilderTest.java b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/bsp/AbstractPartitionedRegionBuilderTest.java
index 74b510b..3892782 100644
--- a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/bsp/AbstractPartitionedRegionBuilderTest.java
+++ b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/bsp/AbstractPartitionedRegionBuilderTest.java
@@ -38,7 +38,7 @@ public class AbstractPartitionedRegionBuilderTest {
         final TestRegionBSPTree tree = new TestRegionBSPTree(true);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             new TestRegionBuilder(tree);
         }, IllegalArgumentException.class, "Tree must be empty");
     }
@@ -65,7 +65,7 @@ public class AbstractPartitionedRegionBuilderTest {
         builder.insertBoundary(new TestLineSegment(new TestPoint2D(0, 0), new TestPoint2D(1, 0)));
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.insertPartition(new TestLine(new TestPoint2D(0, 0), new TestPoint2D(1, 0)).span());
         }, IllegalStateException.class, "Cannot insert partitions after boundaries have been inserted");
     }
diff --git a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/bsp/AbstractRegionBSPTreeTest.java b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/bsp/AbstractRegionBSPTreeTest.java
index 8385a78..a6130c4 100644
--- a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/bsp/AbstractRegionBSPTreeTest.java
+++ b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/partitioning/bsp/AbstractRegionBSPTreeTest.java
@@ -317,9 +317,9 @@ public class AbstractRegionBSPTreeTest {
     @Test
     public void testSetLocation_invalidArgs() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> root.setLocation(null),
+        GeometryTestUtils.assertThrowsWithMessage(() -> root.setLocation(null),
                 IllegalArgumentException.class, "Invalid node location: null");
-        GeometryTestUtils.assertThrows(() -> root.setLocation(RegionLocation.BOUNDARY),
+        GeometryTestUtils.assertThrowsWithMessage(() -> root.setLocation(RegionLocation.BOUNDARY),
                 IllegalArgumentException.class, "Invalid node location: BOUNDARY");
     }
 
diff --git a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContextTest.java b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContextTest.java
index 956c17c..846b779 100644
--- a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContextTest.java
+++ b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContextTest.java
@@ -20,6 +20,7 @@ import org.apache.commons.geometry.core.GeometryTestUtils;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class EpsilonDoublePrecisionContextTest {
 
     @Test
@@ -38,19 +39,17 @@ public class EpsilonDoublePrecisionContextTest {
     @Test
     public void testInvalidEpsilonValues() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            new EpsilonDoublePrecisionContext(-1.0);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> new EpsilonDoublePrecisionContext(-1.0));
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             new EpsilonDoublePrecisionContext(Double.NaN);
         }, IllegalArgumentException.class, "Invalid epsilon value: NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             new EpsilonDoublePrecisionContext(Double.POSITIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid epsilon value: Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             new EpsilonDoublePrecisionContext(Double.NEGATIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid epsilon value: -Infinity");
     }
diff --git a/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/EnclosingBallTest.java b/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/EnclosingBallTest.java
index 303e1b8..566d356 100644
--- a/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/EnclosingBallTest.java
+++ b/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/EnclosingBallTest.java
@@ -27,7 +27,6 @@ import org.apache.commons.geometry.euclidean.twod.Vector2D;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class EnclosingBallTest {
 
@@ -81,7 +80,7 @@ public class EnclosingBallTest {
         final EnclosingBall<Vector2D> ball = new EnclosingBall<>(Vector2D.of(1, 1), 4, support);
 
         // act/assert
-        assertThrows(UnsupportedOperationException.class, () ->  ball.getSupport().add(Vector2D.Unit.PLUS_X));
+        Assertions.assertThrows(UnsupportedOperationException.class, () ->  ball.getSupport().add(Vector2D.Unit.PLUS_X));
     }
 
     @Test
diff --git a/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/threed/WelzlEncloser3DTest.java b/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/threed/WelzlEncloser3DTest.java
index 25f9ca6..2d7107e 100644
--- a/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/threed/WelzlEncloser3DTest.java
+++ b/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/threed/WelzlEncloser3DTest.java
@@ -46,11 +46,11 @@ public class WelzlEncloser3DTest {
         final String msg = "Unable to generate enclosing ball: no points given";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             encloser.enclose(null);
         }, IllegalArgumentException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             encloser.enclose(new ArrayList<Vector3D>());
         }, IllegalArgumentException.class, msg);
     }
diff --git a/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/twod/WelzlEncloser2DTest.java b/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/twod/WelzlEncloser2DTest.java
index 4bccde8..416bed2 100755
--- a/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/twod/WelzlEncloser2DTest.java
+++ b/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/twod/WelzlEncloser2DTest.java
@@ -46,11 +46,11 @@ public class WelzlEncloser2DTest {
         final String msg = "Unable to generate enclosing ball: no points given";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             encloser.enclose(null);
         }, IllegalArgumentException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             encloser.enclose(new ArrayList<Vector2D>());
         }, IllegalArgumentException.class, msg);
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/internal/MatricesTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/internal/MatricesTest.java
index aaf395e..e12fd2d 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/internal/MatricesTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/internal/MatricesTest.java
@@ -92,19 +92,19 @@ public class MatricesTest {
     @Test
     public void testCheckDeterminantForInverse_invalid() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Matrices.checkDeterminantForInverse(0);
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is 0.0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Matrices.checkDeterminantForInverse(Double.NaN);
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Matrices.checkDeterminantForInverse(Double.POSITIVE_INFINITY);
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Matrices.checkDeterminantForInverse(Double.NEGATIVE_INFINITY);
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is -Infinity");
     }
@@ -121,15 +121,15 @@ public class MatricesTest {
     @Test
     public void testCheckElementForInverse_invalid() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Matrices.checkElementForInverse(Double.NaN);
         }, IllegalStateException.class, "Matrix is not invertible; invalid matrix element: NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Matrices.checkElementForInverse(Double.POSITIVE_INFINITY);
         }, IllegalStateException.class, "Matrix is not invertible; invalid matrix element: Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Matrices.checkElementForInverse(Double.NEGATIVE_INFINITY);
         }, IllegalStateException.class, "Matrix is not invertible; invalid matrix element: -Infinity");
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/internal/VectorsTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/internal/VectorsTest.java
index 1f382e6..0109a7d 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/internal/VectorsTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/internal/VectorsTest.java
@@ -53,13 +53,13 @@ public class VectorsTest {
         Assertions.assertEquals(-23.12, Vectors.checkedNorm(-23.12), EPS);
         Assertions.assertEquals(-2e-12, Vectors.checkedNorm(-2e-12), EPS);
 
-        GeometryTestUtils.assertThrows(() -> Vectors.checkedNorm(0.0),
+        GeometryTestUtils.assertThrowsWithMessage(() -> Vectors.checkedNorm(0.0),
                 IllegalArgumentException.class, "Illegal norm: 0.0");
-        GeometryTestUtils.assertThrows(() -> Vectors.checkedNorm(Double.NaN),
+        GeometryTestUtils.assertThrowsWithMessage(() -> Vectors.checkedNorm(Double.NaN),
                 IllegalArgumentException.class, "Illegal norm: NaN");
-        GeometryTestUtils.assertThrows(() -> Vectors.checkedNorm(Double.POSITIVE_INFINITY),
+        GeometryTestUtils.assertThrowsWithMessage(() -> Vectors.checkedNorm(Double.POSITIVE_INFINITY),
                 IllegalArgumentException.class, "Illegal norm: Infinity");
-        GeometryTestUtils.assertThrows(() -> Vectors.checkedNorm(Double.NEGATIVE_INFINITY),
+        GeometryTestUtils.assertThrowsWithMessage(() -> Vectors.checkedNorm(Double.NEGATIVE_INFINITY),
                 IllegalArgumentException.class, "Illegal norm: -Infinity");
     }
 
@@ -74,13 +74,13 @@ public class VectorsTest {
         Assertions.assertEquals(23.12, Vectors.checkedNorm(Vector1D.of(-23.12)), EPS);
         Assertions.assertEquals(2e-12, Vectors.checkedNorm(Vector1D.of(-2e-12)), EPS);
 
-        GeometryTestUtils.assertThrows(() -> Vectors.checkedNorm(Vector3D.ZERO),
+        GeometryTestUtils.assertThrowsWithMessage(() -> Vectors.checkedNorm(Vector3D.ZERO),
                 IllegalArgumentException.class, "Illegal norm: 0.0");
-        GeometryTestUtils.assertThrows(() -> Vectors.checkedNorm(Vector3D.NaN),
+        GeometryTestUtils.assertThrowsWithMessage(() -> Vectors.checkedNorm(Vector3D.NaN),
                 IllegalArgumentException.class, "Illegal norm: NaN");
-        GeometryTestUtils.assertThrows(() -> Vectors.checkedNorm(Vector3D.POSITIVE_INFINITY),
+        GeometryTestUtils.assertThrowsWithMessage(() -> Vectors.checkedNorm(Vector3D.POSITIVE_INFINITY),
                 IllegalArgumentException.class, "Illegal norm: NaN");
-        GeometryTestUtils.assertThrows(() -> Vectors.checkedNorm(Vector3D.NEGATIVE_INFINITY),
+        GeometryTestUtils.assertThrowsWithMessage(() -> Vectors.checkedNorm(Vector3D.NEGATIVE_INFINITY),
                 IllegalArgumentException.class, "Illegal norm: NaN");
     }
 
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/AffineTransformMatrix1DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/AffineTransformMatrix1DTest.java
index 68d9944..dd2c0df 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/AffineTransformMatrix1DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/AffineTransformMatrix1DTest.java
@@ -24,6 +24,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class AffineTransformMatrix1DTest {
 
     private static final double EPS = 1e-12;
@@ -43,7 +44,7 @@ public class AffineTransformMatrix1DTest {
     @Test
     public void testOf_invalidDimensions() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> AffineTransformMatrix1D.of(1),
+        GeometryTestUtils.assertThrowsWithMessage(() -> AffineTransformMatrix1D.of(1),
                 IllegalArgumentException.class, "Dimension mismatch: 1 != 2");
     }
 
@@ -63,9 +64,7 @@ public class AffineTransformMatrix1DTest {
     @Test
     public void testFrom_invalidFunction() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            AffineTransformMatrix1D.from(v -> v.multiply(0));
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AffineTransformMatrix1D.from(v -> v.multiply(0)));
     }
 
     @Test
@@ -426,10 +425,8 @@ public class AffineTransformMatrix1DTest {
     @Test
     public void testApplyDirection_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> AffineTransformMatrix1D.createScale(0).applyDirection(Vector1D.Unit.PLUS),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> AffineTransformMatrix1D.createScale(2).applyDirection(Vector1D.ZERO),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AffineTransformMatrix1D.createScale(0).applyDirection(Vector1D.Unit.PLUS));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AffineTransformMatrix1D.createScale(2).applyDirection(Vector1D.ZERO));
     }
 
     @Test
@@ -593,9 +590,7 @@ public class AffineTransformMatrix1DTest {
     @Test
     public void testNormalTransform_nonInvertible() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            AffineTransformMatrix1D.createScale(0).normalTransform();
-        }, IllegalStateException.class);
+        Assertions.assertThrows(IllegalStateException.class, () -> AffineTransformMatrix1D.createScale(0).normalTransform());
     }
 
     @Test
@@ -676,31 +671,31 @@ public class AffineTransformMatrix1DTest {
     @Test
     public void testInverse_nonInvertible() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix1D.of(0, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is 0.0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix1D.of(Double.NaN, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix1D.of(Double.NEGATIVE_INFINITY, 0.0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is -Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix1D.of(Double.POSITIVE_INFINITY, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix1D.of(1, Double.NaN).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; invalid matrix element: NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix1D.of(1, Double.NEGATIVE_INFINITY).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; invalid matrix element: -Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix1D.of(1, Double.POSITIVE_INFINITY).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; invalid matrix element: Infinity");
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/IntervalTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/IntervalTest.java
index 01681ce..d40691b 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/IntervalTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/IntervalTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.commons.geometry.euclidean.oned;
 
-import org.apache.commons.geometry.core.GeometryTestUtils;
 import org.apache.commons.geometry.core.RegionLocation;
 import org.apache.commons.geometry.core.partitioning.Split;
 import org.apache.commons.geometry.core.partitioning.SplitLocation;
@@ -26,6 +25,7 @@ import org.apache.commons.geometry.euclidean.EuclideanTestUtils;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class IntervalTest {
 
     private static final double TEST_EPS = 1e-15;
@@ -63,18 +63,13 @@ public class IntervalTest {
 
     @Test
     public void testOf_doubles_invalidIntervals() {
-        // arrange
-        final Class<?> excType = IllegalArgumentException.class;
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Interval.of(1, Double.NaN, TEST_PRECISION), excType);
-        GeometryTestUtils.assertThrows(() -> Interval.of(Double.NaN, 1, TEST_PRECISION), excType);
-        GeometryTestUtils.assertThrows(() -> Interval.of(Double.NaN, Double.NaN, TEST_PRECISION), excType);
-
-        GeometryTestUtils.assertThrows(
-            () -> Interval.of(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, TEST_PRECISION), excType);
-        GeometryTestUtils.assertThrows(
-            () -> Interval.of(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, TEST_PRECISION), excType);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.of(1, Double.NaN, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.of(Double.NaN, 1, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.of(Double.NaN, Double.NaN, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.of(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.of(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, TEST_PRECISION));
     }
 
     @Test
@@ -87,14 +82,10 @@ public class IntervalTest {
 
     @Test
     public void testOf_points_invalidIntervals() {
-        // arrange
-        final Class<?> excType = IllegalArgumentException.class;
 
         // act/assert
-        GeometryTestUtils.assertThrows(
-            () -> Interval.of(Vector1D.of(1), Vector1D.of(Double.NaN), TEST_PRECISION), excType);
-        GeometryTestUtils.assertThrows(
-            () -> Interval.of(Vector1D.of(Double.POSITIVE_INFINITY), Vector1D.of(Double.POSITIVE_INFINITY), TEST_PRECISION), excType);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.of(Vector1D.of(1), Vector1D.of(Double.NaN), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.of(Vector1D.of(Double.POSITIVE_INFINITY), Vector1D.of(Double.POSITIVE_INFINITY), TEST_PRECISION));
     }
 
     @Test
@@ -139,44 +130,28 @@ public class IntervalTest {
 
     @Test
     public void testOf_hyperplanes_invalidArgs() {
-        // arrange
-        final Class<?> excType = IllegalArgumentException.class;
-
         // act/assert
-        GeometryTestUtils.assertThrows(
-            () -> Interval.of(
-                    OrientedPoints.fromLocationAndDirection(1, false, TEST_PRECISION),
-                    OrientedPoints.fromLocationAndDirection(1, false, TEST_PRECISION)), excType);
-
-        GeometryTestUtils.assertThrows(
-            () -> Interval.of(
-                    OrientedPoints.fromLocationAndDirection(2, false, TEST_PRECISION),
-                    OrientedPoints.fromLocationAndDirection(1, true, TEST_PRECISION)), excType);
-
-        GeometryTestUtils.assertThrows(
-            () -> Interval.of(
-                    OrientedPoints.fromLocationAndDirection(Double.POSITIVE_INFINITY, false, TEST_PRECISION),
-                    OrientedPoints.fromLocationAndDirection(Double.POSITIVE_INFINITY, true, TEST_PRECISION)), excType);
-
-        GeometryTestUtils.assertThrows(
-            () -> Interval.of(
-                    OrientedPoints.fromLocationAndDirection(Double.NaN, false, TEST_PRECISION),
-                    OrientedPoints.fromLocationAndDirection(1, true, TEST_PRECISION)), excType);
-
-        GeometryTestUtils.assertThrows(
-            () -> Interval.of(
-                    OrientedPoints.fromLocationAndDirection(1, false, TEST_PRECISION),
-                    OrientedPoints.fromLocationAndDirection(Double.NaN, true, TEST_PRECISION)), excType);
-
-        GeometryTestUtils.assertThrows(
-            () -> Interval.of(
-                    OrientedPoints.fromLocationAndDirection(Double.NaN, false, TEST_PRECISION),
-                    OrientedPoints.fromLocationAndDirection(Double.NaN, true, TEST_PRECISION)), excType);
-
-        GeometryTestUtils.assertThrows(
-            () -> Interval.of(
-                    null,
-                    OrientedPoints.fromLocationAndDirection(Double.NaN, true, TEST_PRECISION)), excType);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.of(
+                OrientedPoints.fromLocationAndDirection(1, false, TEST_PRECISION),
+                OrientedPoints.fromLocationAndDirection(1, false, TEST_PRECISION)));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.of(
+                OrientedPoints.fromLocationAndDirection(2, false, TEST_PRECISION),
+                OrientedPoints.fromLocationAndDirection(1, true, TEST_PRECISION)));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.of(
+                OrientedPoints.fromLocationAndDirection(Double.POSITIVE_INFINITY, false, TEST_PRECISION),
+                OrientedPoints.fromLocationAndDirection(Double.POSITIVE_INFINITY, true, TEST_PRECISION)));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.of(
+                OrientedPoints.fromLocationAndDirection(Double.NaN, false, TEST_PRECISION),
+                OrientedPoints.fromLocationAndDirection(1, true, TEST_PRECISION)));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.of(
+                OrientedPoints.fromLocationAndDirection(1, false, TEST_PRECISION),
+                OrientedPoints.fromLocationAndDirection(Double.NaN, true, TEST_PRECISION)));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.of(
+                OrientedPoints.fromLocationAndDirection(Double.NaN, false, TEST_PRECISION),
+                OrientedPoints.fromLocationAndDirection(Double.NaN, true, TEST_PRECISION)));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.of(
+                null,
+                OrientedPoints.fromLocationAndDirection(Double.NaN, true, TEST_PRECISION)));
     }
 
     @Test
@@ -189,16 +164,10 @@ public class IntervalTest {
 
     @Test
     public void testPoint_invalidArgs() {
-        // arrange
-        final Class<?> excType = IllegalArgumentException.class;
-
         // act/assert
-        GeometryTestUtils.assertThrows(
-            () -> Interval.point(Double.NEGATIVE_INFINITY, TEST_PRECISION), excType);
-        GeometryTestUtils.assertThrows(
-            () -> Interval.point(Double.POSITIVE_INFINITY, TEST_PRECISION), excType);
-        GeometryTestUtils.assertThrows(
-            () -> Interval.point(Double.NaN, TEST_PRECISION), excType);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.point(Double.NEGATIVE_INFINITY, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.point(Double.POSITIVE_INFINITY, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.point(Double.NaN, TEST_PRECISION));
     }
 
     @Test
@@ -214,14 +183,9 @@ public class IntervalTest {
 
     @Test
     public void testMin_invalidArgs() {
-        // arrange
-        final Class<?> excType = IllegalArgumentException.class;
-
         // act/assert
-        GeometryTestUtils.assertThrows(
-            () -> Interval.min(Double.POSITIVE_INFINITY, TEST_PRECISION), excType);
-        GeometryTestUtils.assertThrows(
-            () -> Interval.min(Double.NaN, TEST_PRECISION), excType);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.min(Double.POSITIVE_INFINITY, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.min(Double.NaN, TEST_PRECISION));
     }
 
     @Test
@@ -237,14 +201,9 @@ public class IntervalTest {
 
     @Test
     public void testMax_invalidArgs() {
-        // arrange
-        final Class<?> excType = IllegalArgumentException.class;
-
         // act/assert
-        GeometryTestUtils.assertThrows(
-            () -> Interval.max(Double.NEGATIVE_INFINITY, TEST_PRECISION), excType);
-        GeometryTestUtils.assertThrows(
-            () -> Interval.max(Double.NaN, TEST_PRECISION), excType);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.max(Double.NEGATIVE_INFINITY, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Interval.max(Double.NaN, TEST_PRECISION));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/OrientedPointTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/OrientedPointTest.java
index be4842b..39b78d6 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/OrientedPointTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/OrientedPointTest.java
@@ -112,7 +112,7 @@ public class OrientedPointTest {
         final OrientedPoint pt = OrientedPoints.createPositiveFacing(Vector1D.of(2.0), TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(
+        GeometryTestUtils.assertThrowsWithMessage(
             () -> pt.transform(zeroScale),
             IllegalArgumentException.class, "Oriented point direction cannot be zero");
     }
@@ -364,10 +364,10 @@ public class OrientedPointTest {
         final DoublePrecisionContext precision = new EpsilonDoublePrecisionContext(0.1);
 
         // act/assert
-        GeometryTestUtils.assertThrows(
+        GeometryTestUtils.assertThrowsWithMessage(
             () -> OrientedPoints.fromPointAndDirection(Vector1D.of(2.0), Vector1D.of(0.09), precision),
             IllegalArgumentException.class, "Oriented point direction cannot be zero");
-        GeometryTestUtils.assertThrows(
+        GeometryTestUtils.assertThrowsWithMessage(
             () -> OrientedPoints.fromPointAndDirection(Vector1D.of(2.0), Vector1D.of(-0.09), precision),
             IllegalArgumentException.class, "Oriented point direction cannot be zero");
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/Vector1DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/Vector1DTest.java
index f36c632..085eb9d 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/Vector1DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/oned/Vector1DTest.java
@@ -27,7 +27,6 @@ import org.apache.commons.numbers.core.Precision;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class Vector1DTest {
 
@@ -47,10 +46,10 @@ public class Vector1DTest {
     @Test
     public void testConstants_normalize() {
         // act/assert
-        GeometryTestUtils.assertThrows(Vector1D.ZERO::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector1D.NaN::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector1D.POSITIVE_INFINITY::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector1D.NEGATIVE_INFINITY::normalize, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector1D.ZERO::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector1D.NaN::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector1D.POSITIVE_INFINITY::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector1D.NEGATIVE_INFINITY::normalize);
 
         Assertions.assertSame(Vector1D.Unit.PLUS, Vector1D.Unit.PLUS.normalize());
         Assertions.assertSame(Vector1D.Unit.MINUS, Vector1D.Unit.MINUS.normalize());
@@ -182,14 +181,10 @@ public class Vector1DTest {
     @Test
     public void testWithNorm_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Vector1D.ZERO.withNorm(2.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector1D.NaN.withNorm(2.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector1D.POSITIVE_INFINITY.withNorm(2.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector1D.NEGATIVE_INFINITY.withNorm(2.0),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.ZERO.withNorm(2.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.NaN.withNorm(2.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.POSITIVE_INFINITY.withNorm(2.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.NEGATIVE_INFINITY.withNorm(2.0));
     }
 
     @Test
@@ -280,14 +275,10 @@ public class Vector1DTest {
     @Test
     public void testNormalize_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Vector1D.of(0.0).normalize(),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector1D.of(Double.NaN).normalize(),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector1D.of(Double.POSITIVE_INFINITY).normalize(),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector1D.of(Double.NEGATIVE_INFINITY).normalize(),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.of(0.0).normalize());
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.of(Double.NaN).normalize());
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.of(Double.POSITIVE_INFINITY).normalize());
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.of(Double.NEGATIVE_INFINITY).normalize());
     }
 
     @Test
@@ -407,23 +398,14 @@ public class Vector1DTest {
         final Vector1D v = Vector1D.of(1.0);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Vector1D.ZERO.angle(v),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector1D.NaN.angle(v),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector1D.POSITIVE_INFINITY.angle(v),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector1D.NEGATIVE_INFINITY.angle(v),
-                IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> v.angle(Vector1D.ZERO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.angle(Vector1D.NaN),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.angle(Vector1D.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.angle(Vector1D.NEGATIVE_INFINITY),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.ZERO.angle(v));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.NaN.angle(v));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.POSITIVE_INFINITY.angle(v));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.NEGATIVE_INFINITY.angle(v));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.angle(Vector1D.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.angle(Vector1D.NaN));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.angle(Vector1D.POSITIVE_INFINITY));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.angle(Vector1D.NEGATIVE_INFINITY));
     }
 
     @Test
@@ -469,16 +451,11 @@ public class Vector1DTest {
         final Vector1D v = Vector1D.of(2);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Vector1D.ZERO.directionTo(Vector1D.ZERO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.directionTo(v),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.directionTo(Vector1D.NaN),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector1D.NEGATIVE_INFINITY.directionTo(v),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.directionTo(Vector1D.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.ZERO.directionTo(Vector1D.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.directionTo(v));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.directionTo(Vector1D.NaN));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.NEGATIVE_INFINITY.directionTo(v));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.directionTo(Vector1D.POSITIVE_INFINITY));
     }
 
     @Test
@@ -647,7 +624,7 @@ public class Vector1DTest {
     @Test
     public void testParse_failure() {
         // act/assert
-        assertThrows(IllegalArgumentException.class, () ->  Vector1D.parse("abc"));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector1D.parse("abc"));
     }
 
     @Test
@@ -682,14 +659,10 @@ public class Vector1DTest {
 
     @Test
     public void testUnitFrom_illegalNorm() {
-        GeometryTestUtils.assertThrows(() -> Vector1D.Unit.from(0.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector1D.Unit.from(Double.NaN),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector1D.Unit.from(Double.NEGATIVE_INFINITY),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector1D.Unit.from(Double.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.Unit.from(0.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.Unit.from(Double.NaN));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.Unit.from(Double.NEGATIVE_INFINITY));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector1D.Unit.from(Double.POSITIVE_INFINITY));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/AffineTransformMatrix3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/AffineTransformMatrix3DTest.java
index 7669812..525aae7 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/AffineTransformMatrix3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/AffineTransformMatrix3DTest.java
@@ -29,6 +29,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class AffineTransformMatrix3DTest {
 
     private static final double EPS = 1e-12;
@@ -57,7 +58,7 @@ public class AffineTransformMatrix3DTest {
     @Test
     public void testOf_invalidDimensions() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> AffineTransformMatrix3D.of(1, 2),
+        GeometryTestUtils.assertThrowsWithMessage(() -> AffineTransformMatrix3D.of(1, 2),
                 IllegalArgumentException.class, "Dimension mismatch: 2 != 12");
     }
 
@@ -126,9 +127,7 @@ public class AffineTransformMatrix3DTest {
     @Test
     public void testFrom_invalidFunction() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            AffineTransformMatrix3D.from(v -> v.multiply(0));
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AffineTransformMatrix3D.from(v -> v.multiply(0)));
     }
 
     @Test
@@ -663,10 +662,8 @@ public class AffineTransformMatrix3DTest {
     @Test
     public void testApplyDirection_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> AffineTransformMatrix3D.createScale(1, 0, 1).applyDirection(Vector3D.Unit.PLUS_Y),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> AffineTransformMatrix3D.createScale(2).applyDirection(Vector3D.ZERO),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AffineTransformMatrix3D.createScale(1, 0, 1).applyDirection(Vector3D.Unit.PLUS_Y));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AffineTransformMatrix3D.createScale(2).applyDirection(Vector3D.ZERO));
     }
 
     @Test
@@ -974,49 +971,49 @@ public class AffineTransformMatrix3DTest {
     @Test
     public void testInverse_nonInvertible() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix3D.of(
                     0, 0, 0, 0,
                     0, 0, 0, 0,
                     0, 0, 0, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is 0.0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix3D.of(
                     1, 0, 0, 0,
                     0, 1, 0, 0,
                     0, 0, Double.NaN, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix3D.of(
                     1, 0, 0, 0,
                     0, Double.NEGATIVE_INFINITY, 0, 0,
                     0, 0, 1, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix3D.of(
                     Double.POSITIVE_INFINITY, 0, 0, 0,
                     0, 1, 0, 0,
                     0, 0, 1, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix3D.of(
                     1, 0, 0, Double.NaN,
                     0, 1, 0, 0,
                     0, 0, 1, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; invalid matrix element: NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix3D.of(
                     1, 0, 0, 0,
                     0, 1, 0, Double.POSITIVE_INFINITY,
                     0, 0, 1, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; invalid matrix element: Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix3D.of(
                     1, 0, 0, 0,
                     0, 1, 0, 0,
@@ -1121,9 +1118,7 @@ public class AffineTransformMatrix3DTest {
     @Test
     public void testNormalTransform_nonInvertible() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            AffineTransformMatrix3D.createScale(0).normalTransform();
-        }, IllegalStateException.class);
+        Assertions.assertThrows(IllegalStateException.class, () -> AffineTransformMatrix3D.createScale(0).normalTransform());
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Bounds3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Bounds3DTest.java
index f95ae10..636de3f 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Bounds3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Bounds3DTest.java
@@ -31,6 +31,7 @@ import org.apache.commons.geometry.euclidean.threed.shape.Parallelepiped;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class Bounds3DTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -110,7 +111,7 @@ public class Bounds3DTest {
     @Test
     public void testFrom_iterable_noPoints() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Bounds3D.from(new ArrayList<>());
         }, IllegalStateException.class, NO_POINTS_MESSAGE);
     }
@@ -125,27 +126,27 @@ public class Bounds3DTest {
         final Vector3D negInf = Vector3D.of(1, 1, Double.NEGATIVE_INFINITY);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Bounds3D.from(Vector3D.NaN);
         }, IllegalStateException.class, INVALID_BOUNDS_PATTERN);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Bounds3D.from(Vector3D.POSITIVE_INFINITY);
         }, IllegalStateException.class, INVALID_BOUNDS_PATTERN);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Bounds3D.from(Vector3D.NEGATIVE_INFINITY);
         }, IllegalStateException.class, INVALID_BOUNDS_PATTERN);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Bounds3D.from(good, nan);
         }, IllegalStateException.class, INVALID_BOUNDS_PATTERN);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Bounds3D.from(posInf, good);
         }, IllegalStateException.class, INVALID_BOUNDS_PATTERN);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Bounds3D.from(good, negInf, good);
         }, IllegalStateException.class, INVALID_BOUNDS_PATTERN);
     }
@@ -381,10 +382,8 @@ public class Bounds3DTest {
     @Test
     public void toRegion_boundingBoxTooSmall() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Bounds3D.from(Vector3D.ZERO, Vector3D.of(1e-12, 1e-12, 1e-12))
-                .toRegion(TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Bounds3D.from(Vector3D.ZERO, Vector3D.of(1e-12, 1e-12, 1e-12))
+                .toRegion(TEST_PRECISION));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/ConvexVolumeTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/ConvexVolumeTest.java
index 3070724..c81e19c 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/ConvexVolumeTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/ConvexVolumeTest.java
@@ -115,11 +115,11 @@ public class ConvexVolumeTest {
                 );
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             half.triangleStream().collect(Collectors.toList());
         }, IllegalStateException.class, pattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             quadrant.triangleStream().collect(Collectors.toList());
         }, IllegalStateException.class, pattern);
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddedAreaPlaneConvexSubsetTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddedAreaPlaneConvexSubsetTest.java
index 76a95ef..844d819 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddedAreaPlaneConvexSubsetTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddedAreaPlaneConvexSubsetTest.java
@@ -149,18 +149,18 @@ public class EmbeddedAreaPlaneConvexSubsetTest {
         final Pattern pattern = Pattern.compile("^Cannot convert infinite plane subset to triangles: .*");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             new EmbeddedAreaPlaneConvexSubset(XY_PLANE_Z1, ConvexArea.full()).toTriangles();
         }, IllegalStateException.class, pattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             final ConvexArea area = ConvexArea.fromBounds(Lines.fromPointAndAngle(Vector2D.ZERO, 0, TEST_PRECISION));
             final EmbeddedAreaPlaneConvexSubset halfSpace = new EmbeddedAreaPlaneConvexSubset(XY_PLANE_Z1, area);
 
             halfSpace.toTriangles();
         }, IllegalStateException.class, pattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             final ConvexArea area = ConvexArea.fromBounds(
                     Lines.fromPointAndAngle(Vector2D.ZERO, 0, TEST_PRECISION),
                     Lines.fromPointAndAngle(Vector2D.ZERO, 0.5 * Math.PI, TEST_PRECISION));
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddedTreePlaneSubsetTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddedTreePlaneSubsetTest.java
index 83b5fd8..858fd2c 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddedTreePlaneSubsetTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddedTreePlaneSubsetTest.java
@@ -165,11 +165,11 @@ public class EmbeddedTreePlaneSubsetTest {
         final Pattern pattern = Pattern.compile("^Cannot convert infinite plane subset to triangles: .*");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             new EmbeddedTreePlaneSubset(XY_PLANE, true).toTriangles();
         }, IllegalStateException.class, pattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             final EmbeddedTreePlaneSubset halfSpace = new EmbeddedTreePlaneSubset(XY_PLANE, false);
             halfSpace.getSubspaceRegion().getRoot()
                 .insertCut(Lines.fromPointAndAngle(Vector2D.ZERO, 0, TEST_PRECISION));
@@ -177,7 +177,7 @@ public class EmbeddedTreePlaneSubsetTest {
             halfSpace.toTriangles();
         }, IllegalStateException.class, pattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             final RegionBSPTree2D tree = RegionBSPTree2D.empty();
             tree.insert(Lines.segmentFromPoints(Vector2D.ZERO, Vector2D.of(1, 0), TEST_PRECISION));
             tree.insert(Lines.segmentFromPoints(Vector2D.ZERO, Vector2D.of(0, 1), TEST_PRECISION));
@@ -660,17 +660,12 @@ public class EmbeddedTreePlaneSubsetTest {
         final EmbeddedTreePlaneSubset ps = new EmbeddedTreePlaneSubset(XY_PLANE, false);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            ps.add(Planes.subsetFromConvexArea(
-                    Planes.fromPointAndPlaneVectors(Vector3D.ZERO, Vector3D.Unit.PLUS_X, Vector3D.Unit.MINUS_Z, TEST_PRECISION),
-                    ConvexArea.full()));
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            ps.add(new EmbeddedTreePlaneSubset(
-                    Planes.fromPointAndPlaneVectors(Vector3D.of(0, 0, -1), Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_Y, TEST_PRECISION),
-                    false));
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> ps.add(Planes.subsetFromConvexArea(
+                Planes.fromPointAndPlaneVectors(Vector3D.ZERO, Vector3D.Unit.PLUS_X, Vector3D.Unit.MINUS_Z, TEST_PRECISION),
+                ConvexArea.full())));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> ps.add(new EmbeddedTreePlaneSubset(
+                Planes.fromPointAndPlaneVectors(Vector3D.of(0, 0, -1), Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_Y, TEST_PRECISION),
+                false)));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddingPlaneTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddingPlaneTest.java
index 5c0e90d..2deaf74 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddingPlaneTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/EmbeddingPlaneTest.java
@@ -28,6 +28,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class EmbeddingPlaneTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -59,24 +60,13 @@ public class EmbeddingPlaneTest {
         // act/assert
 
         // identical vectors
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPointAndPlaneVectors(pt, Vector3D.of(0, 0, 1), Vector3D.of(0, 0, 1), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPointAndPlaneVectors(pt, Vector3D.of(0, 0, 1), Vector3D.of(0, 0, 1), TEST_PRECISION));
         // zero vector
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPointAndPlaneVectors(pt, Vector3D.of(0, 0, 1), Vector3D.ZERO, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPointAndPlaneVectors(pt, Vector3D.of(0, 0, 1), Vector3D.ZERO, TEST_PRECISION));
         // collinear vectors
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPointAndPlaneVectors(pt, Vector3D.of(0, 0, 1), Vector3D.of(0, 0, 2), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPointAndPlaneVectors(pt, Vector3D.of(0, 0, 1), Vector3D.of(0, 0, 2), TEST_PRECISION));
         // collinear vectors - reversed
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPointAndPlaneVectors(pt, Vector3D.of(0, 0, 1), Vector3D.of(0, 0, -2), TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPointAndPlaneVectors(pt, Vector3D.of(0, 0, 1), Vector3D.of(0, 0, -2), TEST_PRECISION));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlaneTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlaneTest.java
index 4d59789..8254e04 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlaneTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlaneTest.java
@@ -32,6 +32,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class PlaneTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -55,9 +56,7 @@ public class PlaneTest {
     @Test
     public void testFromNormal_illegalArguments() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromNormal(Vector3D.ZERO, TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromNormal(Vector3D.ZERO, TEST_PRECISION));
     }
 
     @Test
@@ -80,9 +79,7 @@ public class PlaneTest {
         final Vector3D pt = Vector3D.of(1, 2, 3);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPointAndNormal(pt, Vector3D.ZERO, TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPointAndNormal(pt, Vector3D.ZERO, TEST_PRECISION));
     }
 
     @Test
@@ -123,21 +120,11 @@ public class PlaneTest {
         final Vector3D b = Vector3D.of(0, 1, 0);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPoints(a, a, a, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPoints(a, a, b, TEST_PRECISION);
-        }, IllegalArgumentException.class);
 
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPoints(a, b, a, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPoints(b, a, a, TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPoints(a, a, a, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPoints(a, a, b, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPoints(a, b, a, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPoints(b, a, a, TEST_PRECISION));
     }
 
     @Test
@@ -287,72 +274,53 @@ public class PlaneTest {
         final Vector3D b = Vector3D.Unit.PLUS_X;
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPoints(Collections.emptyList(), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPoints(Collections.singletonList(a), TEST_PRECISION);
-        }, IllegalArgumentException.class);
 
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPoints(Arrays.asList(a, b), TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPoints(Collections.emptyList(), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPoints(Collections.singletonList(a), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPoints(Arrays.asList(a, b), TEST_PRECISION));
     }
 
     @Test
     public void testFromPoints_collection_allPointsCollinear() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPoints(Arrays.asList(
-                        Vector3D.ZERO,
-                        Vector3D.Unit.PLUS_X,
-                        Vector3D.of(2, 0, 0)
-                    ), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPoints(Arrays.asList(
-                        Vector3D.ZERO,
-                        Vector3D.Unit.PLUS_X,
-                        Vector3D.of(2, 0, 0),
-                        Vector3D.of(3, 0, 0)
-                    ), TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPoints(Arrays.asList(
+                Vector3D.ZERO,
+                Vector3D.Unit.PLUS_X,
+                Vector3D.of(2, 0, 0)
+        ), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPoints(Arrays.asList(
+                Vector3D.ZERO,
+                Vector3D.Unit.PLUS_X,
+                Vector3D.of(2, 0, 0),
+                Vector3D.of(3, 0, 0)
+        ), TEST_PRECISION));
     }
 
     @Test
     public void testFromPoints_collection_notEnoughUniquePoints() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPoints(Arrays.asList(
-                        Vector3D.ZERO,
-                        Vector3D.ZERO,
-                        Vector3D.of(1e-12, 1e-12, 0),
-                        Vector3D.Unit.PLUS_X
-                    ), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPoints(Arrays.asList(
-                        Vector3D.ZERO,
-                        Vector3D.of(1e-12, 0, 0),
-                        Vector3D.ZERO
-                    ), TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPoints(Arrays.asList(
+                Vector3D.ZERO,
+                Vector3D.ZERO,
+                Vector3D.of(1e-12, 1e-12, 0),
+                Vector3D.Unit.PLUS_X
+        ), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPoints(Arrays.asList(
+                Vector3D.ZERO,
+                Vector3D.of(1e-12, 0, 0),
+                Vector3D.ZERO
+        ), TEST_PRECISION));
     }
 
     @Test
     public void testFromPoints_collection_pointsNotOnSamePlane() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.fromPoints(Arrays.asList(
-                        Vector3D.ZERO,
-                        Vector3D.Unit.PLUS_X,
-                        Vector3D.Unit.PLUS_Y,
-                        Vector3D.Unit.PLUS_Z
-                    ), TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Planes.fromPoints(Arrays.asList(
+                Vector3D.ZERO,
+                Vector3D.Unit.PLUS_X,
+                Vector3D.Unit.PLUS_Y,
+                Vector3D.Unit.PLUS_Z
+        ), TEST_PRECISION));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlanesTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlanesTest.java
index f6e798a..2f08f97 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlanesTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/PlanesTest.java
@@ -40,6 +40,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class PlanesTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -181,24 +182,24 @@ public class PlanesTest {
         final Pattern nonPlanarPattern = Pattern.compile("Points do not define a plane.*");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.convexPolygonFromVertices(Collections.emptyList(), TEST_PRECISION);
         }, IllegalArgumentException.class, nonPlanarPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.convexPolygonFromVertices(Collections.singletonList(Vector3D.ZERO), TEST_PRECISION);
         }, IllegalArgumentException.class, nonPlanarPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.convexPolygonFromVertices(Arrays.asList(Vector3D.ZERO, Vector3D.of(1, 0, 0)), TEST_PRECISION);
         }, IllegalArgumentException.class, nonPlanarPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.convexPolygonFromVertices(
                     Arrays.asList(Vector3D.ZERO, Vector3D.of(1, 0, 0), Vector3D.of(1, 1e-15, 0)), TEST_PRECISION);
         }, IllegalArgumentException.class, nonPlanarPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.convexPolygonFromVertices(Arrays.asList(
                         Vector3D.ZERO,
                         Vector3D.of(1, 0, 1),
@@ -214,7 +215,7 @@ public class PlanesTest {
         final Pattern nonConvexPattern = Pattern.compile("Points do not define a convex region.*");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.convexPolygonFromVertices(Arrays.asList(
                         Vector3D.ZERO,
                         Vector3D.of(2, 0, 0),
@@ -245,7 +246,7 @@ public class PlanesTest {
         final Pattern msg = Pattern.compile("^Points do not define a plane.*");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.triangleFromVertices(
                         Vector3D.ZERO,
                         Vector3D.of(1e-11, 0, 0),
@@ -253,7 +254,7 @@ public class PlanesTest {
                         TEST_PRECISION);
         }, IllegalArgumentException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.triangleFromVertices(
                         Vector3D.ZERO,
                         Vector3D.of(1, 0, 0),
@@ -343,37 +344,32 @@ public class PlanesTest {
         };
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.indexedTriangles(vertices, new int[][] {
                 {0}
             }, TEST_PRECISION);
         }, IllegalArgumentException.class,
                 "Invalid number of vertex indices for face at index 0: expected 3 but found 1");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.indexedTriangles(vertices, new int[][] {
                 {0, 1, 2, 0}
             }, TEST_PRECISION);
         }, IllegalArgumentException.class,
                 "Invalid number of vertex indices for face at index 0: expected 3 but found 4");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.indexedTriangles(new ArrayList<>(Arrays.asList(vertices)), new int[][] {
                 {0, 1, 3}
             }, TEST_PRECISION);
         }, IllegalArgumentException.class, Pattern.compile("^Points do not define a plane: .*"));
 
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.indexedTriangles(vertices, new int[][] {
+        Assertions.assertThrows(IndexOutOfBoundsException.class, () -> Planes.indexedTriangles(vertices, new int[][] {
                 {0, 1, 10}
-            }, TEST_PRECISION);
-        }, IndexOutOfBoundsException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.indexedTriangles(new ArrayList<>(Arrays.asList(vertices)), new int[][] {
+        }, TEST_PRECISION));
+        Assertions.assertThrows(IndexOutOfBoundsException.class, () -> Planes.indexedTriangles(new ArrayList<>(Arrays.asList(vertices)), new int[][] {
                 {0, 1, 10}
-            }, TEST_PRECISION);
-        }, IndexOutOfBoundsException.class);
+        }, TEST_PRECISION));
     }
 
     @Test
@@ -499,30 +495,25 @@ public class PlanesTest {
         };
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.indexedConvexPolygons(vertices, new int[][] {
                 {0}
             }, TEST_PRECISION);
         }, IllegalArgumentException.class,
                 "Invalid number of vertex indices for face at index 0: required at least 3 but found 1");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.indexedConvexPolygons(new ArrayList<>(Arrays.asList(vertices)), new int[][] {
                 {0, 1, 3}
             }, TEST_PRECISION);
         }, IllegalArgumentException.class, Pattern.compile("^Points do not define a plane: .*"));
 
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.indexedConvexPolygons(vertices, new int[][] {
+        Assertions.assertThrows(IndexOutOfBoundsException.class, () -> Planes.indexedConvexPolygons(vertices, new int[][] {
                 {0, 1, 10}
-            }, TEST_PRECISION);
-        }, IndexOutOfBoundsException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.indexedConvexPolygons(new ArrayList<>(Arrays.asList(vertices)), new int[][] {
+        }, TEST_PRECISION));
+        Assertions.assertThrows(IndexOutOfBoundsException.class, () -> Planes.indexedConvexPolygons(new ArrayList<>(Arrays.asList(vertices)), new int[][] {
                 {0, 1, 10}
-            }, TEST_PRECISION);
-        }, IndexOutOfBoundsException.class);
+        }, TEST_PRECISION));
     }
 
     @Test
@@ -662,15 +653,15 @@ public class PlanesTest {
         final Plane plane = Planes.fromNormal(Vector3D.Unit.PLUS_Z, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.convexPolygonToTriangleFan(plane, Collections.emptyList());
         }, IllegalArgumentException.class, baseMsg + "0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.convexPolygonToTriangleFan(plane, Collections.singletonList(Vector3D.ZERO));
         }, IllegalArgumentException.class, baseMsg + "1");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.convexPolygonToTriangleFan(plane, Arrays.asList(Vector3D.ZERO, Vector3D.of(1, 0, 0)));
         }, IllegalArgumentException.class, baseMsg + "2");
     }
@@ -822,14 +813,9 @@ public class PlanesTest {
         final Vector3D extrusionVector = Vector3D.of(0, 0, 2);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.extrudeVertexLoop(Collections.singletonList(Vector2D.ZERO), plane, extrusionVector, TEST_PRECISION);
-        }, IllegalStateException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Planes.extrudeVertexLoop(Arrays.asList(Vector2D.ZERO, Vector2D.of(0, 1e-16)), plane,
-                    extrusionVector, TEST_PRECISION);
-        }, IllegalStateException.class);
+        Assertions.assertThrows(IllegalStateException.class, () -> Planes.extrudeVertexLoop(Collections.singletonList(Vector2D.ZERO), plane, extrusionVector, TEST_PRECISION));
+        Assertions.assertThrows(IllegalStateException.class, () -> Planes.extrudeVertexLoop(Arrays.asList(Vector2D.ZERO, Vector2D.of(0, 1e-16)), plane,
+                extrusionVector, TEST_PRECISION));
     }
 
     @Test
@@ -1339,33 +1325,33 @@ public class PlanesTest {
         final Pattern errorPattern = Pattern.compile("^Extrusion vector produces regions of zero size.*");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.extrudeVertexLoop(vertices, plane, Vector3D.of(1e-16, 0, 0), TEST_PRECISION);
         }, IllegalArgumentException.class, errorPattern);
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.extrudeVertexLoop(vertices, plane, Vector3D.of(4, 1e-16, 0), TEST_PRECISION);
         }, IllegalArgumentException.class, errorPattern);
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.extrudeVertexLoop(vertices, plane, Vector3D.of(1e-16, 5, 0), TEST_PRECISION);
         }, IllegalArgumentException.class, errorPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.extrude(path, plane, Vector3D.of(1e-16, 0, 0), TEST_PRECISION);
         }, IllegalArgumentException.class, errorPattern);
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.extrude(path, plane, Vector3D.of(4, 1e-16, 0), TEST_PRECISION);
         }, IllegalArgumentException.class, errorPattern);
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.extrude(path, plane, Vector3D.of(1e-16, 5, 0), TEST_PRECISION);
         }, IllegalArgumentException.class, errorPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.extrude(tree, plane, Vector3D.of(1e-16, 0, 0), TEST_PRECISION);
         }, IllegalArgumentException.class, errorPattern);
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.extrude(tree, plane, Vector3D.of(4, 1e-16, 0), TEST_PRECISION);
         }, IllegalArgumentException.class, errorPattern);
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Planes.extrude(tree, plane, Vector3D.of(1e-16, 5, 0), TEST_PRECISION);
         }, IllegalArgumentException.class, errorPattern);
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/RegionBSPTree3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/RegionBSPTree3DTest.java
index 0b37c06..7eae12e 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/RegionBSPTree3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/RegionBSPTree3DTest.java
@@ -44,6 +44,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class RegionBSPTree3DTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -253,19 +254,19 @@ public class RegionBSPTree3DTest {
         final String msg = "Cannot insert partitions after boundaries have been inserted";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.insertPartition(partition);
         }, IllegalStateException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.insertPartition(partition.span());
         }, IllegalStateException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.insertAxisAlignedPartitions(Vector3D.ZERO, TEST_PRECISION);
         }, IllegalStateException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.insertAxisAlignedGrid(Bounds3D.from(Vector3D.ZERO, Vector3D.of(1, 1, 1)), 1, TEST_PRECISION);
         }, IllegalStateException.class, msg);
     }
@@ -432,9 +433,7 @@ public class RegionBSPTree3DTest {
         tree.getRoot().insertCut(Planes.fromNormal(Vector3D.Unit.PLUS_Z, TEST_PRECISION));
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            tree.toTriangleMesh(TEST_PRECISION);
-        }, IllegalStateException.class);
+        Assertions.assertThrows(IllegalStateException.class, () -> tree.toTriangleMesh(TEST_PRECISION));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SimpleTriangle3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SimpleTriangle3DTest.java
index 6b0c7fa..497512a 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SimpleTriangle3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SimpleTriangle3DTest.java
@@ -32,6 +32,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class SimpleTriangle3DTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -86,9 +87,7 @@ public class SimpleTriangle3DTest {
                 Vector3D.of(0, 0, 1), Vector3D.of(1, 0, 1), Vector3D.of(0, 1, 1));
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            tri.getVertices().add(Vector3D.of(-1, 0, 1));
-        }, UnsupportedOperationException.class);
+        Assertions.assertThrows(UnsupportedOperationException.class, () -> tri.getVertices().add(Vector3D.of(-1, 0, 1)));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SphericalCoordinatesTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SphericalCoordinatesTest.java
index 429918e..25068bb 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SphericalCoordinatesTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/SphericalCoordinatesTest.java
@@ -23,7 +23,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class SphericalCoordinatesTest {
 
@@ -363,7 +362,7 @@ public class SphericalCoordinatesTest {
     @Test
     public void testParse_failure() {
         // act/assert
-        assertThrows(IllegalArgumentException.class, () -> SphericalCoordinates.parse("abc"));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> SphericalCoordinates.parse("abc"));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Vector3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Vector3DTest.java
index d1a1a9e..b378665 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Vector3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/Vector3DTest.java
@@ -34,7 +34,6 @@ import org.apache.commons.rng.simple.RandomSource;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class Vector3DTest {
 
@@ -62,10 +61,13 @@ public class Vector3DTest {
     @Test
     public void testConstants_normalize() {
         // act/assert
-        GeometryTestUtils.assertThrows(Vector3D.ZERO::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector3D.NaN::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector3D.POSITIVE_INFINITY::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector3D.NEGATIVE_INFINITY::normalize, IllegalArgumentException.class);
+
+
+        Assertions.assertThrows(IllegalArgumentException.class, Vector3D.ZERO::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector3D.NaN::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector3D.POSITIVE_INFINITY::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector3D.NEGATIVE_INFINITY::normalize);
+
 
         Assertions.assertSame(Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_X.normalize());
         Assertions.assertSame(Vector3D.Unit.MINUS_X, Vector3D.Unit.MINUS_X.normalize());
@@ -268,14 +270,10 @@ public class Vector3DTest {
     @Test
     public void testWithNorm_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Vector3D.ZERO.withNorm(2.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.NaN.withNorm(2.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.POSITIVE_INFINITY.withNorm(2.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.NEGATIVE_INFINITY.withNorm(2.0),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector3D.ZERO.withNorm(2.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector3D.NaN.withNorm(2.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector3D.POSITIVE_INFINITY.withNorm(2.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector3D.NEGATIVE_INFINITY.withNorm(2.0));
     }
 
     @Test
@@ -407,10 +405,10 @@ public class Vector3DTest {
     @Test
     public void testNormalize_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(Vector3D.ZERO::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector3D.NaN::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector3D.POSITIVE_INFINITY::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector3D.NEGATIVE_INFINITY::normalize, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector3D.ZERO::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector3D.NaN::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector3D.POSITIVE_INFINITY::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector3D.NEGATIVE_INFINITY::normalize);
     }
 
     @Test
@@ -442,10 +440,10 @@ public class Vector3DTest {
     @Test
     public void testOrthogonal_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(Vector3D.ZERO::orthogonal, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector3D.NaN::orthogonal, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector3D.POSITIVE_INFINITY::orthogonal, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector3D.NEGATIVE_INFINITY::orthogonal, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector3D.ZERO::orthogonal);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector3D.NaN::orthogonal);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector3D.POSITIVE_INFINITY::orthogonal);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector3D.NEGATIVE_INFINITY::orthogonal);
     }
 
     @Test
@@ -464,36 +462,24 @@ public class Vector3DTest {
     @Test
     public void testOrthogonal_givenDirection_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Vector3D.ZERO.orthogonal(Vector3D.Unit.PLUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.NaN.orthogonal(Vector3D.Unit.PLUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.POSITIVE_INFINITY.orthogonal(Vector3D.Unit.PLUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.NEGATIVE_INFINITY.orthogonal(Vector3D.Unit.PLUS_X),
-                IllegalArgumentException.class);
 
-        GeometryTestUtils.assertThrows(() -> Vector3D.Unit.PLUS_X.orthogonal(Vector3D.ZERO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.Unit.PLUS_X.orthogonal(Vector3D.NaN),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.Unit.PLUS_X.orthogonal(Vector3D.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.Unit.PLUS_X.orthogonal(Vector3D.NEGATIVE_INFINITY),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.ZERO.orthogonal(Vector3D.Unit.PLUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.NaN.orthogonal(Vector3D.Unit.PLUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.POSITIVE_INFINITY.orthogonal(Vector3D.Unit.PLUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.NEGATIVE_INFINITY.orthogonal(Vector3D.Unit.PLUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.Unit.PLUS_X.orthogonal(Vector3D.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.Unit.PLUS_X.orthogonal(Vector3D.NaN));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.Unit.PLUS_X.orthogonal(Vector3D.POSITIVE_INFINITY));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.Unit.PLUS_X.orthogonal(Vector3D.NEGATIVE_INFINITY));
     }
 
     @Test
     public void testOrthogonal_givenDirection_directionIsCollinear() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Vector3D.Unit.PLUS_X.orthogonal(Vector3D.Unit.PLUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.Unit.PLUS_X.orthogonal(Vector3D.Unit.MINUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.of(1.0, 1.0, 1.0).orthogonal(Vector3D.of(2.0, 2.0, 2.0)),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.of(-1.01, -1.01, -1.01).orthogonal(Vector3D.of(20.1, 20.1, 20.1)),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.Unit.PLUS_X.orthogonal(Vector3D.Unit.PLUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.Unit.PLUS_X.orthogonal(Vector3D.Unit.MINUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.of(1.0, 1.0, 1.0).orthogonal(Vector3D.of(2.0, 2.0, 2.0)));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.of(-1.01, -1.01, -1.01).orthogonal(Vector3D.of(20.1, 20.1, 20.1)));
     }
 
     @Test
@@ -524,23 +510,15 @@ public class Vector3DTest {
         final Vector3D v = Vector3D.of(1.0, 1.0, 1.0);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Vector3D.ZERO.angle(v),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.NaN.angle(v),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.POSITIVE_INFINITY.angle(v),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.NEGATIVE_INFINITY.angle(v),
-                IllegalArgumentException.class);
 
-        GeometryTestUtils.assertThrows(() -> v.angle(Vector3D.ZERO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.angle(Vector3D.NaN),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.angle(Vector3D.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.angle(Vector3D.NEGATIVE_INFINITY),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.ZERO.angle(v));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.NaN.angle(v));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.POSITIVE_INFINITY.angle(v));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.NEGATIVE_INFINITY.angle(v));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  v.angle(Vector3D.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  v.angle(Vector3D.NaN));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  v.angle(Vector3D.POSITIVE_INFINITY));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  v.angle(Vector3D.NEGATIVE_INFINITY));
     }
 
     @Test
@@ -796,14 +774,10 @@ public class Vector3DTest {
         final Vector3D v = Vector3D.of(1.0, 1.0, 1.0);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> v.project(Vector3D.ZERO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.project(Vector3D.NaN),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.project(Vector3D.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.project(Vector3D.NEGATIVE_INFINITY),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.project(Vector3D.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.project(Vector3D.NaN));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.project(Vector3D.POSITIVE_INFINITY));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  v.project(Vector3D.NEGATIVE_INFINITY));
     }
 
     @Test
@@ -842,14 +816,12 @@ public class Vector3DTest {
         final Vector3D v = Vector3D.of(1.0, 1.0, 1.0);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> v.reject(Vector3D.ZERO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.reject(Vector3D.NaN),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.reject(Vector3D.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.reject(Vector3D.NEGATIVE_INFINITY),
-                IllegalArgumentException.class);
+
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.reject(Vector3D.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.reject(Vector3D.NaN));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.reject(Vector3D.POSITIVE_INFINITY));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.reject(Vector3D.NEGATIVE_INFINITY));
+
     }
 
     @Test
@@ -943,16 +915,10 @@ public class Vector3DTest {
         final Vector3D p = Vector3D.of(1, 2, 3);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Vector3D.ZERO.directionTo(Vector3D.ZERO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> p.directionTo(p),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> p.directionTo(Vector3D.NaN),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.NEGATIVE_INFINITY.directionTo(p),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> p.directionTo(Vector3D.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.ZERO.directionTo(Vector3D.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  p.directionTo(p));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.NEGATIVE_INFINITY.directionTo(p));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  p.directionTo(Vector3D.POSITIVE_INFINITY));
     }
 
     @Test
@@ -1150,7 +1116,7 @@ public class Vector3DTest {
     @Test
     public void testParse_failure() {
         // act/assert
-        assertThrows(IllegalArgumentException.class, () -> Vector3D.parse("abc"));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector3D.parse("abc"));
     }
 
     @Test
@@ -1178,7 +1144,7 @@ public class Vector3DTest {
     @Test
     public void testOf_arrayArg_invalidDimensions() {
         // act/assert
-        assertThrows(IllegalArgumentException.class, () -> Vector3D.of(new double[] {0.0, 0.0}));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector3D.of(new double[] {0.0, 0.0}));
     }
 
     @Test
@@ -1205,14 +1171,10 @@ public class Vector3DTest {
 
     @Test
     public void testUnitFrom_static_illegalNorm() {
-        GeometryTestUtils.assertThrows(() -> Vector3D.Unit.from(0.0, 0.0, 0.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.Unit.from(Double.NaN, 1.0, 1.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.Unit.from(1.0, Double.NEGATIVE_INFINITY, 1.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector3D.Unit.from(1.0, 1.0, Double.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.Unit.from(0.0, 0.0, 0.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.Unit.from(Double.NaN, 1.0, 1.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.Unit.from(1.0, Double.NEGATIVE_INFINITY, 1.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Vector3D.Unit.from(1.0, 1.0, Double.POSITIVE_INFINITY));
     }
 
     @Test
@@ -1234,7 +1196,7 @@ public class Vector3DTest {
         final String msg = "Cannot compute vector max: no vectors given";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Vector3D.max(new ArrayList<>());
         }, IllegalArgumentException.class, msg);
     }
@@ -1258,7 +1220,7 @@ public class Vector3DTest {
         final String msg = "Cannot compute vector min: no vectors given";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Vector3D.min(new ArrayList<>());
         }, IllegalArgumentException.class, msg);
     }
@@ -1287,7 +1249,7 @@ public class Vector3DTest {
         final String msg = "Cannot compute centroid: no points given";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Vector3D.centroid(new ArrayList<>());
         }, IllegalArgumentException.class, msg);
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/VertexListConvexPolygon3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/VertexListConvexPolygon3DTest.java
index 8b4c499..ef5a7dc 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/VertexListConvexPolygon3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/VertexListConvexPolygon3DTest.java
@@ -34,6 +34,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class VertexListConvexPolygon3DTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -76,7 +77,7 @@ public class VertexListConvexPolygon3DTest {
     @Test
     public void testCtor_validatesVertexListSize() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             new VertexListConvexPolygon3D(XY_PLANE_Z1, Arrays.asList(Vector3D.ZERO, Vector3D.Unit.PLUS_X));
         }, IllegalArgumentException.class, "Convex polygon requires at least 3 points; found 2");
     }
@@ -88,9 +89,7 @@ public class VertexListConvexPolygon3DTest {
         final VertexListConvexPolygon3D p = new VertexListConvexPolygon3D(XY_PLANE_Z1, vertices);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            p.getVertices().add(Vector3D.of(-1, 0, 1));
-        }, UnsupportedOperationException.class);
+        Assertions.assertThrows(UnsupportedOperationException.class, () -> p.getVertices().add(Vector3D.of(-1, 0, 1)));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Line3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Line3DTest.java
index 5461bc1..b0f6e23 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Line3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Line3DTest.java
@@ -29,7 +29,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class Line3DTest {
 
@@ -65,11 +64,11 @@ public class Line3DTest {
     @Test
     public void testFromPointAndDirection_illegalDirectionNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.fromPointAndDirection(Vector3D.ZERO, Vector3D.ZERO, TEST_PRECISION);
         }, IllegalArgumentException.class, "Line direction cannot be zero");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.fromPointAndDirection(Vector3D.ZERO, Vector3D.of(1e-12, 1e-12, 1e-12), TEST_PRECISION);
         }, IllegalArgumentException.class, "Line direction cannot be zero");
     }
@@ -88,7 +87,7 @@ public class Line3DTest {
     @Test
     public void testFromPoints_pointsTooClose() {
         // act/assert
-        assertThrows(IllegalArgumentException.class, () -> Lines3D.fromPoints(Vector3D.of(1, 1, 1),
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Lines3D.fromPoints(Vector3D.of(1, 1, 1),
                 Vector3D.of(1, 1, 1 + 1e-16), TEST_PRECISION));
     }
 
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/LineConvexSubset3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/LineConvexSubset3DTest.java
index ee63b81..620770e 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/LineConvexSubset3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/LineConvexSubset3DTest.java
@@ -194,19 +194,19 @@ public class LineConvexSubset3DTest {
         final Line3D line = Lines3D.fromPointAndDirection(Vector3D.ZERO, Vector3D.of(1, 1, 1), TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.subsetFromInterval(line, Double.NaN, 0);
         }, IllegalArgumentException.class, "Invalid line convex subset interval: NaN, 0.0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.subsetFromInterval(line, 0, Double.NaN);
         }, IllegalArgumentException.class, "Invalid line convex subset interval: 0.0, NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.subsetFromInterval(line, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid line convex subset interval: Infinity, Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.subsetFromInterval(line, Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid line convex subset interval: -Infinity, -Infinity");
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Ray3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Ray3DTest.java
index 92c79ae..ce6e0bc 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Ray3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Ray3DTest.java
@@ -67,7 +67,7 @@ public class Ray3DTest {
         final Vector3D dir = Vector3D.of(1e-11, 0, 0);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.rayFromPointAndDirection(pt, dir, TEST_PRECISION);
         }, IllegalArgumentException.class, "Line direction cannot be zero");
     }
@@ -104,15 +104,15 @@ public class Ray3DTest {
         final Line3D line = Lines3D.fromPointAndDirection(Vector3D.ZERO, Vector3D.Unit.PLUS_X, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.rayFromPoint(line, Vector3D.NaN);
         }, IllegalArgumentException.class, "Invalid ray start location: NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.rayFromPoint(line, Vector3D.NEGATIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid ray start location: NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.rayFromPoint(line, Vector3D.POSITIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid ray start location: NaN");
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/ReverseRay3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/ReverseRay3DTest.java
index b58af5c..dbfceb0 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/ReverseRay3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/ReverseRay3DTest.java
@@ -67,7 +67,7 @@ public class ReverseRay3DTest {
         final Vector3D dir = Vector3D.of(1e-11, 0, 0);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.reverseRayFromPointAndDirection(pt, dir, TEST_PRECISION);
         }, IllegalArgumentException.class, "Line direction cannot be zero");
     }
@@ -104,15 +104,15 @@ public class ReverseRay3DTest {
         final Line3D line = Lines3D.fromPointAndDirection(Vector3D.ZERO, Vector3D.Unit.PLUS_X, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.reverseRayFromPoint(line, Vector3D.NaN);
         }, IllegalArgumentException.class, "Invalid reverse ray end location: NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.reverseRayFromPoint(line, Vector3D.NEGATIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid reverse ray end location: NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.reverseRayFromPoint(line, Vector3D.POSITIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid reverse ray end location: NaN");
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Segment3DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Segment3DTest.java
index fc846db..2b37c01 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Segment3DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/line/Segment3DTest.java
@@ -69,11 +69,11 @@ public class Segment3DTest {
         final Vector3D p2 = Vector3D.of(1e-17, 2, 4);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.segmentFromPoints(p1, p1, TEST_PRECISION);
         }, IllegalArgumentException.class, "Line direction cannot be zero");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.segmentFromPoints(p1, p2, TEST_PRECISION);
         }, IllegalArgumentException.class, "Line direction cannot be zero");
     }
@@ -144,19 +144,19 @@ public class Segment3DTest {
         final Line3D line = Lines3D.fromPointAndDirection(Vector3D.ZERO, Vector3D.Unit.PLUS_X, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.segmentFromPoints(line, Vector3D.NaN, p1);
         }, IllegalArgumentException.class, "Invalid line segment locations: NaN, 2.0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.segmentFromPoints(line, p0, Vector3D.NaN);
         }, IllegalArgumentException.class, "Invalid line segment locations: 1.0, NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.segmentFromPoints(line, Vector3D.NEGATIVE_INFINITY, p1);
         }, IllegalArgumentException.class, "Invalid line segment locations: NaN, 2.0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.segmentFromPoints(line, p0, Vector3D.POSITIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid line segment locations: 1.0, NaN");
     }
@@ -245,19 +245,19 @@ public class Segment3DTest {
         final Line3D line = Lines3D.fromPointAndDirection(Vector3D.ZERO, Vector3D.Unit.MINUS_Z, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.segmentFromLocations(line, Double.NaN, 2);
         }, IllegalArgumentException.class, "Invalid line segment locations: NaN, 2.0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.segmentFromLocations(line, 1, Double.NaN);
         }, IllegalArgumentException.class, "Invalid line segment locations: 1.0, NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.segmentFromLocations(line, Double.NEGATIVE_INFINITY, 2);
         }, IllegalArgumentException.class, "Invalid line segment locations: -Infinity, 2.0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines3D.segmentFromLocations(line, 1, Double.POSITIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid line segment locations: 1.0, Infinity");
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/mesh/SimpleTriangleMeshTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/mesh/SimpleTriangleMeshTest.java
index 24e6533..89189b4 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/mesh/SimpleTriangleMeshTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/mesh/SimpleTriangleMeshTest.java
@@ -40,6 +40,7 @@ import org.apache.commons.geometry.euclidean.threed.shape.Parallelepiped;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class SimpleTriangleMeshTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -274,7 +275,7 @@ public class SimpleTriangleMeshTest {
         Assertions.assertEquals(0, it.next().getIndex());
         Assertions.assertFalse(it.hasNext());
 
-        GeometryTestUtils.assertThrows(() -> it.next(), NoSuchElementException.class);
+        Assertions.assertThrows(NoSuchElementException.class, it::next);
     }
 
     @Test
@@ -355,12 +356,12 @@ public class SimpleTriangleMeshTest {
         final Pattern msgPattern = Pattern.compile("^Points do not define a plane: .*");
 
         Assertions.assertFalse(mesh.getFace(0).definesPolygon());
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             mesh.getFace(0).getPolygon();
         }, IllegalArgumentException.class, msgPattern);
 
         Assertions.assertFalse(mesh.getFace(1).definesPolygon());
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             mesh.getFace(1).getPolygon();
         }, IllegalArgumentException.class, msgPattern);
     }
@@ -515,27 +516,27 @@ public class SimpleTriangleMeshTest {
         final String msgBase = "Invalid vertex index: ";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addFace(-1, 1, 2);
         }, IllegalArgumentException.class, msgBase + "-1");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addFace(0, 3, 2);
         }, IllegalArgumentException.class, msgBase + "3");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addFace(0, 1, 4);
         }, IllegalArgumentException.class, msgBase + "4");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addFaces(new int[][] {{-1, 1, 2}});
         }, IllegalArgumentException.class, msgBase + "-1");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addFaces(new int[][] {{0, 3, 2}});
         }, IllegalArgumentException.class, msgBase + "3");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addFaces(new int[][] {{0, 1, 4}});
         }, IllegalArgumentException.class, msgBase + "4");
     }
@@ -552,19 +553,19 @@ public class SimpleTriangleMeshTest {
         final String msgBase = "Face must contain 3 vertex indices; found ";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addFaces(new int[][] {{}});
         }, IllegalArgumentException.class, msgBase + "0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addFaces(new int[][] {{0}});
         }, IllegalArgumentException.class, msgBase + "1");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addFaces(new int[][] {{0, 1}});
         }, IllegalArgumentException.class, msgBase + "2");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addFaces(new int[][] {{0, 1, 2, 3}});
         }, IllegalArgumentException.class, msgBase + "4");
     }
@@ -586,35 +587,35 @@ public class SimpleTriangleMeshTest {
         final String msg = "Builder instance cannot be modified: mesh construction is complete";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.useVertex(Vector3D.ZERO);
         }, IllegalStateException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addVertex(Vector3D.ZERO);
         }, IllegalStateException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addVertices(Collections.singletonList(Vector3D.ZERO));
         }, IllegalStateException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addVertices(new Vector3D[] {Vector3D.ZERO});
         }, IllegalStateException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addFaceUsingVertices(Vector3D.ZERO, Vector3D.of(1, 0, 0), Vector3D.of(0, 1, 0));
         }, IllegalStateException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addFace(0, 1, 2);
         }, IllegalStateException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addFaces(Collections.singletonList(new int[]{0, 1, 2}));
         }, IllegalStateException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.addFaces(new int[][] {{0, 1, 2}});
         }, IllegalStateException.class, msg);
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/rotation/QuaternionRotationTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/rotation/QuaternionRotationTest.java
index ea3a83f..74e4752 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/rotation/QuaternionRotationTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/rotation/QuaternionRotationTest.java
@@ -35,6 +35,7 @@ import org.apache.commons.rng.simple.RandomSource;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class QuaternionRotationTest {
 
     private static final double EPS = 1e-12;
@@ -71,16 +72,11 @@ public class QuaternionRotationTest {
     @Test
     public void testOf_quaternion_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(() ->
-            QuaternionRotation.of(Quaternion.of(0, 0, 0, 0)), IllegalStateException.class);
-        GeometryTestUtils.assertThrows(() ->
-            QuaternionRotation.of(Quaternion.of(1, 1, 1, Double.NaN)), IllegalStateException.class);
-        GeometryTestUtils.assertThrows(() ->
-            QuaternionRotation.of(Quaternion.of(1, 1, Double.POSITIVE_INFINITY, 1)), IllegalStateException.class);
-        GeometryTestUtils.assertThrows(() ->
-            QuaternionRotation.of(Quaternion.of(1, Double.NEGATIVE_INFINITY, 1, 1)), IllegalStateException.class);
-        GeometryTestUtils.assertThrows(() ->
-            QuaternionRotation.of(Quaternion.of(Double.NaN, 1, 1, 1)), IllegalStateException.class);
+        Assertions.assertThrows(IllegalStateException.class, () -> QuaternionRotation.of(Quaternion.of(0, 0, 0, 0)));
+        Assertions.assertThrows(IllegalStateException.class, () -> QuaternionRotation.of(Quaternion.of(1, 1, 1, Double.NaN)));
+        Assertions.assertThrows(IllegalStateException.class, () -> QuaternionRotation.of(Quaternion.of(1, 1, Double.POSITIVE_INFINITY, 1)));
+        Assertions.assertThrows(IllegalStateException.class, () -> QuaternionRotation.of(Quaternion.of(1, Double.NEGATIVE_INFINITY, 1, 1)));
+        Assertions.assertThrows(IllegalStateException.class, () -> QuaternionRotation.of(Quaternion.of(Double.NaN, 1, 1, 1)));
     }
 
     @Test
@@ -99,11 +95,11 @@ public class QuaternionRotationTest {
     @Test
     public void testOf_components_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.of(0, 0, 0, 0), IllegalStateException.class);
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.of(1, 1, 1, Double.NaN), IllegalStateException.class);
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.of(1, 1, Double.POSITIVE_INFINITY, 1), IllegalStateException.class);
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.of(1, Double.NEGATIVE_INFINITY, 1, 1), IllegalStateException.class);
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.of(Double.NaN, 1, 1, 1), IllegalStateException.class);
+        Assertions.assertThrows(IllegalStateException.class, () -> QuaternionRotation.of(0, 0, 0, 0));
+        Assertions.assertThrows(IllegalStateException.class, () -> QuaternionRotation.of(1, 1, 1, Double.NaN));
+        Assertions.assertThrows(IllegalStateException.class, () -> QuaternionRotation.of(1, 1, Double.POSITIVE_INFINITY, 1));
+        Assertions.assertThrows(IllegalStateException.class, () -> QuaternionRotation.of(1, Double.NEGATIVE_INFINITY, 1, 1));
+        Assertions.assertThrows(IllegalStateException.class, () -> QuaternionRotation.of(Double.NaN, 1, 1, 1));
     }
 
     @Test
@@ -254,24 +250,21 @@ public class QuaternionRotationTest {
     @Test
     public void testFromAxisAngle_invalidAxisNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.fromAxisAngle(Vector3D.ZERO, PlaneAngleRadians.PI_OVER_TWO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.fromAxisAngle(Vector3D.NaN, PlaneAngleRadians.PI_OVER_TWO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.fromAxisAngle(Vector3D.POSITIVE_INFINITY, PlaneAngleRadians.PI_OVER_TWO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.fromAxisAngle(Vector3D.NEGATIVE_INFINITY, PlaneAngleRadians.PI_OVER_TWO),
-                IllegalArgumentException.class);
+
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.fromAxisAngle(Vector3D.ZERO, PlaneAngleRadians.PI_OVER_TWO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.fromAxisAngle(Vector3D.NaN, PlaneAngleRadians.PI_OVER_TWO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.fromAxisAngle(Vector3D.POSITIVE_INFINITY, PlaneAngleRadians.PI_OVER_TWO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.fromAxisAngle(Vector3D.NEGATIVE_INFINITY, PlaneAngleRadians.PI_OVER_TWO));
     }
 
     @Test
     public void testFromAxisAngle_invalidAngle() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.fromAxisAngle(Vector3D.Unit.PLUS_X, Double.NaN),
+        GeometryTestUtils.assertThrowsWithMessage(() -> QuaternionRotation.fromAxisAngle(Vector3D.Unit.PLUS_X, Double.NaN),
                 IllegalArgumentException.class, "Invalid angle: NaN");
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.fromAxisAngle(Vector3D.Unit.PLUS_X, Double.POSITIVE_INFINITY),
+        GeometryTestUtils.assertThrowsWithMessage(() -> QuaternionRotation.fromAxisAngle(Vector3D.Unit.PLUS_X, Double.POSITIVE_INFINITY),
                 IllegalArgumentException.class, "Invalid angle: Infinity");
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.fromAxisAngle(Vector3D.Unit.PLUS_X, Double.NEGATIVE_INFINITY),
+        GeometryTestUtils.assertThrowsWithMessage(() -> QuaternionRotation.fromAxisAngle(Vector3D.Unit.PLUS_X, Double.NEGATIVE_INFINITY),
                 IllegalArgumentException.class, "Invalid angle: -Infinity");
     }
 
@@ -977,8 +970,8 @@ public class QuaternionRotationTest {
         final QuaternionRotation q = QuaternionRotation.identity();
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> q.toAxisAngleSequence(null, AxisSequence.XYZ), IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> q.toAxisAngleSequence(AxisReferenceFrame.ABSOLUTE, null), IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> q.toAxisAngleSequence(null, AxisSequence.XYZ));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> q.toAxisAngleSequence(AxisReferenceFrame.ABSOLUTE, null));
     }
 
     @Test
@@ -1159,17 +1152,11 @@ public class QuaternionRotationTest {
     @Test
     public void testCreateVectorRotation_invalidArgs() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.createVectorRotation(Vector3D.ZERO, Vector3D.Unit.PLUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.createVectorRotation(Vector3D.Unit.PLUS_X, Vector3D.ZERO),
-                IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.createVectorRotation(Vector3D.NaN, Vector3D.Unit.PLUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.createVectorRotation(Vector3D.Unit.PLUS_X, Vector3D.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.createVectorRotation(Vector3D.Unit.PLUS_X, Vector3D.NEGATIVE_INFINITY),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.createVectorRotation(Vector3D.ZERO, Vector3D.Unit.PLUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.createVectorRotation(Vector3D.Unit.PLUS_X, Vector3D.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.createVectorRotation(Vector3D.NaN, Vector3D.Unit.PLUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.createVectorRotation(Vector3D.Unit.PLUS_X, Vector3D.POSITIVE_INFINITY));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.createVectorRotation(Vector3D.Unit.PLUS_X, Vector3D.NEGATIVE_INFINITY));
     }
 
     @Test
@@ -1343,26 +1330,18 @@ public class QuaternionRotationTest {
     @Test
     public void testCreateBasisRotation_invalidArgs() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.createBasisRotation(
-                Vector3D.ZERO, Vector3D.Unit.PLUS_Y, Vector3D.Unit.PLUS_Y, Vector3D.Unit.MINUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.createBasisRotation(
-                Vector3D.Unit.PLUS_X, Vector3D.NaN, Vector3D.Unit.PLUS_Y, Vector3D.Unit.MINUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.createBasisRotation(
-                Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_Y, Vector3D.POSITIVE_INFINITY, Vector3D.Unit.MINUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.createBasisRotation(
-                Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_Y, Vector3D.Unit.PLUS_Y, Vector3D.NEGATIVE_INFINITY),
-                IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.createBasisRotation(
-                Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_Y, Vector3D.Unit.MINUS_X),
-                IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> QuaternionRotation.createBasisRotation(
-                Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_Y, Vector3D.Unit.PLUS_Y, Vector3D.Unit.MINUS_Y),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.createBasisRotation(
+                Vector3D.ZERO, Vector3D.Unit.PLUS_Y, Vector3D.Unit.PLUS_Y, Vector3D.Unit.MINUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.createBasisRotation(
+                Vector3D.Unit.PLUS_X, Vector3D.NaN, Vector3D.Unit.PLUS_Y, Vector3D.Unit.MINUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.createBasisRotation(
+                Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_Y, Vector3D.POSITIVE_INFINITY, Vector3D.Unit.MINUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.createBasisRotation(
+                Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_Y, Vector3D.Unit.PLUS_Y, Vector3D.NEGATIVE_INFINITY));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.createBasisRotation(
+                Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_Y, Vector3D.Unit.MINUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> QuaternionRotation.createBasisRotation(
+                Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_Y, Vector3D.Unit.PLUS_Y, Vector3D.Unit.MINUS_Y));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/ParallelepipedTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/ParallelepipedTest.java
index a7be6da..47545fd 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/ParallelepipedTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/ParallelepipedTest.java
@@ -22,7 +22,6 @@ import java.util.List;
 import java.util.Set;
 import java.util.TreeSet;
 
-import org.apache.commons.geometry.core.GeometryTestUtils;
 import org.apache.commons.geometry.core.precision.DoublePrecisionContext;
 import org.apache.commons.geometry.core.precision.EpsilonDoublePrecisionContext;
 import org.apache.commons.geometry.euclidean.EuclideanTestUtils;
@@ -35,6 +34,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class ParallelepipedTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -146,20 +146,12 @@ public class ParallelepipedTest {
     @Test
     public void testFromTransformedUnitCube_zeroSizeRegion() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Parallelepiped.fromTransformedUnitCube(AffineTransformMatrix3D.createScale(Vector3D.of(1e-16, 1, 1)),
-                    TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Parallelepiped.fromTransformedUnitCube(AffineTransformMatrix3D.createScale(Vector3D.of(1, 1e-16, 1)),
-                    TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Parallelepiped.fromTransformedUnitCube(AffineTransformMatrix3D.createScale(Vector3D.of(1, 1, 1e-16)),
-                    TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Parallelepiped.fromTransformedUnitCube(AffineTransformMatrix3D.createScale(Vector3D.of(1e-16, 1, 1)),
+                TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Parallelepiped.fromTransformedUnitCube(AffineTransformMatrix3D.createScale(Vector3D.of(1, 1e-16, 1)),
+                TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Parallelepiped.fromTransformedUnitCube(AffineTransformMatrix3D.createScale(Vector3D.of(1, 1, 1e-16)),
+                TEST_PRECISION));
     }
 
     @Test
@@ -209,17 +201,9 @@ public class ParallelepipedTest {
     @Test
     public void testAxisAligned_illegalArgs() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Parallelepiped.axisAligned(Vector3D.of(1, 2, 3), Vector3D.of(1, 5, 6), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Parallelepiped.axisAligned(Vector3D.of(1, 2, 3), Vector3D.of(4, 2, 6), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Parallelepiped.axisAligned(Vector3D.of(1, 2, 3), Vector3D.of(1, 5, 3), TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Parallelepiped.axisAligned(Vector3D.of(1, 2, 3), Vector3D.of(1, 5, 6), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Parallelepiped.axisAligned(Vector3D.of(1, 2, 3), Vector3D.of(4, 2, 6), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Parallelepiped.axisAligned(Vector3D.of(1, 2, 3), Vector3D.of(1, 5, 3), TEST_PRECISION));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/SphereTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/SphereTest.java
index f093cad..0108da0 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/SphereTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/threed/shape/SphereTest.java
@@ -44,6 +44,7 @@ import org.apache.commons.rng.simple.RandomSource;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class SphereTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -74,12 +75,8 @@ public class SphereTest {
     @Test
     public void testFrom_illegalCenter() {
         // act/assert
-        GeometryTestUtils.assertThrows(
-            () -> Sphere.from(Vector3D.of(Double.POSITIVE_INFINITY, 1, 2), 1, TEST_PRECISION),
-            IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(
-            () -> Sphere.from(Vector3D.of(Double.NaN, 1, 2), 1, TEST_PRECISION),
-            IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Sphere.from(Vector3D.of(Double.POSITIVE_INFINITY, 1, 2), 1, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Sphere.from(Vector3D.of(Double.NaN, 1, 2), 1, TEST_PRECISION));
     }
 
     @Test
@@ -88,17 +85,11 @@ public class SphereTest {
         final DoublePrecisionContext precision = new EpsilonDoublePrecisionContext(1e-2);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Sphere.from(Vector3D.ZERO, -1, TEST_PRECISION),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Sphere.from(Vector3D.ZERO, 0, TEST_PRECISION),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Sphere.from(Vector3D.ZERO, Double.POSITIVE_INFINITY, TEST_PRECISION),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Sphere.from(Vector3D.ZERO, Double.NaN, TEST_PRECISION),
-                IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> Sphere.from(Vector3D.ZERO, 1e-3, precision),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Sphere.from(Vector3D.ZERO, -1, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Sphere.from(Vector3D.ZERO, 0, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Sphere.from(Vector3D.ZERO, Double.POSITIVE_INFINITY, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Sphere.from(Vector3D.ZERO, Double.NaN, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Sphere.from(Vector3D.ZERO, 1e-3, precision));
     }
 
     @Test
@@ -428,7 +419,7 @@ public class SphereTest {
         final Sphere s = Sphere.from(Vector3D.ZERO, 1, precision);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             s.toTree(6);
         }, IllegalStateException.class,
                 Pattern.compile("^Failed to construct sphere approximation with subdivision count 6:.*"));
@@ -440,7 +431,7 @@ public class SphereTest {
         final Sphere s = Sphere.from(Vector3D.of(2, 1, 3), 2, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             s.toTree(-1);
         }, IllegalArgumentException.class,
                 "Number of sphere approximation subdivisions must be greater than or equal to zero; was -1");
@@ -501,7 +492,7 @@ public class SphereTest {
         final Sphere s = Sphere.from(Vector3D.of(2, 1, 3), 2, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             s.toTriangleMesh(-1);
         }, IllegalArgumentException.class,
                 "Number of sphere approximation subdivisions must be greater than or equal to zero; was -1");
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/AffineTransformMatrix2DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/AffineTransformMatrix2DTest.java
index 4cc9fc6..e17ee8f 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/AffineTransformMatrix2DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/AffineTransformMatrix2DTest.java
@@ -27,6 +27,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class AffineTransformMatrix2DTest {
 
     private static final double EPS = 1e-12;
@@ -54,7 +55,7 @@ public class AffineTransformMatrix2DTest {
     @Test
     public void testOf_invalidDimensions() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> AffineTransformMatrix2D.of(1, 2),
+        GeometryTestUtils.assertThrowsWithMessage(() -> AffineTransformMatrix2D.of(1, 2),
                 IllegalArgumentException.class, "Dimension mismatch: 2 != 6");
     }
 
@@ -128,9 +129,7 @@ public class AffineTransformMatrix2DTest {
     @Test
     public void testFrom_invalidFunction() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            AffineTransformMatrix2D.from(v -> v.multiply(0));
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AffineTransformMatrix2D.from(v -> v.multiply(0)));
     }
 
     @Test
@@ -719,10 +718,8 @@ public class AffineTransformMatrix2DTest {
     @Test
     public void testApplyDirection_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> AffineTransformMatrix2D.createScale(1, 0).applyDirection(Vector2D.Unit.PLUS_Y),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> AffineTransformMatrix2D.createScale(2).applyDirection(Vector2D.ZERO),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AffineTransformMatrix2D.createScale(1, 0).applyDirection(Vector2D.Unit.PLUS_Y));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AffineTransformMatrix2D.createScale(2).applyDirection(Vector2D.ZERO));
     }
 
     @Test
@@ -1002,43 +999,43 @@ public class AffineTransformMatrix2DTest {
     @Test
     public void testInverse_nonInvertible() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix2D.of(
                     0, 0, 0,
                     0, 0, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is 0.0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix2D.of(
                     1, 0, 0,
                     0, Double.NaN, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix2D.of(
                     1, 0, 0,
                     0, Double.NEGATIVE_INFINITY, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is -Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix2D.of(
                     Double.POSITIVE_INFINITY, 0, 0,
                     0, 1, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; matrix determinant is Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix2D.of(
                     1, 0, Double.NaN,
                     0, 1, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; invalid matrix element: NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix2D.of(
                     1, 0, Double.POSITIVE_INFINITY,
                     0, 1, 0).inverse();
         }, IllegalStateException.class, "Matrix is not invertible; invalid matrix element: Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             AffineTransformMatrix2D.of(
                     1, 0, Double.NEGATIVE_INFINITY,
                     0, 1, 0).inverse();
@@ -1130,9 +1127,7 @@ public class AffineTransformMatrix2DTest {
     @Test
     public void testNormalTransform_nonInvertible() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            AffineTransformMatrix2D.createScale(0).normalTransform();
-        }, IllegalStateException.class);
+        Assertions.assertThrows(IllegalStateException.class, () -> AffineTransformMatrix2D.createScale(0).normalTransform());
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Bounds2DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Bounds2DTest.java
index 4695dcc..b36ac2f 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Bounds2DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Bounds2DTest.java
@@ -31,6 +31,7 @@ import org.apache.commons.geometry.euclidean.twod.shape.Parallelogram;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class Bounds2DTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -110,7 +111,7 @@ public class Bounds2DTest {
     @Test
     public void testFrom_iterable_noPoints() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Bounds2D.from(new ArrayList<>());
         }, IllegalStateException.class, NO_POINTS_MESSAGE);
     }
@@ -125,27 +126,27 @@ public class Bounds2DTest {
         final Vector2D negInf = Vector2D.of(1, Double.NEGATIVE_INFINITY);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Bounds2D.from(Vector2D.NaN);
         }, IllegalStateException.class, INVALID_BOUNDS_PATTERN);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Bounds2D.from(Vector2D.POSITIVE_INFINITY);
         }, IllegalStateException.class, INVALID_BOUNDS_PATTERN);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Bounds2D.from(Vector2D.NEGATIVE_INFINITY);
         }, IllegalStateException.class, INVALID_BOUNDS_PATTERN);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Bounds2D.from(good, nan);
         }, IllegalStateException.class, INVALID_BOUNDS_PATTERN);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Bounds2D.from(posInf, good);
         }, IllegalStateException.class, INVALID_BOUNDS_PATTERN);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Bounds2D.from(good, negInf, good);
         }, IllegalStateException.class, INVALID_BOUNDS_PATTERN);
     }
@@ -353,10 +354,7 @@ public class Bounds2DTest {
     @Test
     public void toRegion_boundingBoxTooSmall() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Bounds2D.from(Vector2D.ZERO, Vector2D.of(1e-12, 1e-12))
-                .toRegion(TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Bounds2D.from(Vector2D.ZERO, Vector2D.of(1e-12, 1e-12)).toRegion(TEST_PRECISION));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/ConvexAreaTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/ConvexAreaTest.java
index 2806eb1..634c60c 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/ConvexAreaTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/ConvexAreaTest.java
@@ -35,6 +35,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class ConvexAreaTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -864,28 +865,28 @@ public class ConvexAreaTest {
                 Pattern.compile("Unable to create line path; only a single unique vertex provided.*");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             ConvexArea.convexPolygonFromVertices(Collections.emptyList(), precision);
         }, IllegalArgumentException.class, unclosedPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             ConvexArea.convexPolygonFromVertices(Collections.singletonList(Vector2D.ZERO), precision);
         }, IllegalStateException.class, singleVertexPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             ConvexArea.convexPolygonFromVertices(Arrays.asList(Vector2D.ZERO, Vector2D.of(1e-4, 1e-4)), precision);
         }, IllegalStateException.class, singleVertexPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             ConvexArea.convexPolygonFromVertices(Arrays.asList(Vector2D.ZERO, Vector2D.Unit.PLUS_X), precision);
         }, IllegalArgumentException.class, notEnoughElementsPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             ConvexArea.convexPolygonFromVertices(
                     Arrays.asList(Vector2D.ZERO, Vector2D.Unit.PLUS_X, Vector2D.of(1, 1e-4)), precision);
         }, IllegalArgumentException.class, notEnoughElementsPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             ConvexArea.convexPolygonFromVertices(
                     Arrays.asList(Vector2D.ZERO, Vector2D.Unit.PLUS_X, Vector2D.of(1, -1)), precision);
         }, IllegalArgumentException.class, nonConvexPattern);
@@ -1002,19 +1003,19 @@ public class ConvexAreaTest {
         final Pattern msgPattern = Pattern.compile("Cannot construct convex polygon from non-convex path.*");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             ConvexArea.convexPolygonFromVertices(Arrays.asList(
                         Vector2D.ZERO, Vector2D.of(1, 0), Vector2D.of(2, 0)
                     ), TEST_PRECISION);
         }, IllegalArgumentException.class, msgPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             ConvexArea.convexPolygonFromVertices(Arrays.asList(
                         Vector2D.ZERO, Vector2D.of(1, 0), Vector2D.of(1, -1)
                     ), TEST_PRECISION);
         }, IllegalArgumentException.class, msgPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             ConvexArea.convexPolygonFromVertices(
                     Arrays.asList(
                             Vector2D.ZERO,
@@ -1024,7 +1025,7 @@ public class ConvexAreaTest {
                     ), TEST_PRECISION);
         }, IllegalArgumentException.class, msgPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             ConvexArea.convexPolygonFromVertices(Arrays.asList(
                         Vector2D.ZERO, Vector2D.of(2, 0),
                         Vector2D.of(2, 2), Vector2D.of(1, 1),
@@ -1042,21 +1043,21 @@ public class ConvexAreaTest {
         final Pattern nonConvexPattern = Pattern.compile("Cannot construct convex polygon from non-convex path.*");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             ConvexArea.convexPolygonFromPath(LinePath.empty());
         }, IllegalArgumentException.class, unclosedPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             ConvexArea.convexPolygonFromPath(LinePath.fromVertices(
                     Arrays.asList(Vector2D.ZERO, Vector2D.Unit.PLUS_X), TEST_PRECISION));
         }, IllegalArgumentException.class, unclosedPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             ConvexArea.convexPolygonFromPath(LinePath.fromVertices(
                     Arrays.asList(Vector2D.ZERO, Vector2D.Unit.PLUS_X, Vector2D.ZERO), TEST_PRECISION));
         }, IllegalArgumentException.class, notEnoughElementsPattern);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             ConvexArea.convexPolygonFromPath(LinePath.fromVertexLoop(
                     Arrays.asList(
                             Vector2D.ZERO,
@@ -1280,21 +1281,17 @@ public class ConvexAreaTest {
         final Line c = Lines.fromPointAndAngle(Vector2D.of(0, 1), 0.0, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            ConvexArea.fromBounds(a, b, c);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> ConvexArea.fromBounds(a, b, c));
     }
 
     @Test
     public void testFromBounds_boundsDoNotProduceAConvexRegion() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            ConvexArea.fromBounds(Arrays.asList(
-                        Lines.fromPointAndAngle(Vector2D.ZERO, 0.0, TEST_PRECISION),
-                        Lines.fromPointAndAngle(Vector2D.of(0, -1), PlaneAngleRadians.PI, TEST_PRECISION),
-                        Lines.fromPointAndAngle(Vector2D.ZERO, PlaneAngleRadians.PI_OVER_TWO, TEST_PRECISION)
-                    ));
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> ConvexArea.fromBounds(Arrays.asList(
+                Lines.fromPointAndAngle(Vector2D.ZERO, 0.0, TEST_PRECISION),
+                Lines.fromPointAndAngle(Vector2D.of(0, -1), PlaneAngleRadians.PI, TEST_PRECISION),
+                Lines.fromPointAndAngle(Vector2D.ZERO, PlaneAngleRadians.PI_OVER_TWO, TEST_PRECISION)
+        )));
     }
 
     private static List<Line> createSquareBoundingLines(final Vector2D lowerLeft, final double width, final double height) {
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/EmbeddedTreeLineSubsetTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/EmbeddedTreeLineSubsetTest.java
index ebc386c..cdf5704 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/EmbeddedTreeLineSubsetTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/EmbeddedTreeLineSubsetTest.java
@@ -30,6 +30,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class EmbeddedTreeLineSubsetTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -229,13 +230,8 @@ public class EmbeddedTreeLineSubsetTest {
         final EmbeddedTreeLineSubset subset = new EmbeddedTreeLineSubset(line);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            subset.add(Lines.subsetFromInterval(otherLine, 0, 1));
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            subset.add(new EmbeddedTreeLineSubset(otherLine));
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> subset.add(Lines.subsetFromInterval(otherLine, 0, 1)));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> subset.add(new EmbeddedTreeLineSubset(otherLine)));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/LineConvexSubsetTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/LineConvexSubsetTest.java
index f982972..cdcb3a7 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/LineConvexSubsetTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/LineConvexSubsetTest.java
@@ -200,27 +200,27 @@ public class LineConvexSubsetTest {
         final Line line = Lines.fromPointAndAngle(Vector2D.ZERO, 0, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.subsetFromInterval(line, 0, Double.NaN);
         }, IllegalArgumentException.class, "Invalid line subset interval: 0.0, NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.subsetFromInterval(line, Double.NaN, 0.0);
         }, IllegalArgumentException.class, "Invalid line subset interval: NaN, 0.0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.subsetFromInterval(line, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid line subset interval: Infinity, Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.subsetFromInterval(line, Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid line subset interval: -Infinity, -Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.subsetFromInterval(line, Double.POSITIVE_INFINITY, Double.NaN);
         }, IllegalArgumentException.class, "Invalid line subset interval: Infinity, NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.subsetFromInterval(line, Double.NaN, Double.NEGATIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid line subset interval: NaN, -Infinity");
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/LineTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/LineTest.java
index 4e5a75c..4272042 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/LineTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/LineTest.java
@@ -55,9 +55,9 @@ public class LineTest {
     @Test
     public void testFromPoints_pointsTooClose() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Lines.fromPoints(Vector2D.Unit.PLUS_X, Vector2D.Unit.PLUS_X, TEST_PRECISION),
+        GeometryTestUtils.assertThrowsWithMessage(() -> Lines.fromPoints(Vector2D.Unit.PLUS_X, Vector2D.Unit.PLUS_X, TEST_PRECISION),
                 IllegalArgumentException.class, "Line direction cannot be zero");
-        GeometryTestUtils.assertThrows(() -> Lines.fromPoints(Vector2D.Unit.PLUS_X, Vector2D.of(1 + 1e-11, 1e-11), TEST_PRECISION),
+        GeometryTestUtils.assertThrowsWithMessage(() -> Lines.fromPoints(Vector2D.Unit.PLUS_X, Vector2D.of(1 + 1e-11, 1e-11), TEST_PRECISION),
                 IllegalArgumentException.class, "Line direction cannot be zero");
     }
 
@@ -80,9 +80,9 @@ public class LineTest {
     @Test
     public void testFromPointAndDirection_directionIsZero() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Lines.fromPointAndDirection(Vector2D.Unit.PLUS_X, Vector2D.ZERO, TEST_PRECISION),
+        GeometryTestUtils.assertThrowsWithMessage(() -> Lines.fromPointAndDirection(Vector2D.Unit.PLUS_X, Vector2D.ZERO, TEST_PRECISION),
                 IllegalArgumentException.class, "Line direction cannot be zero");
-        GeometryTestUtils.assertThrows(() -> Lines.fromPointAndDirection(Vector2D.Unit.PLUS_X, Vector2D.of(1e-11, -1e-12), TEST_PRECISION),
+        GeometryTestUtils.assertThrowsWithMessage(() -> Lines.fromPointAndDirection(Vector2D.Unit.PLUS_X, Vector2D.of(1e-11, -1e-12), TEST_PRECISION),
                 IllegalArgumentException.class, "Line direction cannot be zero");
     }
 
@@ -1064,7 +1064,7 @@ public class LineTest {
         final Line line = Lines.fromPointAndDirection(Vector2D.ZERO, Vector2D.Unit.PLUS_X, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             line.transform(scaleCollapse);
         }, IllegalArgumentException.class, "Line direction cannot be zero");
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/PolarCoordinatesTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/PolarCoordinatesTest.java
index 985515d..a5e9be9 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/PolarCoordinatesTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/PolarCoordinatesTest.java
@@ -23,7 +23,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class PolarCoordinatesTest {
 
@@ -351,7 +350,7 @@ public class PolarCoordinatesTest {
     @Test
     public void testParse_failure() {
         // act/assert
-        assertThrows(IllegalArgumentException.class, () -> PolarCoordinates.parse("abc"));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> PolarCoordinates.parse("abc"));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/RayTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/RayTest.java
index efe209c..da33dd6 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/RayTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/RayTest.java
@@ -69,7 +69,7 @@ public class RayTest {
         final Vector2D d = Vector2D.of(1e-17, -1e-12);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.rayFromPointAndDirection(p, d, TEST_PRECISION);
         }, IllegalArgumentException.class, "Line direction cannot be zero");
     }
@@ -113,15 +113,15 @@ public class RayTest {
         final Line line = Lines.fromPointAndDirection(p, d, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.rayFromPoint(line, Vector2D.NaN);
         }, IllegalArgumentException.class, "Invalid ray start point: (NaN, NaN)");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.rayFromPoint(line, Vector2D.POSITIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid ray start point: (Infinity, Infinity)");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.rayFromPoint(line, Vector2D.NEGATIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid ray start point: (-Infinity, -Infinity)");
     }
@@ -164,15 +164,15 @@ public class RayTest {
         final Line line = Lines.fromPointAndDirection(p, d, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.rayFromLocation(line, Double.NaN);
         }, IllegalArgumentException.class, "Invalid ray start location: NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.rayFromLocation(line, Double.POSITIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid ray start location: Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.rayFromLocation(line, Double.NEGATIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid ray start location: -Infinity");
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/RegionBSPTree2DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/RegionBSPTree2DTest.java
index 70d8ae1..341476f 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/RegionBSPTree2DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/RegionBSPTree2DTest.java
@@ -40,6 +40,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class RegionBSPTree2DTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -244,19 +245,19 @@ public class RegionBSPTree2DTest {
         final String msg = "Cannot insert partitions after boundaries have been inserted";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.insertPartition(partition);
         }, IllegalStateException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.insertPartition(partition.span());
         }, IllegalStateException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.insertAxisAlignedPartitions(Vector2D.ZERO, TEST_PRECISION);
         }, IllegalStateException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.insertAxisAlignedGrid(Bounds2D.from(Vector2D.ZERO, Vector2D.of(1, 1)), 1, TEST_PRECISION);
         }, IllegalStateException.class, msg);
     }
@@ -388,9 +389,7 @@ public class RegionBSPTree2DTest {
         tree.insert(Lines.segmentFromPoints(Vector2D.ZERO, Vector2D.Unit.PLUS_X, TEST_PRECISION));
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            tree.getBoundaryPaths().add(LinePath.builder(null).build());
-        }, UnsupportedOperationException.class);
+        Assertions.assertThrows(UnsupportedOperationException.class, () -> tree.getBoundaryPaths().add(LinePath.builder(null).build()));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/ReverseRayTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/ReverseRayTest.java
index 48c6f52..c3c0994 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/ReverseRayTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/ReverseRayTest.java
@@ -67,7 +67,7 @@ public class ReverseRayTest {
         final Vector2D d = Vector2D.of(1e-17, -1e-12);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.reverseRayFromPointAndDirection(p, d, TEST_PRECISION);
         }, IllegalArgumentException.class, "Line direction cannot be zero");
     }
@@ -109,15 +109,15 @@ public class ReverseRayTest {
         final Line line = Lines.fromPointAndDirection(p, d, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.reverseRayFromPoint(line, Vector2D.NaN);
         }, IllegalArgumentException.class, "Invalid reverse ray end point: (NaN, NaN)");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.reverseRayFromPoint(line, Vector2D.POSITIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid reverse ray end point: (Infinity, Infinity)");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.reverseRayFromPoint(line, Vector2D.NEGATIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid reverse ray end point: (-Infinity, -Infinity)");
     }
@@ -158,15 +158,15 @@ public class ReverseRayTest {
         final Line line = Lines.fromPointAndDirection(p, d, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.reverseRayFromLocation(line, Double.NaN);
         }, IllegalArgumentException.class, "Invalid reverse ray end location: NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.reverseRayFromLocation(line, Double.POSITIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid reverse ray end location: Infinity");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.reverseRayFromLocation(line, Double.NEGATIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid reverse ray end location: -Infinity");
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/SegmentTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/SegmentTest.java
index 90ae6be..424541c 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/SegmentTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/SegmentTest.java
@@ -66,11 +66,11 @@ public class SegmentTest {
         final Vector2D p2 = Vector2D.of(1e-17, 2);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.segmentFromPoints(p1, p1, TEST_PRECISION);
         }, IllegalArgumentException.class, "Line direction cannot be zero");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.segmentFromPoints(p1, p2, TEST_PRECISION);
         }, IllegalArgumentException.class, "Line direction cannot be zero");
     }
@@ -137,19 +137,19 @@ public class SegmentTest {
         final Line line = Lines.fromPointAndAngle(Vector2D.ZERO, 0, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.segmentFromPoints(line, Vector2D.NaN, p1);
         }, IllegalArgumentException.class, "Invalid line segment locations: NaN, 2.0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.segmentFromPoints(line, p0, Vector2D.NaN);
         }, IllegalArgumentException.class, "Invalid line segment locations: 1.0, NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.segmentFromPoints(line, Vector2D.NEGATIVE_INFINITY, p1);
         }, IllegalArgumentException.class, "Invalid line segment locations: NaN, 2.0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.segmentFromPoints(line, p0, Vector2D.POSITIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid line segment locations: 1.0, NaN");
     }
@@ -232,19 +232,19 @@ public class SegmentTest {
         final Line line = Lines.fromPointAndAngle(Vector2D.ZERO, 0, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.segmentFromLocations(line, Double.NaN, 2);
         }, IllegalArgumentException.class, "Invalid line segment locations: NaN, 2.0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.segmentFromLocations(line, 1, Double.NaN);
         }, IllegalArgumentException.class, "Invalid line segment locations: 1.0, NaN");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.segmentFromLocations(line, Double.NEGATIVE_INFINITY, 2);
         }, IllegalArgumentException.class, "Invalid line segment locations: -Infinity, 2.0");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Lines.segmentFromLocations(line, 1, Double.POSITIVE_INFINITY);
         }, IllegalArgumentException.class, "Invalid line segment locations: 1.0, Infinity");
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Vector2DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Vector2DTest.java
index 5f3b500..4231fec 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Vector2DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/Vector2DTest.java
@@ -31,7 +31,6 @@ import org.apache.commons.numbers.core.Precision;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class Vector2DTest {
 
@@ -53,10 +52,10 @@ public class Vector2DTest {
     @Test
     public void testConstants_normalize() {
         // act/assert
-        GeometryTestUtils.assertThrows(Vector2D.ZERO::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector2D.NaN::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector2D.POSITIVE_INFINITY::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector2D.NEGATIVE_INFINITY::normalize, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector2D.ZERO::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector2D.NaN::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector2D.POSITIVE_INFINITY::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector2D.NEGATIVE_INFINITY::normalize);
 
         Assertions.assertSame(Vector2D.Unit.PLUS_X, Vector2D.Unit.PLUS_X.normalize());
         Assertions.assertSame(Vector2D.Unit.MINUS_X, Vector2D.Unit.MINUS_X.normalize());
@@ -228,14 +227,10 @@ public class Vector2DTest {
     @Test
     public void testWithNorm_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Vector2D.ZERO.withNorm(2.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.NaN.withNorm(2.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.POSITIVE_INFINITY.withNorm(2.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.NEGATIVE_INFINITY.withNorm(2.0),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.ZERO.withNorm(2.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.NaN.withNorm(2.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.POSITIVE_INFINITY.withNorm(2.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.NEGATIVE_INFINITY.withNorm(2.0));
     }
 
     @Test
@@ -334,10 +329,10 @@ public class Vector2DTest {
     @Test
     public void testNormalize_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(Vector2D.ZERO::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector2D.NaN::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector2D.POSITIVE_INFINITY::normalize, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector2D.NEGATIVE_INFINITY::normalize, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector2D.ZERO::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector2D.NaN::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector2D.POSITIVE_INFINITY::normalize);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector2D.NEGATIVE_INFINITY::normalize);
     }
 
     @Test
@@ -479,10 +474,10 @@ public class Vector2DTest {
     @Test
     public void testOrthogonal_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(Vector2D.ZERO::orthogonal, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector2D.NaN::orthogonal, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector2D.POSITIVE_INFINITY::orthogonal, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(Vector2D.NEGATIVE_INFINITY::orthogonal, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector2D.ZERO::orthogonal);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector2D.NaN::orthogonal);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector2D.POSITIVE_INFINITY::orthogonal);
+        Assertions.assertThrows(IllegalArgumentException.class, Vector2D.NEGATIVE_INFINITY::orthogonal);
     }
 
     @Test
@@ -501,36 +496,23 @@ public class Vector2DTest {
     @Test
     public void testOrthogonal_givenDirection_illegalNorm() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Vector2D.ZERO.orthogonal(Vector2D.Unit.PLUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.NaN.orthogonal(Vector2D.Unit.PLUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.POSITIVE_INFINITY.orthogonal(Vector2D.Unit.PLUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.NEGATIVE_INFINITY.orthogonal(Vector2D.Unit.PLUS_X),
-                IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> Vector2D.Unit.PLUS_X.orthogonal(Vector2D.ZERO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.Unit.PLUS_X.orthogonal(Vector2D.NaN),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.Unit.PLUS_X.orthogonal(Vector2D.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.Unit.PLUS_X.orthogonal(Vector2D.NEGATIVE_INFINITY),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.ZERO.orthogonal(Vector2D.Unit.PLUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.NaN.orthogonal(Vector2D.Unit.PLUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.POSITIVE_INFINITY.orthogonal(Vector2D.Unit.PLUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.NEGATIVE_INFINITY.orthogonal(Vector2D.Unit.PLUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.Unit.PLUS_X.orthogonal(Vector2D.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.Unit.PLUS_X.orthogonal(Vector2D.NaN));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.Unit.PLUS_X.orthogonal(Vector2D.POSITIVE_INFINITY));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.Unit.PLUS_X.orthogonal(Vector2D.NEGATIVE_INFINITY));
     }
 
     @Test
     public void testOrthogonal_givenDirection_directionIsCollinear() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Vector2D.Unit.PLUS_X.orthogonal(Vector2D.Unit.PLUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.Unit.PLUS_X.orthogonal(Vector2D.Unit.MINUS_X),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.of(1.0, 1.0).orthogonal(Vector2D.of(2.0, 2.0)),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.of(-1.01, -1.01).orthogonal(Vector2D.of(20.1, 20.1)),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.Unit.PLUS_X.orthogonal(Vector2D.Unit.PLUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.Unit.PLUS_X.orthogonal(Vector2D.Unit.MINUS_X));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.of(1.0, 1.0).orthogonal(Vector2D.of(2.0, 2.0)));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.of(-1.01, -1.01).orthogonal(Vector2D.of(20.1, 20.1)));
     }
 
     @Test
@@ -555,23 +537,14 @@ public class Vector2DTest {
         final Vector2D v = Vector2D.of(1.0, 1.0);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Vector2D.ZERO.angle(v),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.NaN.angle(v),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.POSITIVE_INFINITY.angle(v),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.NEGATIVE_INFINITY.angle(v),
-                IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> v.angle(Vector2D.ZERO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.angle(Vector2D.NaN),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.angle(Vector2D.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.angle(Vector2D.NEGATIVE_INFINITY),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.ZERO.angle(v));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.NaN.angle(v));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.POSITIVE_INFINITY.angle(v));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.NEGATIVE_INFINITY.angle(v));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.angle(Vector2D.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.angle(Vector2D.NaN));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.angle(Vector2D.POSITIVE_INFINITY));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.angle(Vector2D.NEGATIVE_INFINITY));
     }
 
     @Test
@@ -644,14 +617,10 @@ public class Vector2DTest {
         final Vector2D v = Vector2D.of(1.0, 1.0);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> v.project(Vector2D.ZERO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.project(Vector2D.NaN),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.project(Vector2D.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.project(Vector2D.NEGATIVE_INFINITY),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.project(Vector2D.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.project(Vector2D.NaN));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.project(Vector2D.POSITIVE_INFINITY));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.project(Vector2D.NEGATIVE_INFINITY));
     }
 
     @Test
@@ -681,14 +650,10 @@ public class Vector2DTest {
         final Vector2D v = Vector2D.of(1.0, 1.0);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> v.reject(Vector2D.ZERO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.reject(Vector2D.NaN),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.reject(Vector2D.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> v.reject(Vector2D.NEGATIVE_INFINITY),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.reject(Vector2D.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.reject(Vector2D.NaN));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.reject(Vector2D.POSITIVE_INFINITY));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> v.reject(Vector2D.NEGATIVE_INFINITY));
     }
 
     @Test
@@ -775,16 +740,11 @@ public class Vector2DTest {
         final Vector2D p = Vector2D.of(1, 2);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Vector2D.ZERO.directionTo(Vector2D.ZERO),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> p.directionTo(p),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> p.directionTo(Vector2D.NaN),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.NEGATIVE_INFINITY.directionTo(p),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> p.directionTo(Vector2D.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.ZERO.directionTo(Vector2D.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> p.directionTo(p));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> p.directionTo(Vector2D.NaN));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.NEGATIVE_INFINITY.directionTo(p));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> p.directionTo(Vector2D.POSITIVE_INFINITY));
     }
 
     @Test
@@ -965,7 +925,7 @@ public class Vector2DTest {
     @Test
     public void testParse_failure() {
         // act/assert
-        assertThrows(IllegalArgumentException.class, () -> Vector2D.parse("abc"));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.parse("abc"));
     }
 
     @Test
@@ -989,7 +949,7 @@ public class Vector2DTest {
     @Test
     public void testOf_arrayArg_invalidDimensions() {
         // act/assert
-        assertThrows(IllegalArgumentException.class,     () -> Vector2D.of(new double[] {0.0}));
+        Assertions.assertThrows(IllegalArgumentException.class,     () -> Vector2D.of(new double[] {0.0}));
     }
 
     @Test
@@ -1016,14 +976,11 @@ public class Vector2DTest {
 
     @Test
     public void testUnitFrom_illegalNorm() {
-        GeometryTestUtils.assertThrows(() -> Vector2D.Unit.from(0.0, 0.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.Unit.from(Double.NaN, 1.0),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.Unit.from(1.0, Double.NEGATIVE_INFINITY),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Vector2D.Unit.from(1.0, Double.POSITIVE_INFINITY),
-                IllegalArgumentException.class);
+
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.Unit.from(0.0, 0.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.Unit.from(Double.NaN, 1.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.Unit.from(1.0, Double.NEGATIVE_INFINITY));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Vector2D.Unit.from(1.0, Double.POSITIVE_INFINITY));
     }
 
     @Test
@@ -1045,7 +1002,7 @@ public class Vector2DTest {
         final String msg = "Cannot compute vector max: no vectors given";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Vector2D.max(new ArrayList<>());
         }, IllegalArgumentException.class, msg);
     }
@@ -1069,7 +1026,7 @@ public class Vector2DTest {
         final String msg = "Cannot compute vector min: no vectors given";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Vector2D.min(new ArrayList<>());
         }, IllegalArgumentException.class, msg);
     }
@@ -1098,7 +1055,7 @@ public class Vector2DTest {
         final String msg = "Cannot compute centroid: no points given";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             Vector2D.centroid(new ArrayList<>());
         }, IllegalArgumentException.class, msg);
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/path/LinePathTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/path/LinePathTest.java
index a482a2a..a492dd3 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/path/LinePathTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/path/LinePathTest.java
@@ -43,6 +43,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class LinePathTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -282,17 +283,9 @@ public class LinePathTest {
         final LineConvexSubset d = Lines.fromPointAndAngle(Vector2D.of(1, 0), PlaneAngleRadians.PI_OVER_TWO, TEST_PRECISION).span();
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            LinePath.from(a, b);
-        }, IllegalStateException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            LinePath.from(c, b);
-        }, IllegalStateException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            LinePath.from(a, d);
-        }, IllegalStateException.class);
+        Assertions.assertThrows(IllegalStateException.class, () -> LinePath.from(a, b));
+        Assertions.assertThrows(IllegalStateException.class, () -> LinePath.from(c, b));
+        Assertions.assertThrows(IllegalStateException.class, () -> LinePath.from(a, d));
     }
 
     @Test
@@ -317,9 +310,7 @@ public class LinePathTest {
     @Test
     public void testFromVertices_singleVertex_failsToCreatePath() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            LinePath.fromVertices(Collections.singletonList(Vector2D.ZERO), TEST_PRECISION);
-        }, IllegalStateException.class);
+        Assertions.assertThrows(IllegalStateException.class, () -> LinePath.fromVertices(Collections.singletonList(Vector2D.ZERO), TEST_PRECISION));
     }
 
     @Test
@@ -428,9 +419,7 @@ public class LinePathTest {
     @Test
     public void testFromVertexLoop_singleVertex_failsToCreatePath() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            LinePath.fromVertexLoop(Collections.singletonList(Vector2D.ZERO), TEST_PRECISION);
-        }, IllegalStateException.class);
+        Assertions.assertThrows(IllegalStateException.class, () -> LinePath.fromVertexLoop(Collections.singletonList(Vector2D.ZERO), TEST_PRECISION));
     }
 
     @Test
@@ -526,9 +515,7 @@ public class LinePathTest {
         Assertions.assertNotSame(inputSegments, path.getElements());
         Assertions.assertEquals(1, path.getElements().size());
 
-        GeometryTestUtils.assertThrows(() -> {
-            path.getElements().add(a);
-        }, UnsupportedOperationException.class);
+        Assertions.assertThrows(UnsupportedOperationException.class, () -> path.getElements().add(a));
     }
 
     @Test
@@ -1052,13 +1039,8 @@ public class LinePathTest {
         builder.append(a);
 
         // act
-        GeometryTestUtils.assertThrows(() -> {
-            builder.append(a);
-        }, IllegalStateException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            builder.prepend(a);
-        }, IllegalStateException.class);
+        Assertions.assertThrows(IllegalStateException.class, () -> builder.append(a));
+        Assertions.assertThrows(IllegalStateException.class, () -> builder.prepend(a));
     }
 
     @Test
@@ -1098,11 +1080,11 @@ public class LinePathTest {
         final String msg = "Unable to create line segment: no vertex precision specified";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.append(p);
         }, IllegalStateException.class, msg);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             builder.prepend(p);
         }, IllegalStateException.class, msg);
     }
@@ -1116,13 +1098,8 @@ public class LinePathTest {
         builder.append(Lines.fromPointAndAngle(Vector2D.ZERO, 0.0, TEST_PRECISION).span());
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            builder.append(p);
-        }, IllegalStateException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            builder.prepend(p);
-        }, IllegalStateException.class);
+        Assertions.assertThrows(IllegalStateException.class, () -> builder.prepend(p));
+        Assertions.assertThrows(IllegalStateException.class, () -> builder.prepend(p));
     }
 
     @Test
@@ -1289,7 +1266,7 @@ public class LinePathTest {
             .append(Vector2D.of(1, 1));
 
         // act/assert
-        GeometryTestUtils.assertThrows(builder::close, IllegalStateException.class,
+        GeometryTestUtils.assertThrowsWithMessage(builder::close, IllegalStateException.class,
                 "Unable to close line path: line path is infinite");
     }
 
@@ -1305,7 +1282,7 @@ public class LinePathTest {
                 .rayFrom(0));
 
         // act/assert
-        GeometryTestUtils.assertThrows(builder::close, IllegalStateException.class,
+        GeometryTestUtils.assertThrowsWithMessage(builder::close, IllegalStateException.class,
                 "Unable to close line path: line path is infinite");
     }
 
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/rotation/Rotation2DTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/rotation/Rotation2DTest.java
index 060c522..84c34f4 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/rotation/Rotation2DTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/rotation/Rotation2DTest.java
@@ -32,6 +32,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class Rotation2DTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -177,33 +178,14 @@ public class Rotation2DTest {
         final Vector2D negInf = Vector2D.POSITIVE_INFINITY;
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Rotation2D.createVectorRotation(zero, vec);
-        }, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> {
-            Rotation2D.createVectorRotation(vec, zero);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Rotation2D.createVectorRotation(nan, vec);
-        }, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> {
-            Rotation2D.createVectorRotation(vec, nan);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Rotation2D.createVectorRotation(posInf, vec);
-        }, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> {
-            Rotation2D.createVectorRotation(vec, negInf);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Rotation2D.createVectorRotation(zero, nan);
-        }, IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> {
-            Rotation2D.createVectorRotation(negInf, posInf);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Rotation2D.createVectorRotation(zero, vec));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Rotation2D.createVectorRotation(vec, zero));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Rotation2D.createVectorRotation(nan, vec));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Rotation2D.createVectorRotation(vec, nan));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Rotation2D.createVectorRotation(posInf, vec));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Rotation2D.createVectorRotation(vec, negInf));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Rotation2D.createVectorRotation(zero, nan));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Rotation2D.createVectorRotation(negInf, posInf));
     }
 
     @Test
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/CircleTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/CircleTest.java
index 9cfe4c5..4b54709 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/CircleTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/CircleTest.java
@@ -37,6 +37,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class CircleTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -72,10 +73,8 @@ public class CircleTest {
     @Test
     public void testFrom_illegalCenter() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Circle.from(Vector2D.of(Double.POSITIVE_INFINITY, 1), 1, TEST_PRECISION),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Circle.from(Vector2D.of(Double.NaN, 1), 1, TEST_PRECISION),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Circle.from(Vector2D.of(Double.POSITIVE_INFINITY, 1), 1, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Circle.from(Vector2D.of(Double.NaN, 1), 1, TEST_PRECISION));
     }
 
     @Test
@@ -84,17 +83,11 @@ public class CircleTest {
         final DoublePrecisionContext precision = new EpsilonDoublePrecisionContext(1e-2);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> Circle.from(Vector2D.ZERO, -1, TEST_PRECISION),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Circle.from(Vector2D.ZERO, 0, TEST_PRECISION),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Circle.from(Vector2D.ZERO, Double.POSITIVE_INFINITY, TEST_PRECISION),
-                IllegalArgumentException.class);
-        GeometryTestUtils.assertThrows(() -> Circle.from(Vector2D.ZERO, Double.NaN, TEST_PRECISION),
-                IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> Circle.from(Vector2D.ZERO, 1e-3, precision),
-                IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Circle.from(Vector2D.ZERO, -1, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Circle.from(Vector2D.ZERO, 0, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Circle.from(Vector2D.ZERO, Double.POSITIVE_INFINITY, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Circle.from(Vector2D.ZERO, Double.NaN, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Circle.from(Vector2D.ZERO, 1e-3, precision));
     }
 
     @Test
@@ -382,10 +375,10 @@ public class CircleTest {
         final String baseMsg = "Circle approximation segment number must be greater than or equal to 3; was ";
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             c.toTree(2);
         }, IllegalArgumentException.class, baseMsg + "2");
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             c.toTree(-1);
         }, IllegalArgumentException.class, baseMsg + "-1");
     }
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/ParallelogramTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/ParallelogramTest.java
index fbc7c23..d151acd 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/ParallelogramTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/twod/shape/ParallelogramTest.java
@@ -18,7 +18,6 @@ package org.apache.commons.geometry.euclidean.twod.shape;
 
 import java.util.List;
 
-import org.apache.commons.geometry.core.GeometryTestUtils;
 import org.apache.commons.geometry.core.precision.DoublePrecisionContext;
 import org.apache.commons.geometry.core.precision.EpsilonDoublePrecisionContext;
 import org.apache.commons.geometry.euclidean.EuclideanTestUtils;
@@ -31,6 +30,7 @@ import org.apache.commons.geometry.euclidean.twod.rotation.Rotation2D;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class ParallelogramTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -111,15 +111,11 @@ public class ParallelogramTest {
     @Test
     public void testFromTransformedUnitSquare_zeroSizeRegion() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Parallelogram.fromTransformedUnitSquare(AffineTransformMatrix2D.createScale(Vector2D.of(1e-16, 1)),
-                    TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Parallelogram.fromTransformedUnitSquare(AffineTransformMatrix2D.createScale(Vector2D.of(1, 1e-16)),
-                    TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Parallelogram.fromTransformedUnitSquare(AffineTransformMatrix2D.createScale(Vector2D.of(1e-16, 1)),
+                TEST_PRECISION));
+
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Parallelogram.fromTransformedUnitSquare(AffineTransformMatrix2D.createScale(Vector2D.of(1, 1e-16)),
+                TEST_PRECISION));
     }
 
     @Test
@@ -161,17 +157,10 @@ public class ParallelogramTest {
     @Test
     public void testAxisAligned_illegalArgs() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Parallelogram.axisAligned(Vector2D.of(1, 1), Vector2D.of(1, 3), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Parallelogram.axisAligned(Vector2D.of(1, 1), Vector2D.of(3, 1), TEST_PRECISION);
-        }, IllegalArgumentException.class);
 
-        GeometryTestUtils.assertThrows(() -> {
-            Parallelogram.axisAligned(Vector2D.of(2, 3), Vector2D.of(2, 3), TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Parallelogram.axisAligned(Vector2D.of(1, 1), Vector2D.of(1, 3), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Parallelogram.axisAligned(Vector2D.of(1, 1), Vector2D.of(3, 1), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Parallelogram.axisAligned(Vector2D.of(2, 3), Vector2D.of(2, 3), TEST_PRECISION));
     }
 
     @Test
diff --git a/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/ModelIOHandlerRegistryTest.java b/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/ModelIOHandlerRegistryTest.java
index d687868..dcb8fd1 100644
--- a/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/ModelIOHandlerRegistryTest.java
+++ b/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/ModelIOHandlerRegistryTest.java
@@ -138,7 +138,7 @@ public class ModelIOHandlerRegistryTest {
         final File file = new File("file.B");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             registry.read(file, TEST_PRECISION);
         }, IllegalArgumentException.class, "No handler found for type \"b\"");
     }
@@ -149,7 +149,7 @@ public class ModelIOHandlerRegistryTest {
         final File file = new File("file");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             registry.read(file, TEST_PRECISION);
         }, IllegalArgumentException.class,
                 "Cannot determine target file type: \"file\" does not have a file extension");
@@ -176,7 +176,7 @@ public class ModelIOHandlerRegistryTest {
         final File file = new File("file");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             registry.read("nope", file, TEST_PRECISION);
         }, IllegalArgumentException.class, "No handler found for type \"nope\"");
     }
@@ -199,7 +199,7 @@ public class ModelIOHandlerRegistryTest {
     @Test
     public void testRead_typeAndInputStream_unknownType() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             registry.read("nope", new ByteArrayInputStream(new byte[0]), TEST_PRECISION);
         }, IllegalArgumentException.class, "No handler found for type \"nope\"");
     }
@@ -228,7 +228,7 @@ public class ModelIOHandlerRegistryTest {
         final File file = new File("file.B");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             registry.write(SRC_A, file);
         }, IllegalArgumentException.class, "No handler found for type \"b\"");
     }
@@ -239,7 +239,7 @@ public class ModelIOHandlerRegistryTest {
         final File file = new File("file");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             registry.write(SRC_A, file);
         }, IllegalArgumentException.class,
                 "Cannot determine target file type: \"file\" does not have a file extension");
@@ -269,7 +269,7 @@ public class ModelIOHandlerRegistryTest {
         final File file = new File("file");
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             registry.write(SRC_A, "nope", file);
         }, IllegalArgumentException.class, "No handler found for type \"nope\"");
     }
@@ -293,7 +293,7 @@ public class ModelIOHandlerRegistryTest {
     @Test
     public void testWrite_typeAndOutputStream_unknownType() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             registry.write(SRC_A, "nope", new ByteArrayOutputStream());
         }, IllegalArgumentException.class, "No handler found for type \"nope\"");
     }
diff --git a/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJModelIOHandlerTest.java b/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJModelIOHandlerTest.java
index 40020b1..5c2513e 100644
--- a/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJModelIOHandlerTest.java
+++ b/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJModelIOHandlerTest.java
@@ -86,7 +86,7 @@ public class OBJModelIOHandlerTest {
         final File file = cubeMinusSphereFile();
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             handler.read("stl", file, TEST_PRECISION);
         }, IllegalArgumentException.class, "File type is not supported by this handler: stl");
     }
@@ -123,7 +123,7 @@ public class OBJModelIOHandlerTest {
 
         // act/assert
         try (InputStream in = Files.newInputStream(file.toPath())) {
-            GeometryTestUtils.assertThrows(() -> {
+            GeometryTestUtils.assertThrowsWithMessage(() -> {
                 handler.read("stl", in, TEST_PRECISION);
             }, IllegalArgumentException.class, "File type is not supported by this handler: stl");
         }
@@ -132,7 +132,7 @@ public class OBJModelIOHandlerTest {
     @Test
     public void testRead_fromStream_ioException() throws Exception {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             handler.read("obj", new FailingInputStream(), TEST_PRECISION);
         }, UncheckedIOException.class, "IOException: test");
     }
@@ -164,7 +164,7 @@ public class OBJModelIOHandlerTest {
             );
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             handler.write(src, "stl", out);
         }, IllegalArgumentException.class, "File type is not supported by this handler: stl");
     }
@@ -212,7 +212,7 @@ public class OBJModelIOHandlerTest {
 
         // act/assert
         try (OutputStream out = Files.newOutputStream(file.toPath())) {
-            GeometryTestUtils.assertThrows(() -> {
+            GeometryTestUtils.assertThrowsWithMessage(() -> {
                 handler.write(src, "stl", out);
             }, IllegalArgumentException.class, "File type is not supported by this handler: stl");
         }
@@ -226,7 +226,7 @@ public class OBJModelIOHandlerTest {
             );
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             handler.write(src, "OBJ", new FailingOutputStream());
         }, UncheckedIOException.class, "IOException: test");
     }
diff --git a/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJReaderTest.java b/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJReaderTest.java
index 195d0ee..95fd42e 100644
--- a/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJReaderTest.java
+++ b/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJReaderTest.java
@@ -171,7 +171,7 @@ public class OBJReaderTest {
             }
         }, NumberFormatException.class);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             try {
                 reader.readTriangleMesh(new StringReader(notEnoughVertices), TEST_PRECISION);
             } catch (final IOException exc) {
@@ -204,7 +204,7 @@ public class OBJReaderTest {
             }
         }, NumberFormatException.class);
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             try {
                 reader.readTriangleMesh(new StringReader(notEnoughIndices), TEST_PRECISION);
             } catch (final IOException exc) {
diff --git a/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJWriterTest.java b/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJWriterTest.java
index 6c440c1..d3b86db 100644
--- a/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJWriterTest.java
+++ b/commons-geometry-examples/examples-io/src/test/java/org/apache/commons/geometry/examples/io/threed/obj/OBJWriterTest.java
@@ -208,7 +208,7 @@ public class OBJWriterTest {
         final StringWriter writer = new StringWriter();
 
         // act
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             try (OBJWriter meshWriter = new OBJWriter(writer)) {
                 meshWriter.writeFace(1, 2);
             } catch (final IOException exc) {
@@ -305,7 +305,7 @@ public class OBJWriterTest {
         final StringWriter writer = new StringWriter();
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             try (OBJWriter meshWriter = new OBJWriter(writer)) {
                 meshWriter.writeBoundaries(src);
             } catch (final IOException exc) {
diff --git a/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/ConvexHull2DTest.java b/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/ConvexHull2DTest.java
index 87950b0..937f25b 100644
--- a/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/ConvexHull2DTest.java
+++ b/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/ConvexHull2DTest.java
@@ -30,6 +30,7 @@ import org.apache.commons.geometry.euclidean.twod.path.LinePath;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class ConvexHull2DTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -159,9 +160,8 @@ public class ConvexHull2DTest {
 
         // assert
         Assertions.assertNotSame(vertices, hullVertices);
-        GeometryTestUtils.assertThrows(() -> {
-            hullVertices.add(Vector2D.Unit.PLUS_Y);
-        }, UnsupportedOperationException.class);
+
+        Assertions.assertThrows(UnsupportedOperationException.class, () -> hullVertices.add(Vector2D.Unit.PLUS_Y));
     }
 
     @Test
diff --git a/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/MonotoneChainTest.java b/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/MonotoneChainTest.java
index 3b10f81..a13c52d 100644
--- a/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/MonotoneChainTest.java
+++ b/commons-geometry-hull/src/test/java/org/apache/commons/geometry/hull/euclidean/twod/MonotoneChainTest.java
@@ -21,9 +21,9 @@ import java.util.Collection;
 
 import org.apache.commons.geometry.core.precision.EpsilonDoublePrecisionContext;
 import org.apache.commons.geometry.euclidean.twod.Vector2D;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * Test class for MonotoneChain.
@@ -52,6 +52,6 @@ public class MonotoneChainTest extends ConvexHullGenerator2DAbstractTest {
         points.add(Vector2D.of(40, 1));
 
         // act/assert
-        assertThrows(IllegalStateException.class, () ->  new MonotoneChain(true, new EpsilonDoublePrecisionContext(1)).generate(points));
+        Assertions.assertThrows(IllegalStateException.class, () ->  new MonotoneChain(true, new EpsilonDoublePrecisionContext(1)).generate(points));
     }
 }
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/AngularIntervalTest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/AngularIntervalTest.java
index f7ae171..b93ea0b 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/AngularIntervalTest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/AngularIntervalTest.java
@@ -18,7 +18,6 @@ package org.apache.commons.geometry.spherical.oned;
 
 import java.util.List;
 
-import org.apache.commons.geometry.core.GeometryTestUtils;
 import org.apache.commons.geometry.core.Region;
 import org.apache.commons.geometry.core.RegionLocation;
 import org.apache.commons.geometry.core.partitioning.Split;
@@ -29,6 +28,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class AngularIntervalTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -53,29 +53,12 @@ public class AngularIntervalTest {
     @Test
     public void testOf_doubles_invalidArgs() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(Double.NEGATIVE_INFINITY, 0, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(0, Double.POSITIVE_INFINITY, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(Double.NaN, 0, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(0, Double.NaN, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(Double.NaN, Double.NaN, TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(Double.NEGATIVE_INFINITY, 0, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(0, Double.POSITIVE_INFINITY, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(Double.NaN, 0, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(0, Double.NaN, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(Double.NaN, Double.NaN, TEST_PRECISION));
     }
 
     @Test
@@ -94,29 +77,12 @@ public class AngularIntervalTest {
     @Test
     public void testOf_points_invalidArgs() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(Point1S.of(Double.NEGATIVE_INFINITY), Point1S.ZERO, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(Point1S.ZERO, Point1S.of(Double.POSITIVE_INFINITY), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(Point1S.of(Double.POSITIVE_INFINITY), Point1S.of(Double.NEGATIVE_INFINITY), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(Point1S.NaN, Point1S.ZERO, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(Point1S.ZERO, Point1S.NaN, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(Point1S.NaN, Point1S.NaN, TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(Point1S.of(Double.NEGATIVE_INFINITY), Point1S.ZERO, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(Point1S.ZERO, Point1S.of(Double.POSITIVE_INFINITY), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(Point1S.of(Double.POSITIVE_INFINITY), Point1S.of(Double.NEGATIVE_INFINITY), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(Point1S.NaN, Point1S.ZERO, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(Point1S.ZERO, Point1S.NaN, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(Point1S.NaN, Point1S.NaN, TEST_PRECISION));
     }
 
     @Test
@@ -152,17 +118,9 @@ public class AngularIntervalTest {
         final CutAngle nan = CutAngles.createPositiveFacing(Point1S.NaN, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(pt, nan);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(nan, pt);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.of(nan, nan);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(pt, nan));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(nan, pt));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.of(nan, nan));
     }
 
     @Test
@@ -541,21 +499,10 @@ public class AngularIntervalTest {
     @Test
     public void testConvex_of_doubles_invalidArgs() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.Convex.of(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.Convex.of(0, PlaneAngleRadians.PI + 1e-1, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.Convex.of(PlaneAngleRadians.PI_OVER_TWO, -PlaneAngleRadians.PI_OVER_TWO + 1, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.Convex.of(0, -0.5, TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.Convex.of(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.Convex.of(0, PlaneAngleRadians.PI + 1e-1, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.Convex.of(PlaneAngleRadians.PI_OVER_TWO, -PlaneAngleRadians.PI_OVER_TWO + 1, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.Convex.of(0, -0.5, TEST_PRECISION));
     }
 
     @Test
@@ -577,23 +524,12 @@ public class AngularIntervalTest {
     @Test
     public void testConvex_of_points_invalidArgs() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.Convex.of(Point1S.of(Double.NEGATIVE_INFINITY),
-                    Point1S.of(Double.POSITIVE_INFINITY), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.Convex.of(Point1S.of(0), Point1S.of(PlaneAngleRadians.PI + 1e-1), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.Convex.of(Point1S.of(PlaneAngleRadians.PI_OVER_TWO),
-                    Point1S.of(-PlaneAngleRadians.PI_OVER_TWO + 1), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.Convex.of(Point1S.of(0), Point1S.of(-0.5), TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.Convex.of(Point1S.of(Double.NEGATIVE_INFINITY),
+                Point1S.of(Double.POSITIVE_INFINITY), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.Convex.of(Point1S.of(0), Point1S.of(PlaneAngleRadians.PI + 1e-1), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.Convex.of(Point1S.of(PlaneAngleRadians.PI_OVER_TWO),
+                Point1S.of(-PlaneAngleRadians.PI_OVER_TWO + 1), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.Convex.of(Point1S.of(0), Point1S.of(-0.5), TEST_PRECISION));
     }
 
     @Test
@@ -629,23 +565,12 @@ public class AngularIntervalTest {
         final CutAngle nan = CutAngles.createPositiveFacing(Point1S.NaN, TEST_PRECISION);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.Convex.of(pt, nan);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.Convex.of(nan, pt);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.Convex.of(nan, nan);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            AngularInterval.Convex.of(
-                    CutAngles.createNegativeFacing(1, TEST_PRECISION),
-                    CutAngles.createPositiveFacing(0.5, TEST_PRECISION));
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.Convex.of(pt, nan));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.Convex.of(nan, pt));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.Convex.of(nan, nan));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> AngularInterval.Convex.of(
+                CutAngles.createNegativeFacing(1, TEST_PRECISION),
+                CutAngles.createPositiveFacing(0.5, TEST_PRECISION)));
     }
 
     @Test
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/Point1STest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/Point1STest.java
index 205f4b7..8809632 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/Point1STest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/oned/Point1STest.java
@@ -28,7 +28,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class Point1STest {
 
@@ -361,17 +360,9 @@ public class Point1STest {
     @Test
     public void testNormalize_nonFinite() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Point1S.of(Double.POSITIVE_INFINITY).normalize(0.0);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Point1S.of(Double.NEGATIVE_INFINITY).normalize(0.0);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Point1S.of(Double.NaN).normalize(Point1S.ZERO);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Point1S.of(Double.POSITIVE_INFINITY).normalize(0.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Point1S.of(Double.NEGATIVE_INFINITY).normalize(0.0));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Point1S.of(Double.NaN).normalize(Point1S.ZERO));
     }
 
     @Test
@@ -400,17 +391,9 @@ public class Point1STest {
     @Test
     public void testAbove_nonFinite() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Point1S.of(Double.POSITIVE_INFINITY).above(Point1S.ZERO);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Point1S.of(Double.NEGATIVE_INFINITY).above(Point1S.ZERO);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Point1S.of(Double.NaN).above(Point1S.ZERO);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Point1S.of(Double.POSITIVE_INFINITY).above(Point1S.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Point1S.of(Double.NEGATIVE_INFINITY).above(Point1S.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Point1S.of(Double.NaN).above(Point1S.ZERO));
     }
 
     @Test
@@ -439,17 +422,9 @@ public class Point1STest {
     @Test
     public void testBelow_nonFinite() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            Point1S.of(Double.POSITIVE_INFINITY).below(Point1S.ZERO);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Point1S.of(Double.NEGATIVE_INFINITY).below(Point1S.ZERO);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            Point1S.of(Double.NaN).below(Point1S.ZERO);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Point1S.of(Double.POSITIVE_INFINITY).below(Point1S.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Point1S.of(Double.NEGATIVE_INFINITY).below(Point1S.ZERO));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Point1S.of(Double.NaN).below(Point1S.ZERO));
     }
 
     @Test
@@ -469,7 +444,7 @@ public class Point1STest {
     @Test
     public void testParse_failure() {
         // act/assert
-        assertThrows(IllegalArgumentException.class, () ->  Point1S.parse("abc"));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  Point1S.parse("abc"));
     }
 
     private static void checkPoint(final Point1S pt, final double az) {
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/ConvexArea2STest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/ConvexArea2STest.java
index fb0d71f..8d9430f 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/ConvexArea2STest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/ConvexArea2STest.java
@@ -22,7 +22,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
-import org.apache.commons.geometry.core.GeometryTestUtils;
 import org.apache.commons.geometry.core.RegionLocation;
 import org.apache.commons.geometry.core.partitioning.Split;
 import org.apache.commons.geometry.core.partitioning.SplitLocation;
@@ -35,6 +34,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class ConvexArea2STest {
 
     private static final double TEST_EPS = 1e-10;
@@ -480,13 +480,8 @@ public class ConvexArea2STest {
     @Test
     public void testFromVertices_invalidArguments() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            ConvexArea2S.fromVertices(Collections.singletonList(Point2S.PLUS_I), TEST_PRECISION);
-        }, IllegalStateException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            ConvexArea2S.fromVertices(Arrays.asList(Point2S.PLUS_I, Point2S.of(1e-16, PlaneAngleRadians.PI_OVER_TWO)), TEST_PRECISION);
-        }, IllegalStateException.class);
+        Assertions.assertThrows(IllegalStateException.class, () -> ConvexArea2S.fromVertices(Collections.singletonList(Point2S.PLUS_I), TEST_PRECISION));
+        Assertions.assertThrows(IllegalStateException.class, () -> ConvexArea2S.fromVertices(Arrays.asList(Point2S.PLUS_I, Point2S.of(1e-16, PlaneAngleRadians.PI_OVER_TWO)), TEST_PRECISION));
     }
 
     @Test
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/EmbeddedTreeSubGreatCircleTest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/EmbeddedTreeSubGreatCircleTest.java
index a420448..83a7135 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/EmbeddedTreeSubGreatCircleTest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/EmbeddedTreeSubGreatCircleTest.java
@@ -33,7 +33,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class    EmbeddedTreeSubGreatCircleTest {
 
@@ -344,7 +343,7 @@ public class    EmbeddedTreeSubGreatCircleTest {
 
         final EmbeddedTreeGreatCircleSubset sub = new EmbeddedTreeGreatCircleSubset(circle);
         // act/assert
-        assertThrows(IllegalArgumentException.class, () ->  sub.add(otherCircle.arc(Point2S.PLUS_J, Point2S.of(1.5 * PlaneAngleRadians.PI, 0.75 * PlaneAngleRadians.PI))));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  sub.add(otherCircle.arc(Point2S.PLUS_J, Point2S.of(1.5 * PlaneAngleRadians.PI, 0.75 * PlaneAngleRadians.PI))));
     }
 
     @Test
@@ -384,7 +383,7 @@ public class    EmbeddedTreeSubGreatCircleTest {
         final EmbeddedTreeGreatCircleSubset sub = new EmbeddedTreeGreatCircleSubset(circle);
 
         // act/assert
-        assertThrows(IllegalArgumentException.class, () ->  sub.add(new EmbeddedTreeGreatCircleSubset(otherCircle, RegionBSPTree1S.full())));
+        Assertions.assertThrows(IllegalArgumentException.class, () ->  sub.add(new EmbeddedTreeGreatCircleSubset(otherCircle, RegionBSPTree1S.full())));
     }
 
     @Test
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatArcPathTest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatArcPathTest.java
index 1657450..ffc64d9 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatArcPathTest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatArcPathTest.java
@@ -518,13 +518,13 @@ public class GreatArcPathTest {
     @Test
     public void testBuilder_points_noPrecisionGiven() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             GreatArcPath.builder(null)
                 .append(Point2S.PLUS_I)
                 .append(Point2S.PLUS_J);
         }, IllegalStateException.class, "Unable to create arc: no point precision specified");
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             GreatArcPath.builder(null)
                 .prepend(Point2S.PLUS_I)
                 .prepend(Point2S.PLUS_J);
@@ -534,14 +534,14 @@ public class GreatArcPathTest {
     @Test
     public void testBuilder_arcsNotConnected() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             GreatArcPath.builder(TEST_PRECISION)
                 .append(Point2S.PLUS_I)
                 .append(Point2S.PLUS_J)
                 .append(GreatCircles.arcFromPoints(Point2S.PLUS_K, Point2S.MINUS_J, TEST_PRECISION));
         }, IllegalStateException.class, Pattern.compile("^Path arcs are not connected.*"));
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             GreatArcPath.builder(TEST_PRECISION)
                 .prepend(Point2S.PLUS_I)
                 .prepend(Point2S.PLUS_J)
@@ -552,13 +552,13 @@ public class GreatArcPathTest {
     @Test
     public void testBuilder_addToFullArc() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             GreatArcPath.builder(TEST_PRECISION)
                 .append(GreatCircles.fromPoints(Point2S.PLUS_I, Point2S.PLUS_J, TEST_PRECISION).span())
                 .append(Point2S.PLUS_J);
         }, IllegalStateException.class, Pattern.compile("^Cannot add point .* after full arc.*"));
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             GreatArcPath.builder(TEST_PRECISION)
                 .prepend(GreatCircles.fromPoints(Point2S.PLUS_I, Point2S.PLUS_J, TEST_PRECISION).span())
                 .prepend(Point2S.PLUS_J);
@@ -568,13 +568,13 @@ public class GreatArcPathTest {
     @Test
     public void testBuilder_onlySinglePointGiven() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             GreatArcPath.builder(TEST_PRECISION)
                 .append(Point2S.PLUS_J)
                 .build();
         }, IllegalStateException.class, Pattern.compile("^Unable to create path; only a single point provided.*"));
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             GreatArcPath.builder(TEST_PRECISION)
                 .prepend(Point2S.PLUS_J)
                 .build();
@@ -584,7 +584,7 @@ public class GreatArcPathTest {
     @Test
     public void testBuilder_cannotClose() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             GreatArcPath.builder(TEST_PRECISION)
                 .append(GreatCircles.fromPoints(Point2S.PLUS_I, Point2S.PLUS_J, TEST_PRECISION).span())
                 .close();
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatArcTest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatArcTest.java
index c225867..da3c941 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatArcTest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatArcTest.java
@@ -31,6 +31,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class GreatArcTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -153,13 +154,8 @@ public class GreatArcTest {
     @Test
     public void testFromPoints_invalidPoints() {
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            GreatCircles.arcFromPoints(Point2S.PLUS_I, Point2S.of(1e-12, PlaneAngleRadians.PI_OVER_TWO), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            GreatCircles.arcFromPoints(Point2S.PLUS_I, Point2S.MINUS_I, TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> GreatCircles.arcFromPoints(Point2S.PLUS_I, Point2S.of(1e-12, PlaneAngleRadians.PI_OVER_TWO), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> GreatCircles.arcFromPoints(Point2S.PLUS_I, Point2S.MINUS_I, TEST_PRECISION));
     }
 
     @Test
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatCircleTest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatCircleTest.java
index 8e1be7d..47d1a81 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatCircleTest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/GreatCircleTest.java
@@ -30,6 +30,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class GreatCircleTest {
 
     private static final double TEST_EPS = 1e-10;
@@ -92,36 +93,25 @@ public class GreatCircleTest {
         final Point2S p2 = Point2S.of(PlaneAngleRadians.PI, PlaneAngleRadians.PI_OVER_TWO);
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             GreatCircles.fromPoints(p1, p1, TEST_PRECISION);
         }, IllegalArgumentException.class, Pattern.compile("^.*points are equal$"));
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             GreatCircles.fromPoints(p1, Point2S.of(1e-12, PlaneAngleRadians.PI_OVER_TWO), TEST_PRECISION);
         }, IllegalArgumentException.class, Pattern.compile("^.*points are equal$"));
 
-        GeometryTestUtils.assertThrows(() -> {
+        GeometryTestUtils.assertThrowsWithMessage(() -> {
             GreatCircles.fromPoints(
                     Point2S.from(Vector3D.Unit.PLUS_X),
                     Point2S.from(Vector3D.Unit.MINUS_X),
                     TEST_PRECISION);
         }, IllegalArgumentException.class, Pattern.compile("^.*points are antipodal$"));
 
-        GeometryTestUtils.assertThrows(() -> {
-            GreatCircles.fromPoints(p1, Point2S.NaN, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            GreatCircles.fromPoints(Point2S.NaN, p2, TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            GreatCircles.fromPoints(p1, Point2S.of(Double.POSITIVE_INFINITY, PlaneAngleRadians.PI_OVER_TWO), TEST_PRECISION);
-        }, IllegalArgumentException.class);
-
-        GeometryTestUtils.assertThrows(() -> {
-            GreatCircles.fromPoints(Point2S.of(Double.POSITIVE_INFINITY, PlaneAngleRadians.PI_OVER_TWO), p2, TEST_PRECISION);
-        }, IllegalArgumentException.class);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> GreatCircles.fromPoints(p1, Point2S.NaN, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> GreatCircles.fromPoints(Point2S.NaN, p2, TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> GreatCircles.fromPoints(p1, Point2S.of(Double.POSITIVE_INFINITY, PlaneAngleRadians.PI_OVER_TWO), TEST_PRECISION));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> GreatCircles.fromPoints(Point2S.of(Double.POSITIVE_INFINITY, PlaneAngleRadians.PI_OVER_TWO), p2, TEST_PRECISION));
     }
 
     @Test
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/Point2STest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/Point2STest.java
index 4235c91..86bb298 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/Point2STest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/Point2STest.java
@@ -28,7 +28,6 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class Point2STest {
 
@@ -355,7 +354,7 @@ public class Point2STest {
     @Test
     public void testParse_failure() {
         // act/assert
-        assertThrows(IllegalArgumentException.class, () -> Point2S.parse("abc"));
+        Assertions.assertThrows(IllegalArgumentException.class, () -> Point2S.parse("abc"));
     }
 
     private static void checkPoint(final Point2S p, final double az, final double polar) {
diff --git a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/RegionBSPTree2STest.java b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/RegionBSPTree2STest.java
index e7fd918..40f706a 100644
--- a/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/RegionBSPTree2STest.java
+++ b/commons-geometry-spherical/src/test/java/org/apache/commons/geometry/spherical/twod/RegionBSPTree2STest.java
@@ -23,7 +23,6 @@ import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import org.apache.commons.geometry.core.GeometryTestUtils;
 import org.apache.commons.geometry.core.RegionLocation;
 import org.apache.commons.geometry.core.partitioning.Split;
 import org.apache.commons.geometry.core.partitioning.SplitLocation;
@@ -37,6 +36,7 @@ import org.apache.commons.numbers.angle.PlaneAngleRadians;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+
 public class RegionBSPTree2STest {
 
     private static final double TEST_EPS = 1e-10;
@@ -272,9 +272,7 @@ public class RegionBSPTree2STest {
         tree.insert(EQUATOR.span());
 
         // act/assert
-        GeometryTestUtils.assertThrows(() -> {
-            tree.getBoundaryPaths().add(GreatArcPath.empty());
-        }, UnsupportedOperationException.class);
+        Assertions.assertThrows(UnsupportedOperationException.class, () -> tree.getBoundaryPaths().add(GreatArcPath.empty()));
     }
 
     @Test