diff --git a/src/test/java/org/apache/commons/io/CharsetsTest.java b/src/test/java/org/apache/commons/io/CharsetsTest.java
index b185452..8594011 100644
--- a/src/test/java/org/apache/commons/io/CharsetsTest.java
+++ b/src/test/java/org/apache/commons/io/CharsetsTest.java
@@ -18,6 +18,7 @@
 package org.apache.commons.io;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
@@ -87,10 +88,10 @@
 
     @Test
     public void testToCharset_String_Charset() {
-        assertEquals(null, Charsets.toCharset((String) null, null));
+        assertNull(Charsets.toCharset((String) null, null));
         assertEquals(Charset.defaultCharset(), Charsets.toCharset((String) null, Charset.defaultCharset()));
         assertEquals(Charset.defaultCharset(), Charsets.toCharset((Charset) null, Charset.defaultCharset()));
-        assertEquals(null, Charsets.toCharset((Charset) null, null));
+        assertNull(Charsets.toCharset((Charset) null, null));
         assertEquals(Charset.defaultCharset(), Charsets.toCharset(Charset.defaultCharset(), Charset.defaultCharset()));
         assertEquals(StandardCharsets.UTF_8, Charsets.toCharset(StandardCharsets.UTF_8, Charset.defaultCharset()));
         assertEquals(StandardCharsets.UTF_8, Charsets.toCharset(StandardCharsets.UTF_8, null));
diff --git a/src/test/java/org/apache/commons/io/filefilter/FileFilterTest.java b/src/test/java/org/apache/commons/io/filefilter/FileFilterTest.java
index 5fa60e3..13eb583 100644
--- a/src/test/java/org/apache/commons/io/filefilter/FileFilterTest.java
+++ b/src/test/java/org/apache/commons/io/filefilter/FileFilterTest.java
@@ -52,6 +52,7 @@
 import org.apache.commons.io.test.TestUtils;
 import org.apache.commons.lang3.SystemUtils;
 import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Tests {@link FileFilterUtils}.
@@ -650,7 +651,7 @@
         final IOFileFilter filter = FileFilterUtils.trueFileFilter();
         List<File> filteredList = FileFilterUtils.filterList(filter, Collections.singletonList(null));
         assertEquals(1, filteredList.size());
-        assertEquals(null, filteredList.get(0));
+        assertNull(filteredList.get(0));
 
         filteredList = FileFilterUtils.filterList(filter, (List<File>) null);
         assertEquals(0, filteredList.size());
diff --git a/src/test/java/org/apache/commons/io/function/IOBiFunctionTest.java b/src/test/java/org/apache/commons/io/function/IOBiFunctionTest.java
index af05646..350a351 100644
--- a/src/test/java/org/apache/commons/io/function/IOBiFunctionTest.java
+++ b/src/test/java/org/apache/commons/io/function/IOBiFunctionTest.java
@@ -17,9 +17,10 @@
 
 package org.apache.commons.io.function;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.IOException;
 import java.nio.file.Files;
@@ -50,9 +51,9 @@
     public void testAndThenIOFunction() throws IOException {
         final IOBiFunction<Path, LinkOption[], Boolean> isDirectory = Files::isDirectory;
         final IOFunction<Boolean, Boolean> not = this::not;
-        assertEquals(true, isDirectory.apply(PathUtils.current(), PathUtils.EMPTY_LINK_OPTION_ARRAY));
+        assertTrue( isDirectory.apply(PathUtils.current(), PathUtils.EMPTY_LINK_OPTION_ARRAY));
         final IOBiFunction<Path, LinkOption[], Boolean> andThen = isDirectory.andThen(not);
-        assertEquals(false, andThen.apply(PathUtils.current(), PathUtils.EMPTY_LINK_OPTION_ARRAY));
+        assertFalse(andThen.apply(PathUtils.current(), PathUtils.EMPTY_LINK_OPTION_ARRAY));
     }
 
     /**
@@ -63,7 +64,7 @@
     @Test
     public void testApply() throws IOException {
         final IOBiFunction<Path, LinkOption[], Boolean> isDirectory = Files::isDirectory;
-        assertEquals(true, isDirectory.apply(PathUtils.current(), PathUtils.EMPTY_LINK_OPTION_ARRAY));
+        assertTrue( isDirectory.apply(PathUtils.current(), PathUtils.EMPTY_LINK_OPTION_ARRAY));
     }
 
     /**
diff --git a/src/test/java/org/apache/commons/io/function/IOSpliteratorTest.java b/src/test/java/org/apache/commons/io/function/IOSpliteratorTest.java
index e970488..ba377b3 100644
--- a/src/test/java/org/apache/commons/io/function/IOSpliteratorTest.java
+++ b/src/test/java/org/apache/commons/io/function/IOSpliteratorTest.java
@@ -114,7 +114,7 @@
 
     @Test
     public void testHasCharacteristics() {
-        assertEquals(true, spliterator.hasCharacteristics(spliterator.characteristics()));
+        assertTrue( spliterator.hasCharacteristics(spliterator.characteristics()));
         assertEquals(spliterator.unwrap().hasCharacteristics(spliterator.unwrap().characteristics()),
             spliterator.hasCharacteristics(spliterator.characteristics()));
         assertEquals(spliterator.unwrap().hasCharacteristics(spliterator.unwrap().characteristics()),
diff --git a/src/test/java/org/apache/commons/io/function/IOStreamTest.java b/src/test/java/org/apache/commons/io/function/IOStreamTest.java
index 08f7e44..71f5182 100644
--- a/src/test/java/org/apache/commons/io/function/IOStreamTest.java
+++ b/src/test/java/org/apache/commons/io/function/IOStreamTest.java
@@ -462,7 +462,7 @@
         if (AT_LEAST_JAVA_11) {
             assertEquals(1, IOStream.of("B").peek(e -> compareAndSetRE(ref, null, e)).count());
             assertEquals(1, IOStream.of("B").peek(e -> compareAndSetIO(ref, null, e)).count());
-            assertEquals(null, ref.get());
+            assertNull(ref.get());
         } else {
             // Java 8
             assertThrows(RuntimeException.class, () -> IOStream.of("B").peek(e -> compareAndSetRE(ref, null, e)).count());
