diff --git a/afterburner/src/test/java/com/fasterxml/jackson/module/afterburner/util/failure/JacksonTestFailureExpected.java b/afterburner/src/test/java/com/fasterxml/jackson/module/afterburner/util/failure/JacksonTestFailureExpected.java
new file mode 100644
index 00000000..20a2d37c
--- /dev/null
+++ b/afterburner/src/test/java/com/fasterxml/jackson/module/afterburner/util/failure/JacksonTestFailureExpected.java
@@ -0,0 +1,37 @@
+package com.fasterxml.jackson.module.afterburner.util.failure;
+
+import java.lang.annotation.*;
+
+import org.junit.jupiter.api.extension.ExtendWith;
+
+/**
+ *
+ * Annotation used to indicate that a JUnit-5 based tests method is expected to fail.
+ *
+ *
+ * When a test method is annotated with {@code @JacksonTestFailureExpected}, the
+ * {@link JacksonTestFailureExpectedInterceptor} will intercept the test execution.
+ * If the test passes, which is an unexpected behavior, the interceptor will throw an exception to fail the test,
+ * indicating that the test was expected to fail but didn't.
+ *
+ *
+ * Usage Example:
+ *
+ *
+ *
+ * @Test
+ * @JacksonTestFailureExpected
+ * public void testFeatureNotYetImplemented() {
+ * // Test code that is expected to fail
+ * }
+ * }
+ *
+ *
+ *
+ *
+ * @since 2.19
+ */
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@ExtendWith(JacksonTestFailureExpectedInterceptor.class)
+public @interface JacksonTestFailureExpected { }
diff --git a/afterburner/src/test/java/com/fasterxml/jackson/module/afterburner/util/failure/JacksonTestFailureExpectedInterceptor.java b/afterburner/src/test/java/com/fasterxml/jackson/module/afterburner/util/failure/JacksonTestFailureExpectedInterceptor.java
new file mode 100644
index 00000000..e07526ca
--- /dev/null
+++ b/afterburner/src/test/java/com/fasterxml/jackson/module/afterburner/util/failure/JacksonTestFailureExpectedInterceptor.java
@@ -0,0 +1,43 @@
+package com.fasterxml.jackson.module.afterburner.util.failure;
+
+import java.lang.reflect.Method;
+
+import org.junit.jupiter.api.extension.*;
+
+/**
+ * Custom {@link InvocationInterceptor} that intercepts test method invocation.
+ * To pass the test ***only if*** test fails with an exception, and fail the test otherwise.
+ *
+ * @since 2.19
+ */
+public class JacksonTestFailureExpectedInterceptor
+ implements InvocationInterceptor
+{
+ @Override
+ public void interceptTestMethod(Invocation invocation,
+ ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext)
+ throws Throwable
+ {
+ try {
+ invocation.proceed();
+ } catch (Throwable t) {
+ // do-nothing, we do expect an exception
+ return;
+ }
+ handleUnexpectePassingTest(invocationContext);
+ }
+
+ private void handleUnexpectePassingTest(ReflectiveInvocationContext invocationContext) {
+ // Collect information we need
+ Object targetClass = invocationContext.getTargetClass();
+ Object testMethod = invocationContext.getExecutable().getName();
+ //List arguments = invocationContext.getArguments();
+
+ // Create message
+ String message = String.format("Test method %s.%s() passed, but should have failed", targetClass, testMethod);
+
+ // throw exception
+ throw new JacksonTestShouldFailException(message);
+ }
+
+}
diff --git a/afterburner/src/test/java/com/fasterxml/jackson/module/afterburner/util/failure/JacksonTestShouldFailException.java b/afterburner/src/test/java/com/fasterxml/jackson/module/afterburner/util/failure/JacksonTestShouldFailException.java
new file mode 100644
index 00000000..f2d73e14
--- /dev/null
+++ b/afterburner/src/test/java/com/fasterxml/jackson/module/afterburner/util/failure/JacksonTestShouldFailException.java
@@ -0,0 +1,18 @@
+package com.fasterxml.jackson.module.afterburner.util.failure;
+
+/**
+ * Exception used to alert that a test is passing, but should be failing.
+ *
+ * WARNING : This only for test code, and should never be thrown from production code.
+ *
+ * @since 2.19
+ */
+public class JacksonTestShouldFailException
+ extends RuntimeException
+{
+ private static final long serialVersionUID = 1L;
+
+ public JacksonTestShouldFailException(String msg) {
+ super(msg);
+ }
+}
diff --git a/android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/testutil/failure/JacksonTestFailureExpected.java b/android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/testutil/failure/JacksonTestFailureExpected.java
new file mode 100644
index 00000000..a354a4f8
--- /dev/null
+++ b/android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/testutil/failure/JacksonTestFailureExpected.java
@@ -0,0 +1,37 @@
+package com.fasterxml.jackson.module.androidrecord.testutil.failure;
+
+import java.lang.annotation.*;
+
+import org.junit.jupiter.api.extension.ExtendWith;
+
+/**
+ *
+ * Annotation used to indicate that a JUnit-5 based tests method is expected to fail.
+ *
+ *
+ * When a test method is annotated with {@code @JacksonTestFailureExpected}, the
+ * {@link JacksonTestFailureExpectedInterceptor} will intercept the test execution.
+ * If the test passes, which is an unexpected behavior, the interceptor will throw an exception to fail the test,
+ * indicating that the test was expected to fail but didn't.
+ *
+ *
+ * Usage Example:
+ *
+ *
+ *
+ * @Test
+ * @JacksonTestFailureExpected
+ * public void testFeatureNotYetImplemented() {
+ * // Test code that is expected to fail
+ * }
+ * }
+ *
+ *
+ *
+ *
+ * @since 2.19
+ */
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@ExtendWith(JacksonTestFailureExpectedInterceptor.class)
+public @interface JacksonTestFailureExpected { }
diff --git a/android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/testutil/failure/JacksonTestFailureExpectedInterceptor.java b/android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/testutil/failure/JacksonTestFailureExpectedInterceptor.java
new file mode 100644
index 00000000..4c6ee833
--- /dev/null
+++ b/android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/testutil/failure/JacksonTestFailureExpectedInterceptor.java
@@ -0,0 +1,43 @@
+package com.fasterxml.jackson.module.androidrecord.testutil.failure;
+
+import java.lang.reflect.Method;
+
+import org.junit.jupiter.api.extension.*;
+
+/**
+ * Custom {@link InvocationInterceptor} that intercepts test method invocation.
+ * To pass the test ***only if*** test fails with an exception, and fail the test otherwise.
+ *
+ * @since 2.19
+ */
+public class JacksonTestFailureExpectedInterceptor
+ implements InvocationInterceptor
+{
+ @Override
+ public void interceptTestMethod(Invocation invocation,
+ ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext)
+ throws Throwable
+ {
+ try {
+ invocation.proceed();
+ } catch (Throwable t) {
+ // do-nothing, we do expect an exception
+ return;
+ }
+ handleUnexpectePassingTest(invocationContext);
+ }
+
+ private void handleUnexpectePassingTest(ReflectiveInvocationContext invocationContext) {
+ // Collect information we need
+ Object targetClass = invocationContext.getTargetClass();
+ Object testMethod = invocationContext.getExecutable().getName();
+ //List arguments = invocationContext.getArguments();
+
+ // Create message
+ String message = String.format("Test method %s.%s() passed, but should have failed", targetClass, testMethod);
+
+ // throw exception
+ throw new JacksonTestShouldFailException(message);
+ }
+
+}
diff --git a/android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/testutil/failure/JacksonTestShouldFailException.java b/android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/testutil/failure/JacksonTestShouldFailException.java
new file mode 100644
index 00000000..193fee9f
--- /dev/null
+++ b/android-record/src/test/java/com/fasterxml/jackson/module/androidrecord/testutil/failure/JacksonTestShouldFailException.java
@@ -0,0 +1,18 @@
+package com.fasterxml.jackson.module.androidrecord.testutil.failure;
+
+/**
+ * Exception used to alert that a test is passing, but should be failing.
+ *
+ * WARNING : This only for test code, and should never be thrown from production code.
+ *
+ * @since 2.19
+ */
+public class JacksonTestShouldFailException
+ extends RuntimeException
+{
+ private static final long serialVersionUID = 1L;
+
+ public JacksonTestShouldFailException(String msg) {
+ super(msg);
+ }
+}
diff --git a/blackbird/src/test/java/com/fasterxml/jackson/module/blackbird/testutil/failure/JacksonTestFailureExpected.java b/blackbird/src/test/java/com/fasterxml/jackson/module/blackbird/testutil/failure/JacksonTestFailureExpected.java
new file mode 100644
index 00000000..520b3d57
--- /dev/null
+++ b/blackbird/src/test/java/com/fasterxml/jackson/module/blackbird/testutil/failure/JacksonTestFailureExpected.java
@@ -0,0 +1,37 @@
+package com.fasterxml.jackson.module.blackbird.testutil.failure;
+
+import java.lang.annotation.*;
+
+import org.junit.jupiter.api.extension.ExtendWith;
+
+/**
+ *
+ * Annotation used to indicate that a JUnit-5 based tests method is expected to fail.
+ *
+ *
+ * When a test method is annotated with {@code @JacksonTestFailureExpected}, the
+ * {@link JacksonTestFailureExpectedInterceptor} will intercept the test execution.
+ * If the test passes, which is an unexpected behavior, the interceptor will throw an exception to fail the test,
+ * indicating that the test was expected to fail but didn't.
+ *
+ *
+ * Usage Example:
+ *
+ *
+ *
+ * @Test
+ * @JacksonTestFailureExpected
+ * public void testFeatureNotYetImplemented() {
+ * // Test code that is expected to fail
+ * }
+ * }
+ *
+ *
+ *
+ *
+ * @since 2.19
+ */
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@ExtendWith(JacksonTestFailureExpectedInterceptor.class)
+public @interface JacksonTestFailureExpected { }
diff --git a/blackbird/src/test/java/com/fasterxml/jackson/module/blackbird/testutil/failure/JacksonTestFailureExpectedInterceptor.java b/blackbird/src/test/java/com/fasterxml/jackson/module/blackbird/testutil/failure/JacksonTestFailureExpectedInterceptor.java
new file mode 100644
index 00000000..adcd8c07
--- /dev/null
+++ b/blackbird/src/test/java/com/fasterxml/jackson/module/blackbird/testutil/failure/JacksonTestFailureExpectedInterceptor.java
@@ -0,0 +1,43 @@
+package com.fasterxml.jackson.module.blackbird.testutil.failure;
+
+import java.lang.reflect.Method;
+
+import org.junit.jupiter.api.extension.*;
+
+/**
+ * Custom {@link InvocationInterceptor} that intercepts test method invocation.
+ * To pass the test ***only if*** test fails with an exception, and fail the test otherwise.
+ *
+ * @since 2.19
+ */
+public class JacksonTestFailureExpectedInterceptor
+ implements InvocationInterceptor
+{
+ @Override
+ public void interceptTestMethod(Invocation invocation,
+ ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext)
+ throws Throwable
+ {
+ try {
+ invocation.proceed();
+ } catch (Throwable t) {
+ // do-nothing, we do expect an exception
+ return;
+ }
+ handleUnexpectePassingTest(invocationContext);
+ }
+
+ private void handleUnexpectePassingTest(ReflectiveInvocationContext invocationContext) {
+ // Collect information we need
+ Object targetClass = invocationContext.getTargetClass();
+ Object testMethod = invocationContext.getExecutable().getName();
+ //List arguments = invocationContext.getArguments();
+
+ // Create message
+ String message = String.format("Test method %s.%s() passed, but should have failed", targetClass, testMethod);
+
+ // throw exception
+ throw new JacksonTestShouldFailException(message);
+ }
+
+}
diff --git a/blackbird/src/test/java/com/fasterxml/jackson/module/blackbird/testutil/failure/JacksonTestShouldFailException.java b/blackbird/src/test/java/com/fasterxml/jackson/module/blackbird/testutil/failure/JacksonTestShouldFailException.java
new file mode 100644
index 00000000..a8f1ebd4
--- /dev/null
+++ b/blackbird/src/test/java/com/fasterxml/jackson/module/blackbird/testutil/failure/JacksonTestShouldFailException.java
@@ -0,0 +1,18 @@
+package com.fasterxml.jackson.module.blackbird.testutil.failure;
+
+/**
+ * Exception used to alert that a test is passing, but should be failing.
+ *
+ * WARNING : This only for test code, and should never be thrown from production code.
+ *
+ * @since 2.19
+ */
+public class JacksonTestShouldFailException
+ extends RuntimeException
+{
+ private static final long serialVersionUID = 1L;
+
+ public JacksonTestShouldFailException(String msg) {
+ super(msg);
+ }
+}
diff --git a/jakarta-xmlbind/src/test/java/com/fasterxml/jackson/module/jakarta/xmlbind/testutil/failure/JacksonTestFailureExpected.java b/jakarta-xmlbind/src/test/java/com/fasterxml/jackson/module/jakarta/xmlbind/testutil/failure/JacksonTestFailureExpected.java
new file mode 100644
index 00000000..f489f999
--- /dev/null
+++ b/jakarta-xmlbind/src/test/java/com/fasterxml/jackson/module/jakarta/xmlbind/testutil/failure/JacksonTestFailureExpected.java
@@ -0,0 +1,37 @@
+package com.fasterxml.jackson.module.jakarta.xmlbind.testutil.failure;
+
+import java.lang.annotation.*;
+
+import org.junit.jupiter.api.extension.ExtendWith;
+
+/**
+ *
+ * Annotation used to indicate that a JUnit-5 based tests method is expected to fail.
+ *
+ *
+ * When a test method is annotated with {@code @JacksonTestFailureExpected}, the
+ * {@link JacksonTestFailureExpectedInterceptor} will intercept the test execution.
+ * If the test passes, which is an unexpected behavior, the interceptor will throw an exception to fail the test,
+ * indicating that the test was expected to fail but didn't.
+ *
+ *
+ * Usage Example:
+ *
+ *
+ *
+ * @Test
+ * @JacksonTestFailureExpected
+ * public void testFeatureNotYetImplemented() {
+ * // Test code that is expected to fail
+ * }
+ * }
+ *
+ *
+ *
+ *
+ * @since 2.19
+ */
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@ExtendWith(JacksonTestFailureExpectedInterceptor.class)
+public @interface JacksonTestFailureExpected { }
diff --git a/jakarta-xmlbind/src/test/java/com/fasterxml/jackson/module/jakarta/xmlbind/testutil/failure/JacksonTestFailureExpectedInterceptor.java b/jakarta-xmlbind/src/test/java/com/fasterxml/jackson/module/jakarta/xmlbind/testutil/failure/JacksonTestFailureExpectedInterceptor.java
new file mode 100644
index 00000000..b23aa827
--- /dev/null
+++ b/jakarta-xmlbind/src/test/java/com/fasterxml/jackson/module/jakarta/xmlbind/testutil/failure/JacksonTestFailureExpectedInterceptor.java
@@ -0,0 +1,43 @@
+package com.fasterxml.jackson.module.jakarta.xmlbind.testutil.failure;
+
+import java.lang.reflect.Method;
+
+import org.junit.jupiter.api.extension.*;
+
+/**
+ * Custom {@link InvocationInterceptor} that intercepts test method invocation.
+ * To pass the test ***only if*** test fails with an exception, and fail the test otherwise.
+ *
+ * @since 2.19
+ */
+public class JacksonTestFailureExpectedInterceptor
+ implements InvocationInterceptor
+{
+ @Override
+ public void interceptTestMethod(Invocation invocation,
+ ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext)
+ throws Throwable
+ {
+ try {
+ invocation.proceed();
+ } catch (Throwable t) {
+ // do-nothing, we do expect an exception
+ return;
+ }
+ handleUnexpectePassingTest(invocationContext);
+ }
+
+ private void handleUnexpectePassingTest(ReflectiveInvocationContext invocationContext) {
+ // Collect information we need
+ Object targetClass = invocationContext.getTargetClass();
+ Object testMethod = invocationContext.getExecutable().getName();
+ //List arguments = invocationContext.getArguments();
+
+ // Create message
+ String message = String.format("Test method %s.%s() passed, but should have failed", targetClass, testMethod);
+
+ // throw exception
+ throw new JacksonTestShouldFailException(message);
+ }
+
+}
diff --git a/jakarta-xmlbind/src/test/java/com/fasterxml/jackson/module/jakarta/xmlbind/testutil/failure/JacksonTestShouldFailException.java b/jakarta-xmlbind/src/test/java/com/fasterxml/jackson/module/jakarta/xmlbind/testutil/failure/JacksonTestShouldFailException.java
new file mode 100644
index 00000000..855b7cc6
--- /dev/null
+++ b/jakarta-xmlbind/src/test/java/com/fasterxml/jackson/module/jakarta/xmlbind/testutil/failure/JacksonTestShouldFailException.java
@@ -0,0 +1,18 @@
+package com.fasterxml.jackson.module.jakarta.xmlbind.testutil.failure;
+
+/**
+ * Exception used to alert that a test is passing, but should be failing.
+ *
+ * WARNING : This only for test code, and should never be thrown from production code.
+ *
+ * @since 2.19
+ */
+public class JacksonTestShouldFailException
+ extends RuntimeException
+{
+ private static final long serialVersionUID = 1L;
+
+ public JacksonTestShouldFailException(String msg) {
+ super(msg);
+ }
+}
diff --git a/jaxb/src/test/java/com/fasterxml/jackson/module/jaxb/testutil/failure/JacksonTestFailureExpected.java b/jaxb/src/test/java/com/fasterxml/jackson/module/jaxb/testutil/failure/JacksonTestFailureExpected.java
new file mode 100644
index 00000000..849fd744
--- /dev/null
+++ b/jaxb/src/test/java/com/fasterxml/jackson/module/jaxb/testutil/failure/JacksonTestFailureExpected.java
@@ -0,0 +1,37 @@
+package com.fasterxml.jackson.module.jaxb.testutil.failure;
+
+import java.lang.annotation.*;
+
+import org.junit.jupiter.api.extension.ExtendWith;
+
+/**
+ *
+ * Annotation used to indicate that a JUnit-5 based tests method is expected to fail.
+ *
+ *
+ * When a test method is annotated with {@code @JacksonTestFailureExpected}, the
+ * {@link JacksonTestFailureExpectedInterceptor} will intercept the test execution.
+ * If the test passes, which is an unexpected behavior, the interceptor will throw an exception to fail the test,
+ * indicating that the test was expected to fail but didn't.
+ *
+ *
+ * Usage Example:
+ *
+ *
+ *
+ * @Test
+ * @JacksonTestFailureExpected
+ * public void testFeatureNotYetImplemented() {
+ * // Test code that is expected to fail
+ * }
+ * }
+ *
+ *
+ *
+ *
+ * @since 2.19
+ */
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@ExtendWith(JacksonTestFailureExpectedInterceptor.class)
+public @interface JacksonTestFailureExpected { }
diff --git a/jaxb/src/test/java/com/fasterxml/jackson/module/jaxb/testutil/failure/JacksonTestFailureExpectedInterceptor.java b/jaxb/src/test/java/com/fasterxml/jackson/module/jaxb/testutil/failure/JacksonTestFailureExpectedInterceptor.java
new file mode 100644
index 00000000..6b4308f0
--- /dev/null
+++ b/jaxb/src/test/java/com/fasterxml/jackson/module/jaxb/testutil/failure/JacksonTestFailureExpectedInterceptor.java
@@ -0,0 +1,43 @@
+package com.fasterxml.jackson.module.jaxb.testutil.failure;
+
+import java.lang.reflect.Method;
+
+import org.junit.jupiter.api.extension.*;
+
+/**
+ * Custom {@link InvocationInterceptor} that intercepts test method invocation.
+ * To pass the test ***only if*** test fails with an exception, and fail the test otherwise.
+ *
+ * @since 2.19
+ */
+public class JacksonTestFailureExpectedInterceptor
+ implements InvocationInterceptor
+{
+ @Override
+ public void interceptTestMethod(Invocation invocation,
+ ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext)
+ throws Throwable
+ {
+ try {
+ invocation.proceed();
+ } catch (Throwable t) {
+ // do-nothing, we do expect an exception
+ return;
+ }
+ handleUnexpectePassingTest(invocationContext);
+ }
+
+ private void handleUnexpectePassingTest(ReflectiveInvocationContext invocationContext) {
+ // Collect information we need
+ Object targetClass = invocationContext.getTargetClass();
+ Object testMethod = invocationContext.getExecutable().getName();
+ //List arguments = invocationContext.getArguments();
+
+ // Create message
+ String message = String.format("Test method %s.%s() passed, but should have failed", targetClass, testMethod);
+
+ // throw exception
+ throw new JacksonTestShouldFailException(message);
+ }
+
+}
diff --git a/jaxb/src/test/java/com/fasterxml/jackson/module/jaxb/testutil/failure/JacksonTestShouldFailException.java b/jaxb/src/test/java/com/fasterxml/jackson/module/jaxb/testutil/failure/JacksonTestShouldFailException.java
new file mode 100644
index 00000000..e259aecd
--- /dev/null
+++ b/jaxb/src/test/java/com/fasterxml/jackson/module/jaxb/testutil/failure/JacksonTestShouldFailException.java
@@ -0,0 +1,18 @@
+package com.fasterxml.jackson.module.jaxb.testutil.failure;
+
+/**
+ * Exception used to alert that a test is passing, but should be failing.
+ *
+ * WARNING : This only for test code, and should never be thrown from production code.
+ *
+ * @since 2.19
+ */
+public class JacksonTestShouldFailException
+ extends RuntimeException
+{
+ private static final long serialVersionUID = 1L;
+
+ public JacksonTestShouldFailException(String msg) {
+ super(msg);
+ }
+}
diff --git a/paranamer/src/test/java/com/fasterxml/jackson/module/paranamer/testutil/failure/JacksonTestFailureExpected.java b/paranamer/src/test/java/com/fasterxml/jackson/module/paranamer/testutil/failure/JacksonTestFailureExpected.java
new file mode 100644
index 00000000..764c7ca3
--- /dev/null
+++ b/paranamer/src/test/java/com/fasterxml/jackson/module/paranamer/testutil/failure/JacksonTestFailureExpected.java
@@ -0,0 +1,37 @@
+package com.fasterxml.jackson.module.paranamer.testutil.failure;
+
+import java.lang.annotation.*;
+
+import org.junit.jupiter.api.extension.ExtendWith;
+
+/**
+ *
+ * Annotation used to indicate that a JUnit-5 based tests method is expected to fail.
+ *
+ *
+ * When a test method is annotated with {@code @JacksonTestFailureExpected}, the
+ * {@link JacksonTestFailureExpectedInterceptor} will intercept the test execution.
+ * If the test passes, which is an unexpected behavior, the interceptor will throw an exception to fail the test,
+ * indicating that the test was expected to fail but didn't.
+ *
+ *
+ * Usage Example:
+ *
+ *
+ *
+ * @Test
+ * @JacksonTestFailureExpected
+ * public void testFeatureNotYetImplemented() {
+ * // Test code that is expected to fail
+ * }
+ * }
+ *
+ *
+ *
+ *
+ * @since 2.19
+ */
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@ExtendWith(JacksonTestFailureExpectedInterceptor.class)
+public @interface JacksonTestFailureExpected { }
diff --git a/paranamer/src/test/java/com/fasterxml/jackson/module/paranamer/testutil/failure/JacksonTestFailureExpectedInterceptor.java b/paranamer/src/test/java/com/fasterxml/jackson/module/paranamer/testutil/failure/JacksonTestFailureExpectedInterceptor.java
new file mode 100644
index 00000000..3ead7da0
--- /dev/null
+++ b/paranamer/src/test/java/com/fasterxml/jackson/module/paranamer/testutil/failure/JacksonTestFailureExpectedInterceptor.java
@@ -0,0 +1,43 @@
+package com.fasterxml.jackson.module.paranamer.testutil.failure;
+
+import java.lang.reflect.Method;
+
+import org.junit.jupiter.api.extension.*;
+
+/**
+ * Custom {@link InvocationInterceptor} that intercepts test method invocation.
+ * To pass the test ***only if*** test fails with an exception, and fail the test otherwise.
+ *
+ * @since 2.19
+ */
+public class JacksonTestFailureExpectedInterceptor
+ implements InvocationInterceptor
+{
+ @Override
+ public void interceptTestMethod(Invocation invocation,
+ ReflectiveInvocationContext invocationContext, ExtensionContext extensionContext)
+ throws Throwable
+ {
+ try {
+ invocation.proceed();
+ } catch (Throwable t) {
+ // do-nothing, we do expect an exception
+ return;
+ }
+ handleUnexpectePassingTest(invocationContext);
+ }
+
+ private void handleUnexpectePassingTest(ReflectiveInvocationContext invocationContext) {
+ // Collect information we need
+ Object targetClass = invocationContext.getTargetClass();
+ Object testMethod = invocationContext.getExecutable().getName();
+ //List arguments = invocationContext.getArguments();
+
+ // Create message
+ String message = String.format("Test method %s.%s() passed, but should have failed", targetClass, testMethod);
+
+ // throw exception
+ throw new JacksonTestShouldFailException(message);
+ }
+
+}
diff --git a/paranamer/src/test/java/com/fasterxml/jackson/module/paranamer/testutil/failure/JacksonTestShouldFailException.java b/paranamer/src/test/java/com/fasterxml/jackson/module/paranamer/testutil/failure/JacksonTestShouldFailException.java
new file mode 100644
index 00000000..4a54eeb1
--- /dev/null
+++ b/paranamer/src/test/java/com/fasterxml/jackson/module/paranamer/testutil/failure/JacksonTestShouldFailException.java
@@ -0,0 +1,18 @@
+package com.fasterxml.jackson.module.paranamer.testutil.failure;
+
+/**
+ * Exception used to alert that a test is passing, but should be failing.
+ *
+ * WARNING : This only for test code, and should never be thrown from production code.
+ *
+ * @since 2.19
+ */
+public class JacksonTestShouldFailException
+ extends RuntimeException
+{
+ private static final long serialVersionUID = 1L;
+
+ public JacksonTestShouldFailException(String msg) {
+ super(msg);
+ }
+}