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

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


The following commit(s) were added to refs/heads/master by this push:
     new 9b95001e9 [LANG-1825] EqualsBuilder.reflectionAppend tries to set 
visibility on (#1647)
9b95001e9 is described below

commit 9b95001e9801399c62794aadacf198c787d960a9
Author: Gary Gregory <[email protected]>
AuthorDate: Sun May 17 07:14:51 2026 -0400

    [LANG-1825] EqualsBuilder.reflectionAppend tries to set visibility on 
(#1647)
    
    excluded fields
    
    Don't force fields to be accessible when excluded.
---
 .../commons/lang3/builder/AbstractReflection.java  |  40 ++--
 .../commons/lang3/builder/CompareToBuilder.java    |  18 +-
 .../commons/lang3/builder/EqualsBuilder.java       |  32 +--
 .../commons/lang3/builder/HashCodeBuilder.java     |  14 +-
 .../lang3/builder/ReflectionToStringBuilder.java   |   8 +-
 .../commons/lang3/builder/ToStringBuilder.java     |   5 +
 .../commons/lang3/builder/AbstractBuilderTest.java |  35 ++--
 .../lang3/builder/CompareToBuilderTest.java        |  12 +-
 .../commons/lang3/builder/DiffBuilderTest.java     | 225 ++++++++++++---------
 .../lang3/builder/EqualsBuilderNoForceTest.java    |  10 +-
 .../EqualsBuilderReflectJreImplementationTest.java |  41 +++-
 .../commons/lang3/builder/EqualsBuilderTest.java   | 134 ++++++------
 .../apache/commons/lang3/time/StopWatchTest.java   |  12 +-
 13 files changed, 334 insertions(+), 252 deletions(-)

diff --git 
a/src/main/java/org/apache/commons/lang3/builder/AbstractReflection.java 
b/src/main/java/org/apache/commons/lang3/builder/AbstractReflection.java
index 368dc26f6..169cd6ef7 100644
--- a/src/main/java/org/apache/commons/lang3/builder/AbstractReflection.java
+++ b/src/main/java/org/apache/commons/lang3/builder/AbstractReflection.java
@@ -112,24 +112,39 @@ static boolean getForceAccessible() {
     }
 
     /**
-     * If {@code forceAccessible} flag is true, each field in the given array 
is made accessible by calling {@link AccessibleObject#setAccessible(boolean)
+     * If {@code forceAccessible} flag is true, then the field is made 
accessible by calling {@link AccessibleObject#setAccessible(boolean)
      * AccessibleObject#setAccessible(true)} but <em>only</em> if a field is 
not already accessible.
      *
      * @param forceAccessible Whether to call {@link 
AccessibleObject#setAccessible(boolean)} if a field is not already accessible.
-     * @param fields          The fields to set.
+     * @param field          The field to set.
+     * @return true if the field is accessible, false otherwise.
+     * @throws SecurityException Thrown if {@code forceAccessible} flag is 
true and the request is denied.
+     * @see AccessibleObject#setAccessible(boolean)
+     * @see SecurityManager#checkPermission
+     */
+    static boolean setAccessible(final boolean forceAccessible, final Field 
field) {
+        return !field.isAccessible() && forceAccessible && 
setAccessibleTrue(field);
+    }
+
+    /**
+     * Sets the field as accessible by calling {@link 
AccessibleObject#setAccessible(boolean) AccessibleObject#setAccessible(true)} 
but <em>only</em> if a field
+     * is not already accessible.
+     *
+     * @param field The field to set, may be null.
+     * @return true if the field is accessible, false otherwise.
      * @throws SecurityException Thrown if {@code forceAccessible} flag is 
true and the request is denied.
      * @see AccessibleObject#setAccessible(boolean)
      * @see SecurityManager#checkPermission
      */
-    static void setAccessible(final boolean forceAccessible, final Field... 
fields) {
-        if (forceAccessible) {
-            for (final Field field : fields) {
-                // Test to avoid the permission check if there is a security 
manager.
-                if (field != null && !field.isAccessible()) {
-                    field.setAccessible(true);
-                }
+    private static boolean setAccessibleTrue(final Field field) {
+        if (field != null) {
+            // Test isAccessible() to avoid the permission check.
+            if (!field.isAccessible()) {
+                field.setAccessible(true);
             }
+            return field.isAccessible();
         }
+        return false;
     }
 
     /**
@@ -160,12 +175,13 @@ protected boolean isForceAccessible() {
      * If {@code forceAccessible} flag is true, each field in the given array 
is made accessible by calling {@link AccessibleObject#setAccessible(boolean)
      * AccessibleObject#setAccessible(true)} but <em>only</em> if a field is 
not already accessible.
      *
-     * @param fields The fields to set.
+     * @param field The fields to set.
      * @throws SecurityException Thrown if {@code forceAccessible} flag is 
true and the request is denied.
+     * @return true if the field is accessible, false otherwise.
      * @see AccessibleObject#setAccessible(boolean)
      * @see SecurityManager#checkPermission
      */
-    void setAccessible(final Field... fields) {
-        setAccessible(isForceAccessible(), fields);
+    boolean setAccessible(final Field field) {
+        return setAccessible(isForceAccessible(), field);
     }
 }
diff --git 
a/src/main/java/org/apache/commons/lang3/builder/CompareToBuilder.java 
b/src/main/java/org/apache/commons/lang3/builder/CompareToBuilder.java
index 512b6b33a..a11307c58 100644
--- a/src/main/java/org/apache/commons/lang3/builder/CompareToBuilder.java
+++ b/src/main/java/org/apache/commons/lang3/builder/CompareToBuilder.java
@@ -24,6 +24,7 @@
 
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.builder.AbstractReflection.AbstractBuilder;
 
 /**
  * Assists in implementing {@link Comparable#compareTo(Object)} methods.
@@ -72,7 +73,9 @@
  * bypass normal access control checks. This will fail under a security 
manager,
  * unless the appropriate permissions are set up correctly. It is also
  * slower than appending explicitly.</p>
- *
+ * <p>
+ * See also {@link AbstractBuilder#setForceAccessible(boolean)}
+ * </p>
  * <p>A typical implementation of {@code compareTo(Object)} using
  * {@code reflectionCompare} looks like:</p>
 
@@ -91,6 +94,7 @@
  * @see Object#hashCode()
  * @see EqualsBuilder
  * @see HashCodeBuilder
+ * @see AbstractBuilder#setForceAccessible(boolean)
  * @since 1.0
  */
 public class CompareToBuilder extends AbstractReflection implements 
Builder<Integer> {
@@ -145,18 +149,18 @@ private static void reflectionAppend(
         final boolean forceAccessible) {
 
         final Field[] fields = clazz.getDeclaredFields();
-        setAccessible(forceAccessible, fields);
         for (int i = 0; i < fields.length && builder.comparison == 0; i++) {
             final Field field = fields[i];
             final String name = field.getName();
             if (!ArrayUtils.contains(excludeFields, name)
                 && !name.contains("$")
                 && (useTransients || 
!Modifier.isTransient(field.getModifiers()))
-                && !Modifier.isStatic(field.getModifiers())
-                && field.isAccessible()) {
-                // IllegalAccessException can't happen. Would get a Security 
exception instead.
-                // Throw a runtime exception in case the impossible happens.
-                builder.append(Reflection.getUnchecked(field, lhs), 
Reflection.getUnchecked(field, rhs));
+                && !Modifier.isStatic(field.getModifiers())) {
+                if (setAccessible(forceAccessible, field)) {
+                    // IllegalAccessException can't happen. Would get a 
Security exception instead.
+                    // Throw a runtime exception in case the impossible 
happens.
+                    builder.append(Reflection.getUnchecked(field, lhs), 
Reflection.getUnchecked(field, rhs));
+                }
             }
         }
     }
diff --git a/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java 
b/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java
index 04de844bf..1bb5ed61d 100644
--- a/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java
+++ b/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java
@@ -26,6 +26,7 @@
 
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.ClassUtils;
+import org.apache.commons.lang3.builder.AbstractReflection.AbstractBuilder;
 import org.apache.commons.lang3.tuple.Pair;
 
 /**
@@ -72,6 +73,9 @@
  * manager, unless the appropriate permissions are set up correctly. It is
  * also slower than testing explicitly.  Non-primitive fields are compared 
using
  * {@code equals()}.</p>
+ * <p>
+ * See also {@link AbstractBuilder#setForceAccessible(boolean)}
+ * </p>
  *
  * <p>A typical invocation for this method would look like:</p>
  * <pre>
@@ -84,6 +88,7 @@
  * used by the {@code reflectionEquals} methods.</p>
  *
  * @since 1.0
+ * @see AbstractBuilder#setForceAccessible(boolean)
  */
 public class EqualsBuilder extends AbstractReflection implements 
Builder<Boolean> {
 
@@ -106,6 +111,13 @@ public EqualsBuilder get() {
 
     }
 
+    /**
+     * A registry of objects used by reflection methods to detect cyclical 
object references and avoid infinite loops.
+     *
+     * @since 3.0
+     */
+    private static final ThreadLocal<Set<Pair<IDKey, IDKey>>> REGISTRY = 
ThreadLocal.withInitial(HashSet::new);
+
     /**
      * Constructs a new Builder.
      *
@@ -115,13 +127,6 @@ public static Builder builder() {
         return new Builder();
     }
 
-    /**
-     * A registry of objects used by reflection methods to detect cyclical 
object references and avoid infinite loops.
-     *
-     * @since 3.0
-     */
-    private static final ThreadLocal<Set<Pair<IDKey, IDKey>>> REGISTRY = 
ThreadLocal.withInitial(HashSet::new);
-
     /*
      * NOTE: we cannot store the actual objects in a HashSet, as that would 
use the very hashCode()
      * we are in the process of calculating.
@@ -964,7 +969,6 @@ public EqualsBuilder reflectionAppend(final Object lhs, 
final Object rhs) {
             isEquals = false;
             return this;
         }
-
         // Find the leaf class since there may be transients in the leaf
         // class or in classes between the leaf and root.
         // If we are not testing transients or a subclass has no ivars,
@@ -989,7 +993,6 @@ public EqualsBuilder reflectionAppend(final Object lhs, 
final Object rhs) {
             isEquals = false;
             return this;
         }
-
         try {
             if (testClass.isArray()) {
                 append(lhs, rhs);
@@ -1018,9 +1021,9 @@ public EqualsBuilder reflectionAppend(final Object lhs, 
final Object rhs) {
      * Appends the fields and values defined by the given object of the
      * given Class.
      *
-     * @param lhs  the left-hand side object
-     * @param rhs  the right-hand side object
-     * @param clazz  the class to append details of
+     * @param lhs  the left-hand side object.
+     * @param rhs  the right-hand side object.
+     * @param clazz  the class to append details of.
      */
     private void reflectionAppend(final Object lhs, final Object rhs, final 
Class<?> clazz) {
         if (isRegistered(lhs, rhs)) {
@@ -1029,7 +1032,6 @@ private void reflectionAppend(final Object lhs, final 
Object rhs, final Class<?>
         try {
             register(lhs, rhs);
             final Field[] fields = clazz.getDeclaredFields();
-            setAccessible(fields);
             for (int i = 0; i < fields.length && isEquals; i++) {
                 final Field field = fields[i];
                 if (!ArrayUtils.contains(excludeFields, field.getName())
@@ -1037,7 +1039,9 @@ private void reflectionAppend(final Object lhs, final 
Object rhs, final Class<?>
                     && (testTransients || 
!Modifier.isTransient(field.getModifiers()))
                     && !Modifier.isStatic(field.getModifiers())
                     && !field.isAnnotationPresent(EqualsExclude.class)) {
-                    append(Reflection.getUnchecked(field, lhs), 
Reflection.getUnchecked(field, rhs));
+                    if (setAccessible(field)) {
+                        append(Reflection.getUnchecked(field, lhs), 
Reflection.getUnchecked(field, rhs));
+                    }
                 }
             }
         } finally {
diff --git 
a/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java 
b/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
index d5737b7d6..fe5d611a4 100644
--- a/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
+++ b/src/main/java/org/apache/commons/lang3/builder/HashCodeBuilder.java
@@ -29,6 +29,7 @@
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.Validate;
+import org.apache.commons.lang3.builder.AbstractReflection.AbstractBuilder;
 
 /**
  * Assists in implementing {@link Object#hashCode()} methods.
@@ -85,6 +86,9 @@
  * to change the visibility of the fields. This will fail under a security 
manager, unless the appropriate permissions
  * are set up correctly. It is also slower than testing explicitly.
  * </p>
+ * <p>
+ * See also {@link AbstractBuilder#setForceAccessible(boolean)}
+ * </p>
  *
  * <p>
  * A typical invocation for this method would look like:
@@ -99,6 +103,7 @@
  * <p>The {@link HashCodeExclude} annotation can be used to exclude fields 
from being
  * used by the {@code reflectionHashCode} methods.</p>
  *
+ * @see AbstractBuilder#setForceAccessible(boolean)
  * @since 1.0
  */
 public class HashCodeBuilder extends AbstractReflection implements 
Builder<Integer> {
@@ -229,10 +234,10 @@ static boolean isRegistered(final Object value) {
      *            whether to use transient fields
      * @param excludeFields
      *            Collection of String field names to exclude from use in 
calculation of hash code
-     * @param setAccessible Whether to set fields' accessible flags
+     * @param forceAccessible Whether to set fields' accessible flags
      */
     private static void reflectionAppend(final Object object, final Class<?> 
clazz, final HashCodeBuilder builder, final boolean useTransients,
-            final String[] excludeFields, final boolean setAccessible) {
+            final String[] excludeFields, final boolean forceAccessible) {
         if (isRegistered(object)) {
             return;
         }
@@ -240,14 +245,15 @@ private static void reflectionAppend(final Object object, 
final Class<?> clazz,
             register(object);
             // The elements in the returned array are not sorted and are not 
in any particular order.
             final Field[] fields = ArraySorter.sort(clazz.getDeclaredFields(), 
Comparator.comparing(Field::getName));
-            setAccessible(setAccessible, fields);
             for (final Field field : fields) {
                 if (!ArrayUtils.contains(excludeFields, field.getName())
                     && !field.getName().contains("$")
                     && (useTransients || 
!Modifier.isTransient(field.getModifiers()))
                     && !Modifier.isStatic(field.getModifiers())
                     && !field.isAnnotationPresent(HashCodeExclude.class)) {
-                    builder.append(Reflection.getUnchecked(field, object));
+                    if (setAccessible(forceAccessible, field)) {
+                        builder.append(Reflection.getUnchecked(field, object));
+                    }
                 }
             }
         } finally {
diff --git 
a/src/main/java/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java 
b/src/main/java/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java
index b38f3d7c4..417a109ce 100644
--- 
a/src/main/java/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java
+++ 
b/src/main/java/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java
@@ -612,18 +612,14 @@ protected boolean accept(final Field field) {
             // Reject static fields.
             return false;
         }
-
-        if (this.excludeFieldNames != null
-            && Arrays.binarySearch(this.excludeFieldNames, field.getName()) >= 
0) {
+        if (this.excludeFieldNames != null && 
Arrays.binarySearch(this.excludeFieldNames, field.getName()) >= 0) {
             // Reject fields from the getExcludeFieldNames list.
             return false;
         }
-
         if (ArrayUtils.isNotEmpty(includeFieldNames)) {
             // Accept fields from the getIncludeFieldNames list. {@code null} 
or empty means all fields are included. All fields are included by default.
             return Arrays.binarySearch(this.includeFieldNames, 
field.getName()) >= 0;
         }
-
         return !field.isAnnotationPresent(ToStringExclude.class);
     }
 
@@ -645,10 +641,10 @@ protected void appendFieldsIn(final Class<?> clazz) {
         }
         // The elements in the returned array are not sorted and are not in 
any particular order.
         final Field[] fields = ArraySorter.sort(clazz.getDeclaredFields(), 
Comparator.comparing(Field::getName));
-        setAccessible(fields);
         for (final Field field : fields) {
             final String fieldName = field.getName();
             if (accept(field)) {
+                setAccessible(field);
                 try {
                     // Warning: Field.get(Object) creates wrappers objects
                     // for primitive types.
diff --git 
a/src/main/java/org/apache/commons/lang3/builder/ToStringBuilder.java 
b/src/main/java/org/apache/commons/lang3/builder/ToStringBuilder.java
index cea81a557..3919c00f4 100644
--- a/src/main/java/org/apache/commons/lang3/builder/ToStringBuilder.java
+++ b/src/main/java/org/apache/commons/lang3/builder/ToStringBuilder.java
@@ -19,6 +19,7 @@
 import java.util.Objects;
 
 import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.builder.AbstractReflection.AbstractBuilder;
 
 /**
  * Assists in implementing {@link Object#toString()} methods.
@@ -67,6 +68,9 @@
  * change the visibility of the fields. This will fail under a security 
manager,
  * unless the appropriate permissions are set up correctly. It is also
  * slower than testing explicitly.</p>
+ * <p>
+ * See also {@link AbstractBuilder#setForceAccessible(boolean)}
+ * </p>
  *
  * <p>A typical invocation for this method would look like:</p>
  *
@@ -85,6 +89,7 @@
  * <p>The exact format of the {@code toString} is determined by
  * the {@link ToStringStyle} passed into the constructor.</p>
  *
+ * @see AbstractBuilder#setForceAccessible(boolean)
  * @since 1.0
  */
 public class ToStringBuilder extends AbstractReflection implements 
Builder<String> {
diff --git 
a/src/test/java/org/apache/commons/lang3/builder/AbstractBuilderTest.java 
b/src/test/java/org/apache/commons/lang3/builder/AbstractBuilderTest.java
index 86ae9e070..c327d5781 100644
--- a/src/test/java/org/apache/commons/lang3/builder/AbstractBuilderTest.java
+++ b/src/test/java/org/apache/commons/lang3/builder/AbstractBuilderTest.java
@@ -18,6 +18,7 @@
 package org.apache.commons.lang3.builder;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 
 import java.util.Objects;
 import java.util.function.Supplier;
@@ -29,15 +30,6 @@
  */
 class AbstractBuilderTest extends AbstractLangTest {
 
-    /**
-     * Delegates to {@link AbstractReflection#getForceAccessible()}.
-     *
-     * @return {@link AbstractReflection#getForceAccessible()}.
-     */
-    protected static boolean accessibleFlag() {
-        return AbstractReflection.getForceAccessible();
-    }
-
     /**
      * Helps test reflection classes.
      *
@@ -45,18 +37,35 @@ protected static boolean accessibleFlag() {
      * @return The given string or "<null>".
      */
     protected static String accessibleString(final String string) {
-        return accessibleFlag() ? string : "<null>";
+        return isForceAccessible() ? string : "<null>";
     }
 
     protected static void assertEqualsIfAccessible(final Object expected, 
final Object actual) {
-        assertEquals(accessibleFlag(), Objects.equals(expected, actual));
+        assertEquals(isForceAccessible(), Objects.equals(expected, actual));
+    }
+
+    protected static void assertFalseIfAccessible(final boolean test) {
+        assertNotEquals(isForceAccessible(), test);
+    }
+
+    protected static void assertNotEqualsIfAccessible(final Object expected, 
final Object actual) {
+        assertNotEquals(isForceAccessible(), Objects.equals(expected, actual));
     }
 
     protected static void assertTrueIfAccessible(final boolean test) {
-        assertEquals(accessibleFlag(), test);
+        assertEquals(isForceAccessible(), test);
     }
 
     protected static void assertTrueIfAccessible(final boolean test, final 
Supplier<String> messageSupplier) {
-        assertEquals(accessibleFlag(), test, messageSupplier);
+        assertEquals(isForceAccessible(), test, messageSupplier);
+    }
+
+    /**
+     * Delegates to {@link AbstractReflection#getForceAccessible()}.
+     *
+     * @return {@link AbstractReflection#getForceAccessible()}.
+     */
+    protected static boolean isForceAccessible() {
+        return AbstractReflection.getForceAccessible();
     }
 }
diff --git 
a/src/test/java/org/apache/commons/lang3/builder/CompareToBuilderTest.java 
b/src/test/java/org/apache/commons/lang3/builder/CompareToBuilderTest.java
index 43540c486..b3c3c4c04 100644
--- a/src/test/java/org/apache/commons/lang3/builder/CompareToBuilderTest.java
+++ b/src/test/java/org/apache/commons/lang3/builder/CompareToBuilderTest.java
@@ -135,10 +135,10 @@ private void assertReflectionCompareContract(final Object 
x, final Object y, fin
         // assertTrue(CompareToBuilder.reflectionCompare(x, y, testTransients) 
== 0 == EqualsBuilder.reflectionEquals(x, y, testTransients));
         //assertTrueIfAccessible(CompareToBuilder.reflectionCompare(x, y, 
testTransients) == 0 == EqualsBuilder.reflectionEquals(x, y, testTransients));
         final boolean actual = CompareToBuilder.reflectionCompare(x, y, 
testTransients) == 0 == EqualsBuilder.reflectionEquals(x, y, testTransients);
-        if (accessibleFlag()) {
+        if (isForceAccessible()) {
             assertEqualsIfAccessible(expectAccessibleFactor, actual);
         } else {
-            assertEqualsIfAccessible(accessibleFlag() || 
expectAccessibleFactor, actual);
+            assertEqualsIfAccessible(isForceAccessible() || 
expectAccessibleFactor, actual);
         }
     }
 
@@ -1059,10 +1059,10 @@ private void testReflectionHierarchyCompare(final 
boolean testTransients, final
         final TestSubObject tso2 = new TestSubObject(2, 2);
         final TestSubObject tso3 = new TestSubObject(3, 3);
 
-        assertReflectionCompareContract(to1, to1, to1, false, excludeFields, 
accessibleFlag());
-        assertReflectionCompareContract(to1, to2, to3, false, excludeFields, 
true);
-        assertReflectionCompareContract(tso1, tso1, tso1, false, 
excludeFields, accessibleFlag());
-        assertReflectionCompareContract(tso1, tso2, tso3, false, 
excludeFields, true);
+        assertReflectionCompareContract(to1, to1, to1, false, excludeFields, 
isForceAccessible());
+        assertReflectionCompareContract(to1, to2, to3, false, excludeFields, 
isForceAccessible());
+        assertReflectionCompareContract(tso1, tso1, tso1, false, 
excludeFields, isForceAccessible());
+        assertReflectionCompareContract(tso1, tso2, tso3, false, 
excludeFields, isForceAccessible());
         assertReflectionCompareContract("1", "2", "3", false, excludeFields, 
true);
 
         assertTrueIfAccessible(0 != CompareToBuilder.reflectionCompare(tso1, 
new TestSubObject(1, 0), testTransients));
diff --git 
a/src/test/java/org/apache/commons/lang3/builder/DiffBuilderTest.java 
b/src/test/java/org/apache/commons/lang3/builder/DiffBuilderTest.java
index ba81a6b3a..a1f5c697b 100644
--- a/src/test/java/org/apache/commons/lang3/builder/DiffBuilderTest.java
+++ b/src/test/java/org/apache/commons/lang3/builder/DiffBuilderTest.java
@@ -128,17 +128,24 @@ public int hashCode() {
 
     private static final ToStringStyle SHORT_STYLE = 
ToStringStyle.SHORT_PREFIX_STYLE;
 
+    private boolean assertSingleAccessibleDiff(final DiffResult<TypeTestClass> 
list) {
+        final boolean forceAccessible = isForceAccessible();
+        assertEquals(forceAccessible ? 1 : 0, list.getNumberOfDiffs());
+        return forceAccessible;
+    }
+
     @Test
     void testBoolean() {
         final TypeTestClass class1 = new TypeTestClass();
         final TypeTestClass class2 = new TypeTestClass();
         class2.booleanField = false;
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertEquals(Boolean.class, diff.getType(), () -> 
diff.getType().getClass().toString());
-        assertEquals(Boolean.TRUE, diff.getLeft());
-        assertEquals(Boolean.FALSE, diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertEquals(Boolean.class, diff.getType(), () -> 
diff.getType().getClass().toString());
+            assertEquals(Boolean.TRUE, diff.getLeft());
+            assertEquals(Boolean.FALSE, diff.getRight());
+        }
     }
 
     @Test
@@ -147,10 +154,11 @@ void testBooleanArray() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.booleanArrayField = new boolean[] { false, false };
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertArrayEquals(ArrayUtils.toObject(class1.booleanArrayField), 
(Object[]) diff.getLeft());
-        assertArrayEquals(ArrayUtils.toObject(class2.booleanArrayField), 
(Object[]) diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertArrayEquals(ArrayUtils.toObject(class1.booleanArrayField), 
(Object[]) diff.getLeft());
+            assertArrayEquals(ArrayUtils.toObject(class2.booleanArrayField), 
(Object[]) diff.getRight());
+        }
     }
 
     @Test
@@ -159,11 +167,12 @@ void testByte() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.byteField = 0x01;
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertEquals(Byte.class, diff.getType(), () -> 
diff.getType().getClass().toString());
-        assertEquals(Byte.valueOf(class1.byteField), diff.getLeft());
-        assertEquals(Byte.valueOf(class2.byteField), diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertEquals(Byte.class, diff.getType(), () -> 
diff.getType().getClass().toString());
+            assertEquals(Byte.valueOf(class1.byteField), diff.getLeft());
+            assertEquals(Byte.valueOf(class2.byteField), diff.getRight());
+        }
     }
 
     @Test
@@ -172,10 +181,11 @@ void testByteArray() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.byteArrayField = new byte[] { 0x01, 0x02 };
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertArrayEquals(ArrayUtils.toObject(class1.byteArrayField), 
(Object[]) diff.getLeft());
-        assertArrayEquals(ArrayUtils.toObject(class2.byteArrayField), 
(Object[]) diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertArrayEquals(ArrayUtils.toObject(class1.byteArrayField), 
(Object[]) diff.getLeft());
+            assertArrayEquals(ArrayUtils.toObject(class2.byteArrayField), 
(Object[]) diff.getRight());
+        }
     }
 
     @Test
@@ -220,10 +230,11 @@ void testChar() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.charField = 'z';
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertEquals(Character.valueOf(class1.charField), diff.getLeft());
-        assertEquals(Character.valueOf(class2.charField), diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertEquals(Character.valueOf(class1.charField), diff.getLeft());
+            assertEquals(Character.valueOf(class2.charField), diff.getRight());
+        }
     }
 
     @Test
@@ -232,10 +243,11 @@ void testCharArray() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.charArrayField = new char[] { 'f', 'o', 'o' };
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertArrayEquals(ArrayUtils.toObject(class1.charArrayField), 
(Object[]) diff.getLeft());
-        assertArrayEquals(ArrayUtils.toObject(class2.charArrayField), 
(Object[]) diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertArrayEquals(ArrayUtils.toObject(class1.charArrayField), 
(Object[]) diff.getLeft());
+            assertArrayEquals(ArrayUtils.toObject(class2.charArrayField), 
(Object[]) diff.getRight());
+        }
     }
 
     @Test
@@ -243,10 +255,10 @@ void testDiffResult() {
         final TypeTestClass class1 = new TypeTestClass();
         final TypeTestClass class2 = new TypeTestClass();
         class2.intField = 2;
-
         final DiffResult<TypeTestClass> list = new DiffBuilder<>(class1, 
class2, SHORT_STYLE).append("prop1", class1.diff(class2)).build();
-        assertEquals(1, list.getNumberOfDiffs());
-        assertEquals("prop1.int", list.getDiffs().get(0).getFieldName());
+        if (assertSingleAccessibleDiff(list)) {
+            assertEquals("prop1.int", list.getDiffs().get(0).getFieldName());
+        }
     }
 
     @Test
@@ -265,10 +277,11 @@ void testDouble() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.doubleField = 99.99;
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertEquals(Double.valueOf(class1.doubleField), diff.getLeft());
-        assertEquals(Double.valueOf(class2.doubleField), diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertEquals(Double.valueOf(class1.doubleField), diff.getLeft());
+            assertEquals(Double.valueOf(class2.doubleField), diff.getRight());
+        }
     }
 
     @Test
@@ -277,10 +290,11 @@ void testDoubleArray() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.doubleArrayField = new double[] { 3.0, 2.9, 2.8 };
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertArrayEquals(ArrayUtils.toObject(class1.doubleArrayField), 
(Object[]) diff.getLeft());
-        assertArrayEquals(ArrayUtils.toObject(class2.doubleArrayField), 
(Object[]) diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertArrayEquals(ArrayUtils.toObject(class1.doubleArrayField), 
(Object[]) diff.getLeft());
+            assertArrayEquals(ArrayUtils.toObject(class2.doubleArrayField), 
(Object[]) diff.getRight());
+        }
     }
 
     @Test
@@ -289,10 +303,11 @@ void testFloat() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.floatField = 99.99F;
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertEquals(Float.valueOf(class1.floatField), diff.getLeft());
-        assertEquals(Float.valueOf(class2.floatField), diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertEquals(Float.valueOf(class1.floatField), diff.getLeft());
+            assertEquals(Float.valueOf(class2.floatField), diff.getRight());
+        }
     }
 
     @Test
@@ -301,10 +316,11 @@ void testFloatArray() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.floatArrayField = new float[] { 3.0F, 2.9F, 2.8F };
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertArrayEquals(ArrayUtils.toObject(class1.floatArrayField), 
(Object[]) diff.getLeft());
-        assertArrayEquals(ArrayUtils.toObject(class2.floatArrayField), 
(Object[]) diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertArrayEquals(ArrayUtils.toObject(class1.floatArrayField), 
(Object[]) diff.getLeft());
+            assertArrayEquals(ArrayUtils.toObject(class2.floatArrayField), 
(Object[]) diff.getRight());
+        }
     }
 
     @Test
@@ -313,10 +329,11 @@ void testInt() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.intField = 42;
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertEquals(Integer.valueOf(class1.intField), diff.getLeft());
-        assertEquals(Integer.valueOf(class2.intField), diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertEquals(Integer.valueOf(class1.intField), diff.getLeft());
+            assertEquals(Integer.valueOf(class2.intField), diff.getRight());
+        }
     }
 
     @Test
@@ -325,10 +342,11 @@ void testIntArray() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.intArrayField = new int[] { 3, 2, 1 };
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertArrayEquals(ArrayUtils.toObject(class1.intArrayField), 
(Object[]) diff.getLeft());
-        assertArrayEquals(ArrayUtils.toObject(class2.intArrayField), 
(Object[]) diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertArrayEquals(ArrayUtils.toObject(class1.intArrayField), 
(Object[]) diff.getLeft());
+            assertArrayEquals(ArrayUtils.toObject(class2.intArrayField), 
(Object[]) diff.getRight());
+        }
     }
 
     @Test
@@ -337,10 +355,11 @@ void testLong() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.longField = 42L;
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertEquals(Long.valueOf(class1.longField), diff.getLeft());
-        assertEquals(Long.valueOf(class2.longField), diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertEquals(Long.valueOf(class1.longField), diff.getLeft());
+            assertEquals(Long.valueOf(class2.longField), diff.getRight());
+        }
     }
 
     @Test
@@ -349,10 +368,11 @@ void testLongArray() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.longArrayField = new long[] { 3L, 2L, 1L };
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertArrayEquals(ArrayUtils.toObject(class1.longArrayField), 
(Object[]) diff.getLeft());
-        assertArrayEquals(ArrayUtils.toObject(class2.longArrayField), 
(Object[]) diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertArrayEquals(ArrayUtils.toObject(class1.longArrayField), 
(Object[]) diff.getLeft());
+            assertArrayEquals(ArrayUtils.toObject(class2.longArrayField), 
(Object[]) diff.getRight());
+        }
     }
 
     @Test
@@ -371,11 +391,12 @@ void testNestedDiffableYesNestedNot() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.intField = 9;
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertEquals(Integer.class, diff.getType());
-        assertEquals(1, diff.getLeft());
-        assertEquals(9, diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertEquals(Integer.class, diff.getType());
+            assertEquals(1, diff.getLeft());
+            assertEquals(9, diff.getRight());
+        }
     }
 
     @Test
@@ -384,11 +405,12 @@ void testNestedDiffableYesNestedOnly() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.nestedDiffableField.booleanField = false;
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertEquals(Object.class, diff.getType());
-        assertEquals(Boolean.TRUE, diff.getLeft());
-        assertEquals(Boolean.FALSE, diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertEquals(Object.class, diff.getType());
+            assertEquals(Boolean.TRUE, diff.getLeft());
+            assertEquals(Boolean.FALSE, diff.getRight());
+        }
     }
 
     @Test
@@ -398,15 +420,17 @@ void testNestedDiffableYesNestedYes() {
         class2.intField = 9;
         class2.nestedDiffableField.booleanField = false;
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(2, list.getNumberOfDiffs());
-        final Diff<?> diff0 = list.getDiffs().get(0);
-        assertEquals(Integer.class, diff0.getType());
-        assertEquals(1, diff0.getLeft());
-        assertEquals(9, diff0.getRight());
-        final Diff<?> diff1 = list.getDiffs().get(1);
-        assertEquals(Object.class, diff1.getType());
-        assertEquals(Boolean.TRUE, diff1.getLeft());
-        assertEquals(Boolean.FALSE, diff1.getRight());
+        assertEquals(isForceAccessible() ? 2 : 0, list.getNumberOfDiffs());
+        if (isForceAccessible()) {
+            final Diff<?> diff0 = list.getDiffs().get(0);
+            assertEquals(Integer.class, diff0.getType());
+            assertEquals(1, diff0.getLeft());
+            assertEquals(9, diff0.getRight());
+            final Diff<?> diff1 = list.getDiffs().get(1);
+            assertEquals(Object.class, diff1.getType());
+            assertEquals(Boolean.TRUE, diff1.getLeft());
+            assertEquals(Boolean.FALSE, diff1.getRight());
+        }
     }
 
     @Test
@@ -435,10 +459,11 @@ void testObject() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.objectField = "Some string";
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertEquals(class1.objectField, diff.getLeft());
-        assertEquals(class2.objectField, diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertEquals(class1.objectField, diff.getLeft());
+            assertEquals(class2.objectField, diff.getRight());
+        }
     }
 
     @Test
@@ -447,10 +472,11 @@ void testObjectArray() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.objectArrayField = new Object[] { "string", 1, 2 };
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertArrayEquals(class1.objectArrayField, (Object[]) diff.getLeft());
-        assertArrayEquals(class2.objectArrayField, (Object[]) diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertArrayEquals(class1.objectArrayField, (Object[]) 
diff.getLeft());
+            assertArrayEquals(class2.objectArrayField, (Object[]) 
diff.getRight());
+        }
     }
 
     @Test
@@ -492,7 +518,8 @@ void testObjectsNotSameNorEqual() {
         assertNotEquals(left.objectField, right.objectField);
 
         final DiffResult<TypeTestClass> list = left.diff(right);
-        assertEquals(1, list.getNumberOfDiffs());
+        assertSingleAccessibleDiff(list);
+
     }
 
     /**
@@ -525,10 +552,11 @@ void testShort() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.shortField = 42;
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertEquals(Short.valueOf(class1.shortField), diff.getLeft());
-        assertEquals(Short.valueOf(class2.shortField), diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertEquals(Short.valueOf(class1.shortField), diff.getLeft());
+            assertEquals(Short.valueOf(class2.shortField), diff.getRight());
+        }
     }
 
     @Test
@@ -537,10 +565,11 @@ void testShortArray() {
         final TypeTestClass class2 = new TypeTestClass();
         class2.shortArrayField = new short[] { 3, 2, 1 };
         final DiffResult<TypeTestClass> list = class1.diff(class2);
-        assertEquals(1, list.getNumberOfDiffs());
-        final Diff<?> diff = list.getDiffs().get(0);
-        assertArrayEquals(ArrayUtils.toObject(class1.shortArrayField), 
(Object[]) diff.getLeft());
-        assertArrayEquals(ArrayUtils.toObject(class2.shortArrayField), 
(Object[]) diff.getRight());
+        if (assertSingleAccessibleDiff(list)) {
+            final Diff<?> diff = list.getDiffs().get(0);
+            assertArrayEquals(ArrayUtils.toObject(class1.shortArrayField), 
(Object[]) diff.getLeft());
+            assertArrayEquals(ArrayUtils.toObject(class2.shortArrayField), 
(Object[]) diff.getRight());
+        }
     }
 
     @Test
@@ -548,7 +577,7 @@ void testSimilarObjectIgnoresAppends() {
         final TypeTestClass testClass1 = new TypeTestClass();
         final TypeTestClass testClass2 = new TypeTestClass();
         final DiffResult<TypeTestClass> list = new DiffBuilder<>(testClass1, 
testClass2, SHORT_STYLE).append("ignored", false, true).build();
-        assertEquals(accessibleFlag() ? 0 : 1, list.getNumberOfDiffs());
+        assertEquals(0, list.getNumberOfDiffs());
     }
 
     @Test
diff --git 
a/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderNoForceTest.java 
b/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderNoForceTest.java
index 61aa9ab64..cff1df464 100644
--- 
a/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderNoForceTest.java
+++ 
b/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderNoForceTest.java
@@ -17,8 +17,6 @@
 
 package org.apache.commons.lang3.builder;
 
-import static org.junit.jupiter.api.Assertions.assertFalse;
-
 import java.util.HashMap;
 
 import org.junit.jupiter.api.Test;
@@ -32,13 +30,13 @@ public class EqualsBuilderNoForceTest extends 
EqualsBuilderTest {
 
     @Test
     void testReflectionOnCustomArrayList() {
-        assertFalse(EqualsBuilder.reflectionEquals(new TestArrayList(1, "2", 
"3", "4"), new TestArrayList(1, "2", "3", "4")));
-        assertFalse(EqualsBuilder.reflectionEquals(new TestArrayList(1, "2", 
"3", "4"), new TestArrayList(2, "2", "3", "4")));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestArrayList(1, "2", "3", "4"), new TestArrayList(1, "2", "3", "4")));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestArrayList(1, "2", "3", "4"), new TestArrayList(2, "2", "3", "4")));
     }
 
     @Test
     void testReflectionOnCustomHashMap() {
-        assertFalse(EqualsBuilder.reflectionEquals(new TestHashMap(1, new 
HashMap<>()), new TestHashMap(1, new HashMap<>())));
-        assertFalse(EqualsBuilder.reflectionEquals(new TestHashMap(1, new 
HashMap<>()), new TestHashMap(2, new HashMap<>())));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestHashMap(1, new HashMap<>()), new TestHashMap(1, new HashMap<>())));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestHashMap(1, new HashMap<>()), new TestHashMap(2, new HashMap<>())));
     }
 }
diff --git 
a/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderReflectJreImplementationTest.java
 
b/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderReflectJreImplementationTest.java
index 929ea2af4..e9520dd40 100644
--- 
a/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderReflectJreImplementationTest.java
+++ 
b/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderReflectJreImplementationTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.commons.lang3.builder;
 
-import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.time.Duration;
@@ -259,26 +259,45 @@ public String toString() {
 
     }
 
+    private EqualsBuilder newRecursive() {
+        return new EqualsBuilder().setTestRecursive(true);
+    }
+
     @Test
     void testRecursive() {
+        // assertions are tricky to to the subclass
         final MyClass o1 = new MyClass(new MyCharSequence("1"), new 
MyTemporal("2"), new MyTemporalAccessor("3"), new MyTemporalAmount("4"));
         // This gives you different instances of MyTemporalAccessor for 1 (and 
2) that should be equals by reflection.
         final MyClass o1Bis = new MyClass(new MyCharSequence("1"), new 
MyTemporal("2"), new MyTemporalAccessor("3"), new MyTemporalAmount("4"));
         final MyClass o2 = new MyClass(new MyCharSequence("5"), new 
MyTemporal("6"), new MyTemporalAccessor("7"), new MyTemporalAmount("8"));
         final MyClass o2Bis = new MyClass(new MyCharSequence("5"), new 
MyTemporal("6"), new MyTemporalAccessor("7"), new MyTemporalAmount("8"));
         // MyTemporal
-        assertTrueIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(new MyTemporal("1"), new 
MyTemporal("1")).isEquals());
+        final EqualsBuilder builder1 = newRecursive();
+        boolean defaultEq = builder1.isEquals();
+        assertEquals(defaultEq, builder1.append(new MyTemporal("1"), new 
MyTemporal("1")).isEquals());
         // MyTemporalAccessor
-        assertTrueIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(new MyTemporalAccessor("1"), new 
MyTemporalAccessor("1")).isEquals());
+        final EqualsBuilder builder2 = newRecursive();
+        defaultEq = builder2.isEquals();
+        assertEquals(defaultEq, builder2.append(new MyTemporalAccessor("1"), 
new MyTemporalAccessor("1")).isEquals());
         // MyCharSequence
-        assertTrueIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(new MyCharSequence("1"), new 
MyCharSequence("1")).isEquals());
+        final EqualsBuilder builder3 = newRecursive();
+        defaultEq = builder3.isEquals();
+        assertEquals(defaultEq, builder3.append(new MyCharSequence("1"), new 
MyCharSequence("1")).isEquals());
         // MyClass
-        assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1, 
o1).isEquals(), o1::toString);
-        assertTrueIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o1, o1Bis).isEquals(), 
o1::toString);
-        assertTrue(new EqualsBuilder().setTestRecursive(true).append(o2, 
o2).isEquals(), o2::toString);
-        assertTrueIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o2, o2Bis).isEquals(), 
o2::toString);
-        assertFalse(new EqualsBuilder().setTestRecursive(true).append(o1, 
o2).isEquals());
-        assertFalse(new EqualsBuilder().setTestRecursive(true).append(o2, 
o1).isEquals());
+        assertTrue(newRecursive().append(o1, o1).isEquals(), o1::toString);
+        final EqualsBuilder builder4 = newRecursive();
+        defaultEq = builder4.isEquals();
+        assertEquals(defaultEq, builder4.append(o1, o1Bis).isEquals(), 
o1::toString);
+        assertTrue(newRecursive().append(o2, o2).isEquals(), o2::toString);
+        final EqualsBuilder builder5 = newRecursive();
+        defaultEq = builder5.isEquals();
+        assertEquals(defaultEq, builder5.append(o2, o2Bis).isEquals(), 
o2::toString);
+        // not equal normally (see subclass)
+        final EqualsBuilder builder6 = newRecursive();
+        defaultEq = !isForceAccessible();
+        assertEquals(defaultEq, builder6.append(o1, o2).isEquals());
+        final EqualsBuilder builder7 = newRecursive();
+        assertEquals(defaultEq, builder7.append(o2, o1).isEquals());
     }
 
     @Test
@@ -286,7 +305,7 @@ void testRetention() throws Exception {
         // The following should not retain memory.
         for (int i = 0; i < Integer.getInteger("testRetention", 10_000); i++) {
             final Class<?> clazz = 
TestClassBuilder.defineSimpleClass(getClass().getPackage().getName(), i);
-            assertTrue(new 
EqualsBuilder().setTestRecursive(true).append(clazz.newInstance(), 
clazz.newInstance()).isEquals());
+            assertTrue(newRecursive().append(clazz.newInstance(), 
clazz.newInstance()).isEquals());
         }
         // some retention is checked in super's after().
     }
diff --git 
a/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java 
b/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java
index e1ff81ed4..d33d53e78 100644
--- a/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java
+++ b/src/test/java/org/apache/commons/lang3/builder/EqualsBuilderTest.java
@@ -606,9 +606,9 @@ void testCyclicalObjectReferences() {
         x3.setObjectReference(refX3);
         refX3.setObjectReference(x3);
 
-        assertTrueIfAccessible(x1.equals(x2));
-        assertNotEquals(x1, x3);
-        assertNotEquals(x2, x3);
+        assertTrue(x1.equals(x2));
+        assertNotEqualsIfAccessible(x1, x3);
+        assertNotEqualsIfAccessible(x2, x3);
     }
 
     @Test
@@ -1096,12 +1096,12 @@ void testObjectRecursive() {
         final TestRecursiveObject oNull = new TestRecursiveObject(null, null, 
2);
 
         assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1A, 
o1A).isEquals());
-        assertTrueIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o1A, o1B).isEquals());
+        assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1A, 
o1B).isEquals());
 
-        assertFalse(new EqualsBuilder().setTestRecursive(true).append(o1A, 
o2).isEquals());
+        assertFalseIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o1A, o2).isEquals());
 
         assertTrue(new EqualsBuilder().setTestRecursive(true).append(oNull, 
oNull).isEquals());
-        assertFalse(new EqualsBuilder().setTestRecursive(true).append(o1A, 
oNull).isEquals());
+        assertFalseIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o1A, oNull).isEquals());
     }
 
     @Test
@@ -1119,11 +1119,11 @@ void testObjectRecursiveCycle() {
         o2.setCycle(i2);
 
         assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1A, 
o1A).isEquals());
-        assertTrueIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o1A, o1B).isEquals());
-        assertFalse(new EqualsBuilder().setTestRecursive(true).append(o1A, 
o2).isEquals());
+        assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1A, 
o1B).isEquals());
+        assertFalseIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o1A, o2).isEquals());
 
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(o1A, o1B, false, 
null, true));
-        assertFalse(EqualsBuilder.reflectionEquals(o1A, o2, false, null, 
true));
+        assertTrue(EqualsBuilder.reflectionEquals(o1A, o1B, false, null, 
true));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(o1A, o2, false, 
null, true));
     }
 
     @Test
@@ -1133,8 +1133,8 @@ void testObjectRecursiveCycleSelfreference() {
         final TestRecursiveCycleObject o2 = new TestRecursiveCycleObject(2);
 
         assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1A, 
o1A).isEquals());
-        assertTrueIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o1A, o1B).isEquals());
-        assertFalse(new EqualsBuilder().setTestRecursive(true).append(o1A, 
o2).isEquals());
+        assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1A, 
o1B).isEquals());
+        assertFalseIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o1A, o2).isEquals());
     }
 
     @Test
@@ -1143,10 +1143,10 @@ void testObjectRecursiveGenericInteger() {
         final TestRecursiveGenericObject<Integer> o1B = new 
TestRecursiveGenericObject<>(1);
         final TestRecursiveGenericObject<Integer> o2 = new 
TestRecursiveGenericObject<>(2);
 
-        assertTrueIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o1A, o1B).isEquals());
-        assertTrueIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o1B, o1A).isEquals());
+        assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1A, 
o1B).isEquals());
+        assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1B, 
o1A).isEquals());
 
-        assertFalse(new EqualsBuilder().setTestRecursive(true).append(o1B, 
o2).isEquals());
+        assertFalseIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o1B, o2).isEquals());
     }
 
     @Test
@@ -1160,10 +1160,10 @@ void testObjectRecursiveGenericString() {
         // To trigger bug reported in LANG-1356, call hashCode only on string 
in instance o1_a
         s1A.hashCode();
 
-        assertTrueIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o1A, o1B).isEquals());
-        assertTrueIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o1B, o1A).isEquals());
+        assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1A, 
o1B).isEquals());
+        assertTrue(new EqualsBuilder().setTestRecursive(true).append(o1B, 
o1A).isEquals());
 
-        assertFalse(new EqualsBuilder().setTestRecursive(true).append(o1B, 
o2).isEquals());
+        assertFalseIfAccessible(new 
EqualsBuilder().setTestRecursive(true).append(o1B, o2).isEquals());
     }
 
     @Test
@@ -1199,11 +1199,11 @@ void testReflectionAppend() {
         final TestObject o1 = new TestObject(4);
         final TestObject o2 = new TestObject(5);
         assertTrue(new EqualsBuilder().reflectionAppend(o1, o1).build());
-        assertFalse(new EqualsBuilder().reflectionAppend(o1, o2).build());
-        assertFalse(new EqualsBuilder().reflectionAppend(o1, 
o2).reflectionAppend(o1, o1).build());
+        assertFalseIfAccessible(new EqualsBuilder().reflectionAppend(o1, 
o2).build());
+        assertFalseIfAccessible(new EqualsBuilder().reflectionAppend(o1, 
o2).reflectionAppend(o1, o1).build());
 
         o2.setA(4);
-        assertTrueIfAccessible(new EqualsBuilder().reflectionAppend(o1, 
o2).build());
+        assertTrue(new EqualsBuilder().reflectionAppend(o1, o2).build());
 
         assertFalse(new EqualsBuilder().reflectionAppend(o1, this).build());
 
@@ -1239,9 +1239,9 @@ void testReflectionEquals() {
         final TestObject o1 = new TestObject(4);
         final TestObject o2 = new TestObject(5);
         assertTrue(EqualsBuilder.reflectionEquals(o1, o1));
-        assertFalse(EqualsBuilder.reflectionEquals(o1, o2));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(o1, o2));
         o2.setA(4);
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(o1, o2));
+        assertTrue(EqualsBuilder.reflectionEquals(o1, o2));
 
         assertFalse(EqualsBuilder.reflectionEquals(o1, this));
 
@@ -1274,32 +1274,28 @@ private void 
testReflectionEqualsEquivalenceRelationship(
             final TestObject to2,
             final TestObject oToChange,
             final boolean testTransients) {
-
         // reflection test
         assertTrue(EqualsBuilder.reflectionEquals(to, to, testTransients));
         assertTrue(EqualsBuilder.reflectionEquals(to2, to2, testTransients));
         // symmetry test
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(to, toBis, 
testTransients) && EqualsBuilder.reflectionEquals(toBis, to, testTransients));
+        assertTrue(EqualsBuilder.reflectionEquals(to, toBis, testTransients) 
&& EqualsBuilder.reflectionEquals(toBis, to, testTransients));
         // transitive test
-        assertEquals(accessibleFlag(),
-                EqualsBuilder.reflectionEquals(to, toBis, testTransients)
-                        && EqualsBuilder.reflectionEquals(toBis, toTer, 
testTransients)
-                        && EqualsBuilder.reflectionEquals(to, toTer, 
testTransients));
-
+        assertTrue(EqualsBuilder.reflectionEquals(to, toBis, testTransients)
+                && EqualsBuilder.reflectionEquals(toBis, toTer, testTransients)
+                && EqualsBuilder.reflectionEquals(to, toTer, testTransients));
         // consistency test
         oToChange.setA(to.getA());
         if (oToChange instanceof TestSubObject) {
             ((TestSubObject) oToChange).setB(((TestSubObject) to).getB());
         }
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(oToChange, to, 
testTransients));
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(oToChange, to, 
testTransients));
+        assertTrue(EqualsBuilder.reflectionEquals(oToChange, to, 
testTransients));
+        assertTrue(EqualsBuilder.reflectionEquals(oToChange, to, 
testTransients));
         oToChange.setA(to.getA() + 1);
         if (oToChange instanceof TestSubObject) {
             ((TestSubObject) oToChange).setB(((TestSubObject) to).getB() + 1);
         }
-        assertFalse(EqualsBuilder.reflectionEquals(oToChange, to, 
testTransients));
-        assertFalse(EqualsBuilder.reflectionEquals(oToChange, to, 
testTransients));
-
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(oToChange, to, 
testTransients));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(oToChange, to, 
testTransients));
         // non-null reference test
         assertFalse(EqualsBuilder.reflectionEquals(to, null, testTransients));
         assertFalse(EqualsBuilder.reflectionEquals(to2, null, testTransients));
@@ -1314,19 +1310,19 @@ void testReflectionEqualsExcludeFields() {
         final TestObjectWithMultipleFields x2 = new 
TestObjectWithMultipleFields(1, 3, 4);
 
         // not equal when including all fields
-        assertFalse(EqualsBuilder.reflectionEquals(x1, x2));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(x1, x2));
 
         // doesn't barf on null, empty array, or non-existent field, but still 
tests as not equal
-        assertFalse(EqualsBuilder.reflectionEquals(x1, x2, (String[]) null));
-        assertFalse(EqualsBuilder.reflectionEquals(x1, x2));
-        assertFalse(EqualsBuilder.reflectionEquals(x1, x2, "xxx"));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(x1, x2, 
(String[]) null));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(x1, x2));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(x1, x2, "xxx"));
 
         // not equal if only one of the differing fields excluded
-        assertFalse(EqualsBuilder.reflectionEquals(x1, x2, "two"));
-        assertFalse(EqualsBuilder.reflectionEquals(x1, x2, "three"));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(x1, x2, "two"));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(x1, x2, 
"three"));
 
         // equal if both differing fields excluded
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(x1, x2, "two", 
"three"));
+        assertTrue(EqualsBuilder.reflectionEquals(x1, x2, "two", "three"));
 
         // still equal as long as both differing fields are among excluded
         assertTrue(EqualsBuilder.reflectionEquals(x1, x2, "one", "two", 
"three"));
@@ -1343,11 +1339,11 @@ void testReflectionHierarchyEquals() {
         testReflectionHierarchyEquals(false);
         testReflectionHierarchyEquals(true);
         // Transients
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(new 
TestTTLeafObject(1, 2, 3, 4), new TestTTLeafObject(1, 2, 3, 4), true));
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(new 
TestTTLeafObject(1, 2, 3, 4), new TestTTLeafObject(1, 2, 3, 4), false));
-        assertFalse(EqualsBuilder.reflectionEquals(new TestTTLeafObject(1, 0, 
0, 4), new TestTTLeafObject(1, 2, 3, 4), true));
-        assertFalse(EqualsBuilder.reflectionEquals(new TestTTLeafObject(1, 2, 
3, 4), new TestTTLeafObject(1, 2, 3, 0), true));
-        assertFalse(EqualsBuilder.reflectionEquals(new TestTTLeafObject(0, 2, 
3, 4), new TestTTLeafObject(1, 2, 3, 4), true));
+        assertTrue(EqualsBuilder.reflectionEquals(new TestTTLeafObject(1, 2, 
3, 4), new TestTTLeafObject(1, 2, 3, 4), true));
+        assertTrue(EqualsBuilder.reflectionEquals(new TestTTLeafObject(1, 2, 
3, 4), new TestTTLeafObject(1, 2, 3, 4), false));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestTTLeafObject(1, 0, 0, 4), new TestTTLeafObject(1, 2, 3, 4), true));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestTTLeafObject(1, 2, 3, 4), new TestTTLeafObject(1, 2, 3, 0), true));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestTTLeafObject(0, 2, 3, 4), new TestTTLeafObject(1, 2, 3, 4), true));
     }
 
     private void testReflectionHierarchyEquals(final boolean testTransients) {
@@ -1371,38 +1367,38 @@ private void testReflectionHierarchyEquals(final 
boolean testTransients) {
 
         // same values
         assertTrue(EqualsBuilder.reflectionEquals(ttlo, ttlo, testTransients));
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(new 
TestSubObject(1, 10), new TestSubObject(1, 10), testTransients));
+        assertTrue(EqualsBuilder.reflectionEquals(new TestSubObject(1, 10), 
new TestSubObject(1, 10), testTransients));
         // same super values, diff sub values
-        assertFalse(EqualsBuilder.reflectionEquals(new TestSubObject(1, 10), 
new TestSubObject(1, 11), testTransients));
-        assertFalse(EqualsBuilder.reflectionEquals(new TestSubObject(1, 11), 
new TestSubObject(1, 10), testTransients));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestSubObject(1, 10), new TestSubObject(1, 11), testTransients));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestSubObject(1, 11), new TestSubObject(1, 10), testTransients));
         // diff super values, same sub values
-        assertFalse(EqualsBuilder.reflectionEquals(new TestSubObject(0, 10), 
new TestSubObject(1, 10), testTransients));
-        assertFalse(EqualsBuilder.reflectionEquals(new TestSubObject(1, 10), 
new TestSubObject(0, 10), testTransients));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestSubObject(0, 10), new TestSubObject(1, 10), testTransients));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestSubObject(1, 10), new TestSubObject(0, 10), testTransients));
 
         // mix super and sub types: equals
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(to1, teso, 
testTransients));
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(teso, to1, 
testTransients));
+        assertTrue(EqualsBuilder.reflectionEquals(to1, teso, testTransients));
+        assertTrue(EqualsBuilder.reflectionEquals(teso, to1, testTransients));
 
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(to1, ttso, 
false)); // Force testTransients = false for this assert
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(ttso, to1, 
false)); // Force testTransients = false for this assert
+        assertTrue(EqualsBuilder.reflectionEquals(to1, ttso, false)); // Force 
testTransients = false for this assert
+        assertTrue(EqualsBuilder.reflectionEquals(ttso, to1, false)); // Force 
testTransients = false for this assert
 
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(to1, tttso, 
false)); // Force testTransients = false for this assert
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(tttso, to1, 
false)); // Force testTransients = false for this assert
+        assertTrue(EqualsBuilder.reflectionEquals(to1, tttso, false)); // 
Force testTransients = false for this assert
+        assertTrue(EqualsBuilder.reflectionEquals(tttso, to1, false)); // 
Force testTransients = false for this assert
 
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(ttso, tttso, 
false)); // Force testTransients = false for this assert
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(tttso, ttso, 
false)); // Force testTransients = false for this assert
+        assertTrue(EqualsBuilder.reflectionEquals(ttso, tttso, false)); // 
Force testTransients = false for this assert
+        assertTrue(EqualsBuilder.reflectionEquals(tttso, ttso, false)); // 
Force testTransients = false for this assert
 
         // mix super and sub types: NOT equals
-        assertFalse(EqualsBuilder.reflectionEquals(new TestObject(0), new 
TestEmptySubObject(1), testTransients));
-        assertFalse(EqualsBuilder.reflectionEquals(new TestEmptySubObject(1), 
new TestObject(0), testTransients));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestObject(0), new TestEmptySubObject(1), testTransients));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestEmptySubObject(1), new TestObject(0), testTransients));
 
-        assertFalse(EqualsBuilder.reflectionEquals(new TestObject(0), new 
TestTSubObject(1, 1), testTransients));
-        assertFalse(EqualsBuilder.reflectionEquals(new TestTSubObject(1, 1), 
new TestObject(0), testTransients));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestObject(0), new TestTSubObject(1, 1), testTransients));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestTSubObject(1, 1), new TestObject(0), testTransients));
 
-        assertFalse(EqualsBuilder.reflectionEquals(new TestObject(1), new 
TestSubObject(0, 10), testTransients));
-        assertFalse(EqualsBuilder.reflectionEquals(new TestSubObject(0, 10), 
new TestObject(1), testTransients));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestObject(1), new TestSubObject(0, 10), testTransients));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(new 
TestSubObject(0, 10), new TestObject(1), testTransients));
 
-        assertFalse(EqualsBuilder.reflectionEquals(to1, ttlo));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(to1, ttlo));
         assertFalse(EqualsBuilder.reflectionEquals(tso1, this));
     }
 
@@ -1494,12 +1490,12 @@ void testToEqualsExclude() {
         TestObjectEqualsExclude one = new TestObjectEqualsExclude(1, 2);
         TestObjectEqualsExclude two = new TestObjectEqualsExclude(1, 3);
 
-        assertFalse(EqualsBuilder.reflectionEquals(one, two));
+        assertFalseIfAccessible(EqualsBuilder.reflectionEquals(one, two));
 
         one = new TestObjectEqualsExclude(1, 2);
         two = new TestObjectEqualsExclude(2, 2);
 
-        assertTrueIfAccessible(EqualsBuilder.reflectionEquals(one, two));
+        assertTrue(EqualsBuilder.reflectionEquals(one, two));
     }
 
     /**
diff --git a/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java 
b/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java
index 01abeaf54..07f4ab81b 100644
--- a/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/StopWatchTest.java
@@ -267,6 +267,12 @@ void testGetStartTime() {
         assertThrows(IllegalStateException.class, watch::getStartTime, 
"Calling getStartTime on a reset, but unstarted StopWatch should throw an 
exception");
     }
 
+    @Test
+    void testGetStopTime() throws InterruptedException {
+        final StopWatch watch = StopWatch.createStarted();
+        assertEquals(0, watch.getStopTime());
+    }
+
     @RepeatedTest(10)
     void testGetTime() throws InterruptedException {
         final StopWatch watch = new StopWatch();
@@ -445,12 +451,6 @@ void testStatic() {
         assertTrue(watch.isStarted());
     }
 
-    @Test
-    void testGetStopTime() throws InterruptedException {
-        final StopWatch watch = StopWatch.createStarted();
-        assertEquals(0, watch.getStopTime());
-    }
-
     @Test
     void testStopInstantSimple() throws InterruptedException {
         final StopWatch watch = StopWatch.createStarted();

Reply via email to