You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2020/08/23 21:36:04 UTC

[logging-log4j2] branch master updated: [LOG4J2-2653] Migrate pattern tests to JUnit 5

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

mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/master by this push:
     new 334448c  [LOG4J2-2653] Migrate pattern tests to JUnit 5
334448c is described below

commit 334448c5e6403ce21466d31507b097cfcef45296
Author: Matt Sicker <bo...@gmail.com>
AuthorDate: Sun Aug 23 16:33:30 2020 -0500

    [LOG4J2-2653] Migrate pattern tests to JUnit 5
    
    Signed-off-by: Matt Sicker <bo...@gmail.com>
---
 .../logging/log4j/core/LogEventFactoryTest.java    |  2 +-
 .../log4j/core/pattern/CallerInformationTest.java  | 29 ++++-----
 .../log4j/core/pattern/DisableAnsiTest.java        | 28 ++++----
 .../core/pattern/EncodingPatternConverterTest.java | 17 ++---
 .../pattern/EndOfBatchPatternConverterTest.java    |  4 +-
 .../EqualsIgnoreCaseReplacementConverterTest.java  | 10 ++-
 .../pattern/EqualsReplacementConverterTest.java    |  9 ++-
 .../ExtendedThrowablePatternConverterTest.java     | 28 ++++----
 .../log4j/core/pattern/ExtendedThrowableTest.java  | 30 ++++-----
 .../log4j/core/pattern/FormattingInfoTest.java     |  4 +-
 .../log4j/core/pattern/HighlightConverterTest.java | 38 +++++------
 .../core/pattern/LevelPatternConverterTest.java    |  7 +-
 .../core/pattern/LiteralPatternConverterTest.java  |  4 +-
 .../pattern/LoggerFqcnPatternConverterTest.java    |  4 +-
 .../core/pattern/MapPatternConverterTest.java      | 19 +++---
 .../core/pattern/MarkerPatternConverterTest.java   |  4 +-
 .../MarkerSimpleNamePatternConverterTest.java      |  6 +-
 .../log4j/core/pattern/MaxLengthConverterTest.java | 16 ++---
 .../core/pattern/MdcPatternConverterTest.java      | 36 ++++++-----
 .../core/pattern/MessageJansiConverterTest.java    | 32 ++++------
 .../core/pattern/MessagePatternConverterTest.java  | 52 +++++++--------
 .../core/pattern/MessageStyledConverterTest.java   | 32 ++++------
 .../core/pattern/NanoTimePatternConverterTest.java |  7 +-
 .../core/pattern/NdcPatternConverterTest.java      | 24 +++++--
 .../log4j/core/pattern/NoConsoleNoAnsiTest.java    | 34 +++++-----
 .../log4j/core/pattern/PatternParserTest.java      | 47 ++++++--------
 .../log4j/core/pattern/PatternParserTest2.java     |  7 +-
 .../pattern/ProcessIdPatternConverterTest.java     |  9 +--
 .../pattern/RegexReplacementConverterTest.java     |  8 +--
 .../log4j/core/pattern/RegexReplacementTest.java   | 74 +++++++++++-----------
 .../pattern/RootThrowablePatternConverterTest.java | 28 ++++----
 .../log4j/core/pattern/RootThrowableTest.java      | 36 ++++-------
 .../SequenceNumberPatternConverterTest.java        | 28 ++++----
 ...quenceNumberPatternConverterZeroPaddedTest.java | 36 ++++-------
 .../log4j/core/pattern/StyleConverterTest.java     | 41 ++++--------
 .../core/pattern/ThreadIdPatternConverterTest.java |  7 +-
 .../pattern/ThreadNamePatternConverterTest.java    |  7 +-
 .../ThreadPriorityPatternConverterTest.java        |  7 +-
 .../pattern/ThrowablePatternConverterTest.java     | 32 +++++-----
 .../logging/log4j/core/pattern/ThrowableTest.java  | 32 +++++-----
 .../VariablesNotEmptyReplacementConverterTest.java | 10 ++-
 .../logging/log4j/core/time/ClockFactoryTest.java  |  2 +-
 42 files changed, 396 insertions(+), 491 deletions(-)

diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/LogEventFactoryTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/LogEventFactoryTest.java
index bdd2c13..b7ecf8b 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/LogEventFactoryTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/LogEventFactoryTest.java
@@ -67,7 +67,7 @@ public class LogEventFactoryTest {
 
         private void resetLogEventFactory(final LogEventFactory logEventFactory) throws IllegalAccessException {
             final Field field = FieldUtils.getField(LoggerConfig.class, "LOG_EVENT_FACTORY", true);
-            FieldUtils.removeFinalModifier(field, true);
+            FieldUtils.removeFinalModifier(field);
             FieldUtils.writeStaticField(field, logEventFactory, false);
         }
     }).around(context);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/CallerInformationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/CallerInformationTest.java
index 835ab4e..a4e4b32 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/CallerInformationTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/CallerInformationTest.java
@@ -19,35 +19,34 @@ package org.apache.logging.log4j.core.pattern;
 import java.util.List;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
 import org.apache.logging.log4j.test.appender.ListAppender;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
+@LoggerContextSource("log4j2-calling-class.xml")
 public class CallerInformationTest {
 
-    @ClassRule
-    public static LoggerContextRule context = new LoggerContextRule("log4j2-calling-class.xml");
-
     @Test
-    public void testClassLogger() throws Exception {
-        final ListAppender app = context.getListAppender("Class").clear();
+    public void testClassLogger(final LoggerContext context, @Named("Class") final ListAppender app) {
+        app.clear();
         final Logger logger = context.getLogger("ClassLogger");
         logger.info("Ignored message contents.");
         logger.warn("Verifying the caller class is still correct.");
         logger.error("Hopefully nobody breaks me!");
         final List<String> messages = app.getMessages();
-        assertEquals("Incorrect number of messages.", 3, messages.size());
+        assertEquals(3, messages.size(), "Incorrect number of messages.");
         for (final String message : messages) {
-            assertEquals("Incorrect caller class name.", this.getClass().getName(), message);
+            assertEquals(this.getClass().getName(), message, "Incorrect caller class name.");
         }
     }
 
     @Test
-    public void testMethodLogger() throws Exception {
-        final ListAppender app = context.getListAppender("Method").clear();
+    public void testMethodLogger(final LoggerContext context, @Named("Method") final ListAppender app) {
+        app.clear();
         final Logger logger = context.getLogger("MethodLogger");
         logger.info("More messages.");
         logger.warn("CATASTROPHE INCOMING!");
@@ -55,9 +54,9 @@ public class CallerInformationTest {
         logger.fatal("brains~~~");
         logger.info("Itchy. Tasty.");
         final List<String> messages = app.getMessages();
-        assertEquals("Incorrect number of messages.", 5, messages.size());
+        assertEquals(5, messages.size(), "Incorrect number of messages.");
         for (final String message : messages) {
-            assertEquals("Incorrect caller method name.", "testMethodLogger", message);
+            assertEquals("testMethodLogger", message, "Incorrect caller method name.");
         }
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DisableAnsiTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DisableAnsiTest.java
index 7fea6fe..683f9fa 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DisableAnsiTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DisableAnsiTest.java
@@ -17,33 +17,32 @@
 package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
 import org.apache.logging.log4j.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.util.List;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
+@LoggerContextSource("log4j2-console-disableAnsi.xml")
 public class DisableAnsiTest {
 
     private static final String EXPECTED =
             "ERROR LoggerTest o.a.l.l.c.p.DisableAnsiTest org.apache.logging.log4j.core.pattern.DisableAnsiTest"
             + Strings.LINE_SEPARATOR;
 
-    @Rule
-    public LoggerContextRule init = new LoggerContextRule("log4j2-console-disableAnsi.xml");
-
     private Logger logger;
     private ListAppender app;
 
-    @Before
-    public void setUp() throws Exception {
-        this.logger = this.init.getLogger("LoggerTest");
-        this.app = this.init.getListAppender("List").clear();
+    @BeforeEach
+    public void setUp(final LoggerContext context, @Named("List") final ListAppender app) {
+        this.logger = context.getLogger("LoggerTest");
+        this.app = app.clear();
     }
 
     @Test
@@ -52,8 +51,9 @@ public class DisableAnsiTest {
 
         final List<String> msgs = app.getMessages();
         assertNotNull(msgs);
-        assertEquals("Incorrect number of messages. Should be 1 is " + msgs.size(), 1, msgs.size());
-        assertTrue("Replacement failed - expected ending " + EXPECTED + ", actual " + msgs.get(0), msgs.get(0).endsWith(EXPECTED));
+        assertEquals(1, msgs.size(), "Incorrect number of messages. Should be 1 is " + msgs.size());
+        assertTrue(msgs.get(0).endsWith(EXPECTED),
+                "Replacement failed - expected ending " + EXPECTED + ", actual " + msgs.get(0));
     }
     
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverterTest.java
index a6733c1..851c5ba 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverterTest.java
@@ -21,13 +21,10 @@ import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class EncodingPatternConverterTest {
 
     @Test
@@ -42,7 +39,7 @@ public class EncodingPatternConverterTest {
         final String[] options = new String[]{"%msg"};
         final EncodingPatternConverter converter = EncodingPatternConverter
             .newInstance(ctx.getConfiguration(), options);
-        assertNotNull("Error creating converter", converter);
+        assertNotNull(converter, "Error creating converter");
         converter.format(event, sb);
         assertEquals(
             "Test \\r\\n&lt;div class=&quot;test&quot;&gt;this&lt;&#x2F;div&gt; &amp; &lt;div class=&apos;test&apos;&gt;that&lt;&#x2F;div&gt;",
@@ -50,7 +47,7 @@ public class EncodingPatternConverterTest {
     }
 
     @Test
-    public void testJsonEscaping() throws Exception {
+    public void testJsonEscaping() {
         final LogEvent event = Log4jLogEvent.newBuilder()
             .setLoggerName(getClass().getName())
             .setLevel(Level.DEBUG)
@@ -62,7 +59,7 @@ public class EncodingPatternConverterTest {
         final String[] options = new String[]{"%msg", "JSON"};
         final EncodingPatternConverter converter = EncodingPatternConverter.newInstance(ctx.getConfiguration(), options);
 
-        assertNotNull("Error creating converter", converter);
+        assertNotNull(converter, "Error creating converter");
         converter.format(event, sb);
 
         assertEquals(expected, sb.toString());
@@ -80,7 +77,7 @@ public class EncodingPatternConverterTest {
         final String[] options = new String[]{"%msg", "CRLF"};
         final EncodingPatternConverter converter = EncodingPatternConverter
             .newInstance(ctx.getConfiguration(), options);
-        assertNotNull("Error creating converter", converter);
+        assertNotNull(converter, "Error creating converter");
         converter.format(event, sb);
         assertEquals(
             "Test \\r\\n<div class=\"test\">this\\r</div> & \\n<div class='test'>that</div>",
@@ -99,7 +96,7 @@ public class EncodingPatternConverterTest {
         final String[] options = new String[]{"%msg", "XML"};
         final EncodingPatternConverter converter = EncodingPatternConverter
             .newInstance(ctx.getConfiguration(), options);
-        assertNotNull("Error creating converter", converter);
+        assertNotNull(converter, "Error creating converter");
         converter.format(event, sb);
         assertEquals(
             "Test \r\n&lt;div class=&quot;test&quot;&gt;this&lt;/div&gt; &amp; &lt;div class=&apos;test&apos;&gt;that&lt;/div&gt;",
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EndOfBatchPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EndOfBatchPatternConverterTest.java
index 210b689..eda57d2 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EndOfBatchPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EndOfBatchPatternConverterTest.java
@@ -18,9 +18,9 @@ package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class EndOfBatchPatternConverterTest {
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EqualsIgnoreCaseReplacementConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EqualsIgnoreCaseReplacementConverterTest.java
index ff03b72..fa4ae87 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EqualsIgnoreCaseReplacementConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EqualsIgnoreCaseReplacementConverterTest.java
@@ -16,19 +16,16 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import static org.junit.Assert.assertEquals;
-
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class EqualsIgnoreCaseReplacementConverterTest {
 
     @Test
@@ -57,6 +54,7 @@ public class EqualsIgnoreCaseReplacementConverterTest {
         final String[] options = new String[] { "aaa[" + tag + "]zzz", "AAA[]ZZZ", expectedValue };
         final EqualsIgnoreCaseReplacementConverter converter = EqualsIgnoreCaseReplacementConverter
                 .newInstance(ctx.getConfiguration(), options);
+        assertNotNull(converter);
         converter.format(event, sb);
         assertEquals(expectedValue, sb.toString());
     }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EqualsReplacementConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EqualsReplacementConverterTest.java
index 2b7984a..35bee32 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EqualsReplacementConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EqualsReplacementConverterTest.java
@@ -22,13 +22,10 @@ import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class EqualsReplacementConverterTest {
 
     private static final String TEST_MESSAGE = "This is a test";
@@ -68,6 +65,7 @@ public class EqualsReplacementConverterTest {
         final LoggerContext ctx = LoggerContext.getContext();
         final EqualsReplacementConverter converter = EqualsReplacementConverter.newInstance(ctx.getConfiguration(),
             options);
+        assertNotNull(converter);
         converter.format(event, sb);
         assertEquals(expectedValue, sb.toString());
     }
@@ -104,6 +102,7 @@ public class EqualsReplacementConverterTest {
             new String[]{"[%marker]", "[]", substitution});
 
         final StringBuilder sb = new StringBuilder();
+        assertNotNull(converter);
         converter.parseSubstitution(event, sb);
         final String actual = sb.toString();
         assertEquals(expected, actual);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java
index 445b893..d42440e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java
@@ -16,11 +16,6 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.util.List;
@@ -33,11 +28,10 @@ import org.apache.logging.log4j.core.impl.ThrowableFormatOptions;
 import org.apache.logging.log4j.core.impl.ThrowableProxy;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class ExtendedThrowablePatternConverterTest {
 
     @Test
@@ -57,7 +51,7 @@ public class ExtendedThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertTrue("No suffix", result.contains("test suffix"));
+        assertTrue(result.contains("test suffix"), "No suffix");
     }
 
     @Test
@@ -76,7 +70,7 @@ public class ExtendedThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertTrue("No suffix", result.contains("test suffix"));
+        assertTrue(result.contains("test suffix"), "No suffix");
     }
 
     @Test
@@ -95,7 +89,7 @@ public class ExtendedThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertFalse("Has unexpected suffix", result.contains("inner suffix"));
+        assertFalse(result.contains("inner suffix"), "Has unexpected suffix");
     }
 
     @Test
@@ -115,8 +109,8 @@ public class ExtendedThrowablePatternConverterTest {
 		final StringBuilder sb = new StringBuilder();
 		converter.format(event, sb);
 		final String result = sb.toString();
-		assertTrue(result, result.contains(originalThrowable.getMessage()));
-		assertTrue(result, result.contains(originalThrowable.getStackTrace()[0].getMethodName()));
+		assertTrue(result.contains(originalThrowable.getMessage()), result);
+		assertTrue(result.contains(originalThrowable.getStackTrace()[0].getMethodName()), result);
 	}
 
     @Test
@@ -135,7 +129,7 @@ public class ExtendedThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertTrue("No suppressed lines", result.contains(" suppressed "));
+        assertTrue(result.contains(" suppressed "), "No suppressed lines");
     }
 
     @Test
@@ -168,8 +162,8 @@ public class ExtendedThrowablePatternConverterTest {
         final List<String> ignorePackages = options.getIgnorePackages();
         assertNotNull(ignorePackages);
         final String ignorePackagesString = ignorePackages.toString();
-        assertTrue(ignorePackagesString, ignorePackages.contains("org.junit"));
-        assertTrue(ignorePackagesString, ignorePackages.contains("org.eclipse"));
+        assertTrue(ignorePackages.contains("org.junit"), ignorePackagesString);
+        assertTrue(ignorePackages.contains("org.eclipse"), ignorePackagesString);
         assertEquals("|", options.getSeparator());
     }
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowableTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowableTest.java
index affeae4..bcb2919 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowableTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowableTest.java
@@ -19,37 +19,33 @@ package org.apache.logging.log4j.core.pattern;
 import java.util.List;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
 import org.apache.logging.log4j.test.appender.ListAppender;
-import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
+@LoggerContextSource("log4j-throwablefilter.xml")
 public class ExtendedThrowableTest {
     private ListAppender app;
 
-    @ClassRule
-    public static LoggerContextRule context = new LoggerContextRule("log4j-throwablefilter.xml");
-
-    @Before
-    public void setUp() throws Exception {
-        this.app = context.getListAppender("List").clear();
+    @BeforeEach
+    public void setUp(@Named("List") final ListAppender app) throws Exception {
+        this.app = app.clear();
     }
 
     @Test
-    public void testException() {
+    public void testException(final LoggerContext context) {
         final Logger logger = context.getLogger("LoggerTest");
         final Throwable cause = new NullPointerException("null pointer");
         final Throwable parent = new IllegalArgumentException("IllegalArgument", cause);
         logger.error("Exception", parent);
         final List<String> msgs = app.getMessages();
         assertNotNull(msgs);
-        assertEquals("Incorrect number of messages. Should be 1 is " + msgs.size(), 1, msgs.size());
-        assertTrue("No suppressed lines", msgs.get(0).contains("suppressed"));
+        assertEquals(1, msgs.size(), "Incorrect number of messages. Should be 1 is " + msgs.size());
+        assertTrue(msgs.get(0).contains("suppressed"), "No suppressed lines");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/FormattingInfoTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/FormattingInfoTest.java
index 370db65..3080240 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/FormattingInfoTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/FormattingInfoTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
 
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Testing FormattingInfo.
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/HighlightConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/HighlightConverterTest.java
index 1ca8bdb..c628895 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/HighlightConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/HighlightConverterTest.java
@@ -19,11 +19,9 @@ import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the HighlightConverter.
@@ -34,6 +32,7 @@ public class HighlightConverterTest {
     public void testAnsiEmpty() {
         final String[] options = {"", PatternParser.NO_CONSOLE_NO_ANSI + "=false, " + PatternParser.DISABLE_ANSI + "=false"};
         final HighlightConverter converter = HighlightConverter.newInstance(null, options);
+        assertNotNull(converter);
 
         final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.INFO).setLoggerName("a.b.c").setMessage(
                 new SimpleMessage("message in a bottle")).build();
@@ -46,6 +45,7 @@ public class HighlightConverterTest {
     public void testAnsiNonEmpty() {
         final String[] options = {"%-5level: %msg", PatternParser.NO_CONSOLE_NO_ANSI + "=false, " + PatternParser.DISABLE_ANSI + "=false"};
         final HighlightConverter converter = HighlightConverter.newInstance(null, options);
+        assertNotNull(converter);
 
         final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.INFO).setLoggerName("a.b.c").setMessage(
                 new SimpleMessage("message in a bottle")).build();
@@ -60,9 +60,9 @@ public class HighlightConverterTest {
         final String[] options = { "%-5level: %msg", PatternParser.NO_CONSOLE_NO_ANSI + "=false, "
                 + PatternParser.DISABLE_ANSI + "=false, " + "BAD_LEVEL_A=" + colorName + ", BAD_LEVEL_B=" + colorName };
         final HighlightConverter converter = HighlightConverter.newInstance(null, options);
-        Assert.assertNotNull(converter);
-        Assert.assertNotNull(converter.getLevelStyle(Level.TRACE));
-        Assert.assertNotNull(converter.getLevelStyle(Level.DEBUG));
+        assertNotNull(converter);
+        assertNotNull(converter.getLevelStyle(Level.TRACE));
+        assertNotNull(converter.getLevelStyle(Level.DEBUG));
     }
 
     @Test
@@ -71,9 +71,9 @@ public class HighlightConverterTest {
         final String[] options = { "%-5level: %msg", PatternParser.NO_CONSOLE_NO_ANSI + "=false, "
                 + PatternParser.DISABLE_ANSI + "=false, " + "DEBUG=" + colorName + ", TRACE=" + colorName };
         final HighlightConverter converter = HighlightConverter.newInstance(null, options);
-        Assert.assertNotNull(converter);
-        Assert.assertEquals(AnsiEscape.createSequence(colorName), converter.getLevelStyle(Level.TRACE));
-        Assert.assertEquals(AnsiEscape.createSequence(colorName), converter.getLevelStyle(Level.DEBUG));
+        assertNotNull(converter);
+        assertEquals(AnsiEscape.createSequence(colorName), converter.getLevelStyle(Level.TRACE));
+        assertEquals(AnsiEscape.createSequence(colorName), converter.getLevelStyle(Level.DEBUG));
     }
 
     @Test
@@ -82,11 +82,11 @@ public class HighlightConverterTest {
         final String[] options = { "%level", PatternParser.NO_CONSOLE_NO_ANSI + "=false, "
                 + PatternParser.DISABLE_ANSI + "=false, " + "DEBUG=" + colorName + ", CUSTOM1=" + colorName };
         final HighlightConverter converter = HighlightConverter.newInstance(null, options);
-        Assert.assertNotNull(converter);
-        Assert.assertNotNull(converter.getLevelStyle(Level.INFO));
-        Assert.assertNotNull(converter.getLevelStyle(Level.DEBUG));
-        Assert.assertNotNull(converter.getLevelStyle(Level.forName("CUSTOM1", 412)));
-        Assert.assertNull(converter.getLevelStyle(Level.forName("CUSTOM2", 512)));
+        assertNotNull(converter);
+        assertNotNull(converter.getLevelStyle(Level.INFO));
+        assertNotNull(converter.getLevelStyle(Level.DEBUG));
+        assertNotNull(converter.getLevelStyle(Level.forName("CUSTOM1", 412)));
+        assertNull(converter.getLevelStyle(Level.forName("CUSTOM2", 512)));
 
         assertArrayEquals(new byte[]{27, '[', '3', '4', 'm', 'D', 'E', 'B', 'U', 'G', 27, '[', 'm'},
                           toFormattedCharSeq(converter, Level.DEBUG).toString().getBytes());
@@ -103,15 +103,16 @@ public class HighlightConverterTest {
         final String[] options = { "%-5level: %msg",
                 PatternParser.NO_CONSOLE_NO_ANSI + "=false, " + PatternParser.DISABLE_ANSI + "=false" };
         final HighlightConverter converter = HighlightConverter.newInstance(null, options);
-        Assert.assertNotNull(converter);
-        Assert.assertNotNull(converter.getLevelStyle(Level.TRACE));
-        Assert.assertNotNull(converter.getLevelStyle(Level.DEBUG));
+        assertNotNull(converter);
+        assertNotNull(converter.getLevelStyle(Level.TRACE));
+        assertNotNull(converter.getLevelStyle(Level.DEBUG));
     }
 
     @Test
     public void testNoAnsiEmpty() {
         final String[] options = {"", PatternParser.DISABLE_ANSI + "=true"};
         final HighlightConverter converter = HighlightConverter.newInstance(null, options);
+        assertNotNull(converter);
 
         final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.INFO).setLoggerName("a.b.c").setMessage(
                 new SimpleMessage("message in a bottle")).build();
@@ -124,6 +125,7 @@ public class HighlightConverterTest {
     public void testNoAnsiNonEmpty() {
         final String[] options = {"%-5level: %msg", PatternParser.DISABLE_ANSI + "=true"};
         final HighlightConverter converter = HighlightConverter.newInstance(null, options);
+        assertNotNull(converter);
 
         final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.INFO).setLoggerName("a.b.c").setMessage(
                 new SimpleMessage("message in a bottle")).build();
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/LevelPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/LevelPatternConverterTest.java
index 9d1d763..bde85e1 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/LevelPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/LevelPatternConverterTest.java
@@ -21,13 +21,10 @@ import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class LevelPatternConverterTest {
 
     private void testLevelLength(final int length, final String debug, final String warn) {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/LiteralPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/LiteralPatternConverterTest.java
index 3b8835b..ff32807 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/LiteralPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/LiteralPatternConverterTest.java
@@ -17,9 +17,9 @@
 
 package org.apache.logging.log4j.core.pattern;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the LiteralPatternConverter.
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/LoggerFqcnPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/LoggerFqcnPatternConverterTest.java
index 2cb1faf..a87679d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/LoggerFqcnPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/LoggerFqcnPatternConverterTest.java
@@ -18,9 +18,9 @@ package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.*;
 
 public class LoggerFqcnPatternConverterTest {
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MapPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MapPatternConverterTest.java
index a841b32..735e0ce 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MapPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MapPatternConverterTest.java
@@ -21,13 +21,10 @@ import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.MapMessage;
 import org.apache.logging.log4j.message.StringMapMessage;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class MapPatternConverterTest {
 
     @Test
@@ -47,11 +44,11 @@ public class MapPatternConverterTest {
         converter.format(event, sb);
         final String str = sb.toString();
         String expected = "subject=I";
-        assertTrue("Missing or incorrect subject. Expected " + expected + ", actual " + str, str.contains(expected));
+        assertTrue(str.contains(expected), "Missing or incorrect subject. Expected " + expected + ", actual " + str);
         expected = "verb=love";
-        assertTrue("Missing or incorrect verb", str.contains(expected));
+        assertTrue(str.contains(expected), "Missing or incorrect verb");
         expected = "object=Log4j";
-        assertTrue("Missing or incorrect object", str.contains(expected));
+        assertTrue(str.contains(expected), "Missing or incorrect object");
 
         assertEquals("{object=Log4j, subject=I, verb=love}", str);
     }
@@ -93,11 +90,11 @@ public class MapPatternConverterTest {
         converter.format(event, sb);
         final String str = sb.toString();
         String expected = "subject=\"I\"";
-        assertTrue("Missing or incorrect subject. Expected " + expected + ", actual " + str, str.contains(expected));
+        assertTrue(str.contains(expected), "Missing or incorrect subject. Expected " + expected + ", actual " + str);
         expected = "verb=\"love\"";
-        assertTrue("Missing or incorrect verb", str.contains(expected));
+        assertTrue(str.contains(expected), "Missing or incorrect verb");
         expected = "object=\"Log4j\"";
-        assertTrue("Missing or incorrect object", str.contains(expected));
+        assertTrue(str.contains(expected), "Missing or incorrect object");
 
         assertEquals("{object=\"Log4j\", subject=\"I\", verb=\"love\"}", str);
     }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MarkerPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MarkerPatternConverterTest.java
index 26d68cb..da06f55 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MarkerPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MarkerPatternConverterTest.java
@@ -23,9 +23,9 @@ import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.StructuredDataMessage;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests {@link MarkerPatternConverter}.
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MarkerSimpleNamePatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MarkerSimpleNamePatternConverterTest.java
index 1f90506..88bebcf 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MarkerSimpleNamePatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MarkerSimpleNamePatternConverterTest.java
@@ -16,8 +16,6 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import static org.junit.Assert.assertEquals;
-
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.MarkerManager;
@@ -25,7 +23,9 @@ import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.StructuredDataMessage;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests {@link MarkerSimpleNamePatternConverter}.
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MaxLengthConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MaxLengthConverterTest.java
index e379915..a41a5fe 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MaxLengthConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MaxLengthConverterTest.java
@@ -22,19 +22,16 @@ import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class MaxLengthConverterTest {
 
-    private static MaxLengthConverter converter = MaxLengthConverter.newInstance(null, new String[]{"%m", "10"});
+    private static final MaxLengthConverter converter = MaxLengthConverter.newInstance(null, new String[]{"%m", "10"});
 
     @Test
-    public void testUnderMaxLength() throws Exception {
+    public void testUnderMaxLength() {
         final Message message = new SimpleMessage("0123456789");
         final LogEvent event = Log4jLogEvent.newBuilder()
             .setLoggerName("MyLogger")
@@ -47,7 +44,7 @@ public class MaxLengthConverterTest {
     }
 
     @Test
-    public void testOverMaxLength() throws Exception {
+    public void testOverMaxLength() {
         final Message message = new SimpleMessage("01234567890123456789");
         final LogEvent event = Log4jLogEvent.newBuilder()
             .setLoggerName("MyLogger")
@@ -58,8 +55,9 @@ public class MaxLengthConverterTest {
         converter.format(event, sb);
         assertEquals("0123456789", sb.toString());
     }
+
     @Test
-    public void testOverMaxLength21WithEllipsis() throws Exception {
+    public void testOverMaxLength21WithEllipsis() {
         final Message message = new SimpleMessage("012345678901234567890123456789");
         final LogEvent event = Log4jLogEvent.newBuilder()
             .setLoggerName("MyLogger")
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MdcPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MdcPatternConverterTest.java
index 00e97f7..b984253 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MdcPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MdcPatternConverterTest.java
@@ -16,35 +16,36 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.ThreadContext;
+import org.apache.logging.log4j.ThreadContextHolder;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.apache.logging.log4j.junit.ThreadContextMapRule;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class MdcPatternConverterTest {
 
-    @Rule
-    public final ThreadContextMapRule threadContextRule = new ThreadContextMapRule(); 
+    private final ThreadContextHolder threadContextHolder = new ThreadContextHolder(true, false);
 
-    @Before
+    @BeforeEach
     public void setup() {
+        ThreadContext.clearMap();
         ThreadContext.put("subject", "I");
         ThreadContext.put("verb", "love");
         ThreadContext.put("object", "Log4j");
     }
 
+    @AfterEach
+    public void tearDown() {
+        threadContextHolder.restore();
+    }
+
     @Test
     public void testConverter() {
         final Message msg = new SimpleMessage("Hello");
@@ -58,7 +59,7 @@ public class MdcPatternConverterTest {
         converter.format(event, sb);
         final String str = sb.toString();
         final String expected = "{object=Log4j, subject=I, verb=love}";
-        assertTrue("Incorrect result. Expected " + expected + ", actual " + str, str.equals(expected));
+        assertEquals(expected, str, "Incorrect result. Expected " + expected + ", actual " + str);
     }
 
     @Test
@@ -75,8 +76,9 @@ public class MdcPatternConverterTest {
         converter.format(event, sb);
         final String str = sb.toString();
         final String expected = "prefix {object=Log4j, subject=I, verb=love}";
-        assertTrue("Incorrect result. Expected " + expected + ", actual " + str, str.equals(expected));
+        assertEquals(expected, str, "Incorrect result. Expected " + expected + ", actual " + str);
     }
+
     @Test
     public void testConverterFullEmpty() {
         ThreadContext.clearMap();
@@ -91,7 +93,7 @@ public class MdcPatternConverterTest {
         converter.format(event, sb);
         final String str = sb.toString();
         final String expected = "{}";
-        assertTrue("Incorrect result. Expected " + expected + ", actual " + str, str.equals(expected));
+        assertEquals(expected, str, "Incorrect result. Expected " + expected + ", actual " + str);
     }
 
     @Test
@@ -109,7 +111,7 @@ public class MdcPatternConverterTest {
         converter.format(event, sb);
         final String str = sb.toString();
         final String expected = "{foo=bar}";
-        assertTrue("Incorrect result. Expected " + expected + ", actual " + str, str.equals(expected));
+        assertEquals(expected, str, "Incorrect result. Expected " + expected + ", actual " + str);
     }
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageJansiConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageJansiConverterTest.java
index 0134dac..56bdd48 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageJansiConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageJansiConverterTest.java
@@ -19,33 +19,29 @@ package org.apache.logging.log4j.core.pattern;
 import java.util.List;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
 import org.apache.logging.log4j.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
+@LoggerContextSource("log4j-message-ansi.xml")
 public class MessageJansiConverterTest {
 
     private static final String EXPECTED = "\u001B[31;1mWarning!\u001B[m Pants on \u001B[31mfire!\u001B[m"
             + Strings.LINE_SEPARATOR;
 
-    @Rule
-    public LoggerContextRule init = new LoggerContextRule("log4j-message-ansi.xml");
-
     private Logger logger;
     private ListAppender app;
 
-    @Before
-    public void setUp() throws Exception {
-        this.logger = this.init.getLogger("LoggerTest");
-        this.app = this.init.getListAppender("List").clear();
+    @BeforeEach
+    public void setUp(final LoggerContext context, @Named("List") final ListAppender app) {
+        this.logger = context.getLogger("LoggerTest");
+        this.app = app.clear();
     }
 
     @Test
@@ -55,8 +51,8 @@ public class MessageJansiConverterTest {
 
         final List<String> msgs = app.getMessages();
         assertNotNull(msgs);
-        assertEquals("Incorrect number of messages. Should be 1 is " + msgs.size(), 1, msgs.size());
-        assertTrue("Replacement failed - expected ending " + EXPECTED + ", actual " + msgs.get(0),
-                msgs.get(0).endsWith(EXPECTED));
+        assertEquals(1, msgs.size(), "Incorrect number of messages. Should be 1 is " + msgs.size());
+        assertTrue(
+                msgs.get(0).endsWith(EXPECTED), "Replacement failed - expected ending " + EXPECTED + ", actual " + msgs.get(0));
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessagePatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessagePatternConverterTest.java
index cd85071..fe8cdfe 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessagePatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessagePatternConverterTest.java
@@ -16,9 +16,6 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.Configuration;
@@ -31,15 +28,14 @@ import org.apache.logging.log4j.message.ParameterizedMessage;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.message.StringMapMessage;
 import org.apache.logging.log4j.message.StructuredDataMessage;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class MessagePatternConverterTest {
 
     @Test
-    public void testPattern() throws Exception {
+    public void testPattern() {
         final MessagePatternConverter converter = MessagePatternConverter.newInstance(null, null);
         Message msg = new SimpleMessage("Hello!");
         LogEvent event = Log4jLogEvent.newBuilder() //
@@ -48,14 +44,14 @@ public class MessagePatternConverterTest {
                 .setMessage(msg).build();
         StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
-        assertEquals("Unexpected result", "Hello!", sb.toString());
+        assertEquals("Hello!", sb.toString(), "Unexpected result");
         event = Log4jLogEvent.newBuilder() //
                 .setLoggerName("MyLogger") //
                 .setLevel(Level.DEBUG) //
                 .setMessage(null).build();
         sb = new StringBuilder();
         converter.format(event, sb);
-        assertEquals("Incorrect length: " + sb, 0, sb.length());
+        assertEquals(0, sb.length(), "Incorrect length: " + sb);
         msg = new SimpleMessage(null);
         event = Log4jLogEvent.newBuilder() //
                 .setLoggerName("MyLogger") //
@@ -63,11 +59,11 @@ public class MessagePatternConverterTest {
                 .setMessage(msg).build();
         sb = new StringBuilder();
         converter.format(event, sb);
-        assertEquals("Incorrect length: " + sb, 4, sb.length());
+        assertEquals(4, sb.length(), "Incorrect length: " + sb);
     }
 
     @Test
-    public void testPatternAndParameterizedMessageDateLookup() throws Exception {
+    public void testPatternAndParameterizedMessageDateLookup() {
         final MessagePatternConverter converter = MessagePatternConverter.newInstance(null, null);
         final Message msg = new ParameterizedMessage("${date:now:buhu}");
         final LogEvent event = Log4jLogEvent.newBuilder() //
@@ -76,12 +72,12 @@ public class MessagePatternConverterTest {
                 .setMessage(msg).build();
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
-        assertEquals("Unexpected result", "${date:now:buhu}", sb.toString());
+        assertEquals("${date:now:buhu}", sb.toString(), "Unexpected result");
     }
 
     @Test
     public void testLookupEnabledByDefault() {
-        assertFalse("Expected lookups to be enabled", Constants.FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS);
+        assertFalse(Constants.FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS, "Expected lookups to be enabled");
     }
 
     @Test
@@ -97,7 +93,7 @@ public class MessagePatternConverterTest {
                 .setMessage(msg).build();
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
-        assertEquals("Unexpected result", "bar", sb.toString());
+        assertEquals("bar", sb.toString(), "Unexpected result");
     }
 
     @Test
@@ -114,11 +110,11 @@ public class MessagePatternConverterTest {
                 .setMessage(msg).build();
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
-        assertEquals("Expected the raw pattern string without lookup", "${foo}", sb.toString());
+        assertEquals("${foo}", sb.toString(), "Expected the raw pattern string without lookup");
     }
 
     @Test
-    public void testPatternWithConfiguration() throws Exception {
+    public void testPatternWithConfiguration() {
         final Configuration config = new DefaultConfiguration();
         final MessagePatternConverter converter = MessagePatternConverter.newInstance(config, null);
         Message msg = new SimpleMessage("Hello!");
@@ -128,14 +124,14 @@ public class MessagePatternConverterTest {
                 .setMessage(msg).build();
         StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
-        assertEquals("Unexpected result", "Hello!", sb.toString());
+        assertEquals("Hello!", sb.toString(), "Unexpected result");
         event = Log4jLogEvent.newBuilder() //
                 .setLoggerName("MyLogger") //
                 .setLevel(Level.DEBUG) //
                 .setMessage(null).build();
         sb = new StringBuilder();
         converter.format(event, sb);
-        assertEquals("Incorrect length: " + sb, 0, sb.length());
+        assertEquals(0, sb.length(), "Incorrect length: " + sb);
         msg = new SimpleMessage(null);
         event = Log4jLogEvent.newBuilder() //
                 .setLoggerName("MyLogger") //
@@ -143,11 +139,11 @@ public class MessagePatternConverterTest {
                 .setMessage(msg).build();
         sb = new StringBuilder();
         converter.format(event, sb);
-        assertEquals("Incorrect length: " + sb, 4, sb.length());
+        assertEquals(4, sb.length(), "Incorrect length: " + sb);
     }
 
     @Test
-    public void testMapMessageFormatJson() throws Exception {
+    public void testMapMessageFormatJson() {
         final MessagePatternConverter converter = MessagePatternConverter.newInstance(null, new String[]{"json"});
         Message msg = new StringMapMessage()
                 .with("key", "val");
@@ -157,11 +153,11 @@ public class MessagePatternConverterTest {
                 .setMessage(msg).build();
         StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
-        assertEquals("Unexpected result", "{\"key\":\"val\"}", sb.toString());
+        assertEquals("{\"key\":\"val\"}", sb.toString(), "Unexpected result");
     }
 
     @Test
-    public void testMapMessageFormatXml() throws Exception {
+    public void testMapMessageFormatXml() {
         final MessagePatternConverter converter = MessagePatternConverter.newInstance(null, new String[]{"xml"});
         Message msg = new StringMapMessage()
                 .with("key", "val");
@@ -171,11 +167,11 @@ public class MessagePatternConverterTest {
                 .setMessage(msg).build();
         StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
-        assertEquals("Unexpected result", "<Map>\n  <Entry key=\"key\">val</Entry>\n</Map>", sb.toString());
+        assertEquals("<Map>\n  <Entry key=\"key\">val</Entry>\n</Map>", sb.toString(), "Unexpected result");
     }
 
     @Test
-    public void testMapMessageFormatDefault() throws Exception {
+    public void testMapMessageFormatDefault() {
         final MessagePatternConverter converter = MessagePatternConverter.newInstance(null, null);
         Message msg = new StringMapMessage()
                 .with("key", "val");
@@ -185,11 +181,11 @@ public class MessagePatternConverterTest {
                 .setMessage(msg).build();
         StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
-        assertEquals("Unexpected result", "key=\"val\"", sb.toString());
+        assertEquals("key=\"val\"", sb.toString(), "Unexpected result");
     }
 
     @Test
-    public void testStructuredDataFormatFull() throws Exception {
+    public void testStructuredDataFormatFull() {
         final MessagePatternConverter converter = MessagePatternConverter.newInstance(null, new String[]{"FULL"});
         Message msg = new StructuredDataMessage("id", "message", "type")
                 .with("key", "val");
@@ -199,6 +195,6 @@ public class MessagePatternConverterTest {
                 .setMessage(msg).build();
         StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
-        assertEquals("Unexpected result", "type [id key=\"val\"] message", sb.toString());
+        assertEquals("type [id key=\"val\"] message", sb.toString(), "Unexpected result");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageStyledConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageStyledConverterTest.java
index ade4432..b0ec9c8 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageStyledConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageStyledConverterTest.java
@@ -19,33 +19,29 @@ package org.apache.logging.log4j.core.pattern;
 import java.util.List;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
 import org.apache.logging.log4j.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
+@LoggerContextSource("log4j-message-styled.xml")
 public class MessageStyledConverterTest {
 
     private static final String EXPECTED = "\u001B[31;1mWarning!\u001B[m Pants on \u001B[31;1mfire!\u001B[m"
             + Strings.LINE_SEPARATOR;
 
-    @Rule
-    public LoggerContextRule init = new LoggerContextRule("log4j-message-styled.xml");
-
     private Logger logger;
     private ListAppender app;
 
-    @Before
-    public void setUp() throws Exception {
-        this.logger = this.init.getLogger("LoggerTest");
-        this.app = this.init.getListAppender("List").clear();
+    @BeforeEach
+    public void setUp(final LoggerContext context, @Named("List") final ListAppender app) {
+        this.logger = context.getLogger("LoggerTest");
+        this.app = app.clear();
     }
 
     @Test
@@ -55,8 +51,8 @@ public class MessageStyledConverterTest {
 
         final List<String> msgs = app.getMessages();
         assertNotNull(msgs);
-        assertEquals("Incorrect number of messages. Should be 1 is " + msgs.size(), 1, msgs.size());
-        assertTrue("Replacement failed - expected ending " + EXPECTED + ", actual " + msgs.get(0),
-                msgs.get(0).endsWith(EXPECTED));
+        assertEquals(1, msgs.size(), "Incorrect number of messages. Should be 1 is " + msgs.size());
+        assertTrue(
+                msgs.get(0).endsWith(EXPECTED), "Replacement failed - expected ending " + EXPECTED + ", actual " + msgs.get(0));
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NanoTimePatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NanoTimePatternConverterTest.java
index f9598d2..c4a0238 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NanoTimePatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NanoTimePatternConverterTest.java
@@ -18,13 +18,10 @@ package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class NanoTimePatternConverterTest {
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NdcPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NdcPatternConverterTest.java
index 92557ec..4af2ad9 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NdcPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NdcPatternConverterTest.java
@@ -16,22 +16,32 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import static org.junit.Assert.assertEquals;
-
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.ThreadContext;
+import org.apache.logging.log4j.ThreadContextHolder;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.apache.logging.log4j.junit.ThreadContextStackRule;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 public class NdcPatternConverterTest {
 
-    @Rule
-    public final ThreadContextStackRule threadContextRule = new ThreadContextStackRule(); 
+    private final ThreadContextHolder holder = new ThreadContextHolder(false, true);
+
+    @BeforeEach
+    void setUp() {
+        ThreadContext.clearStack();
+    }
+
+    @AfterEach
+    void tearDown() {
+        holder.restore();
+    }
 
     @Test
     public void testEmpty() {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NoConsoleNoAnsiTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NoConsoleNoAnsiTest.java
index cc9ac03..0ed1fb5 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NoConsoleNoAnsiTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NoConsoleNoAnsiTest.java
@@ -16,36 +16,33 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import java.util.List;
-
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
 import org.apache.logging.log4j.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import java.util.List;
 
+import static org.junit.jupiter.api.Assertions.*;
+
+@LoggerContextSource("log4j2-console-noConsoleNoAnsi.xml")
 public class NoConsoleNoAnsiTest {
 
     private static final String EXPECTED =
             "ERROR LoggerTest o.a.l.l.c.p.NoConsoleNoAnsiTest org.apache.logging.log4j.core.pattern.NoConsoleNoAnsiTest"
             + Strings.LINE_SEPARATOR;
 
-    @Rule
-    public LoggerContextRule init = new LoggerContextRule("log4j2-console-noConsoleNoAnsi.xml");
-
     private Logger logger;
     private ListAppender app;
 
-    @Before
-    public void setUp() throws Exception {
-        this.logger = this.init.getLogger("LoggerTest");
-        this.app = this.init.getListAppender("List").clear();
+    @BeforeEach
+    public void setUp(final LoggerContext context, @Named("List") final ListAppender app) {
+        this.logger = context.getLogger("LoggerTest");
+        this.app = app.clear();
     }
 
     @Test
@@ -54,8 +51,9 @@ public class NoConsoleNoAnsiTest {
 
         final List<String> msgs = app.getMessages();
         assertNotNull(msgs);
-        assertEquals("Incorrect number of messages. Should be 1 is " + msgs.size(), 1, msgs.size());
-        assertTrue("Replacement failed - expected ending " + EXPECTED + ", actual " + msgs.get(0), msgs.get(0).endsWith(EXPECTED));
+        assertEquals(1, msgs.size(), "Incorrect number of messages. Should be 1 is " + msgs.size());
+        assertTrue(msgs.get(0).endsWith(EXPECTED),
+                "Replacement failed - expected ending " + EXPECTED + ", actual " + msgs.get(0));
     }
     
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java
index 00f5c0e..1c8b15d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java
@@ -16,10 +16,6 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
 import java.util.Calendar;
 import java.util.List;
 
@@ -38,12 +34,11 @@ import org.apache.logging.log4j.core.time.internal.DummyNanoClock;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class PatternParserTest {
 
     static String OUTPUT_FILE   = "output/PatternParser";
@@ -69,15 +64,15 @@ public class PatternParserTest {
     private static final String KEY = "Converter";
     private PatternParser parser;
 
-    @Before
+    @BeforeEach
     public void setup() {
         parser = new PatternParser(KEY);
     }
 
     private void validateConverter(final List<PatternFormatter> formatter, final int index, final String name) {
         final PatternConverter pc = formatter.get(index).getConverter();
-        assertEquals("Incorrect converter " + pc.getName() + " at index " + index + " expected " + name,
-            pc.getName(), name);
+        assertEquals(
+                pc.getName(), name, "Incorrect converter " + pc.getName() + " at index " + index + " expected " + name);
     }
 
     /**
@@ -87,7 +82,7 @@ public class PatternParserTest {
     public void defaultPattern() {
         final List<PatternFormatter> formatters = parser.parse(msgPattern);
         assertNotNull(formatters);
-        assertTrue(formatters.size() == 2);
+        assertEquals(formatters.size(), 2);
         validateConverter(formatters, 0, "Message");
         validateConverter(formatters, 1, "Line Sep");
     }
@@ -118,8 +113,8 @@ public class PatternParserTest {
             formatter.format(event, buf);
         }
         final String str = buf.toString();
-        final String expected = "INFO  [PatternParserTest        :104 ] - Hello, world" + Strings.LINE_SEPARATOR;
-        assertTrue("Expected to end with: " + expected + ". Actual: " + str, str.endsWith(expected));
+        final String expected = "INFO  [PatternParserTest        :99  ] - Hello, world" + Strings.LINE_SEPARATOR;
+        assertTrue(str.endsWith(expected), "Expected to end with: " + expected + ". Actual: " + str);
     }
 
     @Test
@@ -140,7 +135,7 @@ public class PatternParserTest {
         }
         final String str = buf.toString();
         final String expected = "INFO  rTest Hello, world" + Strings.LINE_SEPARATOR;
-        assertTrue("Expected to end with: " + expected + ". Actual: " + str, str.endsWith(expected));
+        assertTrue(str.endsWith(expected), "Expected to end with: " + expected + ". Actual: " + str);
     }
 
     @Test
@@ -161,7 +156,7 @@ public class PatternParserTest {
         }
         final String str = buf.toString();
         final String expected = "INFO  org.a Hello, world" + Strings.LINE_SEPARATOR;
-        assertTrue("Expected to end with: " + expected + ". Actual: " + str, str.endsWith(expected));
+        assertTrue(str.endsWith(expected), "Expected to end with: " + expected + ". Actual: " + str);
     }
 
     @Test
@@ -192,7 +187,7 @@ public class PatternParserTest {
 
         // eats all characters until the closing '}' character
         final String expected = "[2001-02-03 04:05:06,789] - Hello, world";
-        assertTrue("Expected to start with: " + expected + ". Actual: " + str, str.startsWith(expected));
+        assertTrue(str.startsWith(expected), "Expected to start with: " + expected + ". Actual: " + str);
     }
 
     @Test
@@ -226,8 +221,8 @@ public class PatternParserTest {
         }
         final String str = buf.toString();
         final String expectedEnd = String.format("] %-5s: Hello, world%s\u001B[m", level, Strings.LINE_SEPARATOR);
-        assertTrue("Expected to start with: " + expectedStart + ". Actual: " + str, str.startsWith(expectedStart));
-        assertTrue("Expected to end with: \"" + expectedEnd + "\". Actual: \"" + str, str.endsWith(expectedEnd));
+        assertTrue(str.startsWith(expectedStart), "Expected to start with: " + expectedStart + ". Actual: " + str);
+        assertTrue(str.endsWith(expectedEnd), "Expected to end with: \"" + expectedEnd + "\". Actual: \"" + str);
     }
 
     @Test
@@ -301,8 +296,8 @@ public class PatternParserTest {
         final List<PatternFormatter> formatters = parser.parse(pattern);
         assertNotNull(formatters);
         final String msg = formatters.toString();
-        assertEquals(msg, 1, formatters.size());
-        assertTrue(msg, checkClass.isInstance(formatters.get(0).getConverter()));
+        assertEquals(1, formatters.size(), msg);
+        assertTrue(checkClass.isInstance(formatters.get(0).getConverter()), msg);
     }
 
     @Test
@@ -401,8 +396,8 @@ public class PatternParserTest {
         final List<String> ignorePackages = options.getIgnorePackages();
         assertNotNull(ignorePackages);
         final String ignorePackagesString = ignorePackages.toString();
-        assertTrue(ignorePackagesString, ignorePackages.contains("org.junit"));
-        assertTrue(ignorePackagesString, ignorePackages.contains("org.eclipse"));
+        assertTrue(ignorePackages.contains("org.junit"), ignorePackagesString);
+        assertTrue(ignorePackages.contains("org.eclipse"), ignorePackagesString);
         assertEquals("|", options.getSeparator());
     }
 
@@ -411,8 +406,8 @@ public class PatternParserTest {
     public void testMapPatternConverter() {
         final List<PatternFormatter> formatters = parser.parse("%K");
         assertNotNull(formatters);
-        assertTrue(formatters.size() == 1);
+        assertEquals(formatters.size(), 1);
         PatternFormatter formatter = formatters.get(0);
-        assertTrue("Expected a MapPatternConverter", formatter.getConverter() instanceof MapPatternConverter);
+        assertTrue(formatter.getConverter() instanceof MapPatternConverter, "Expected a MapPatternConverter");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest2.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest2.java
index 45c0a8b..38c7f80 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest2.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest2.java
@@ -21,13 +21,10 @@ import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class PatternParserTest2 {
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ProcessIdPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ProcessIdPatternConverterTest.java
index 05d8db3..f629fdd 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ProcessIdPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ProcessIdPatternConverterTest.java
@@ -1,4 +1,4 @@
-package org.apache.logging.log4j.core.pattern;/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements. See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -14,17 +14,18 @@ package org.apache.logging.log4j.core.pattern;/*
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
+package org.apache.logging.log4j.core.pattern;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests that process ID succeeds.
  */
 public class ProcessIdPatternConverterTest {
     @Test
-    public void getProcessId() throws Exception {
+    public void getProcessId() {
         final String[] defaultValue = {"???"};
         final String actual = ProcessIdPatternConverter.newInstance(defaultValue).getProcessId();
         assertNotEquals("???", actual);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RegexReplacementConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RegexReplacementConverterTest.java
index bf09eb4..b9ffe3f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RegexReplacementConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RegexReplacementConverterTest.java
@@ -23,13 +23,10 @@ import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class RegexReplacementConverterTest {
 
     @Test
@@ -47,6 +44,7 @@ public class RegexReplacementConverterTest {
         };
         final RegexReplacementConverter converter = RegexReplacementConverter.newInstance(ctx.getConfiguration(),
             options);
+        assertNotNull(converter);
         converter.format(event, sb);
         assertEquals("org/apache/logging/log4j/core/pattern/RegexReplacementConverterTest This is a test" +
             Strings.LINE_SEPARATOR, sb.toString());
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RegexReplacementTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RegexReplacementTest.java
index f357111..7d4e76d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RegexReplacementTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RegexReplacementTest.java
@@ -16,70 +16,68 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.List;
-
 import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.apache.logging.log4j.junit.ThreadContextMapRule;
+import org.apache.logging.log4j.ThreadContextHolder;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
 import org.apache.logging.log4j.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Test;
 
-/**
- *
- */
-public class RegexReplacementTest {
-    private static final String CONFIG = "log4j-replace.xml";
-    private static ListAppender app;
-    private static ListAppender app2;
+import java.util.List;
 
-    private static final String EXPECTED = "/RegexReplacementTest" + Strings.LINE_SEPARATOR;
+import static org.junit.jupiter.api.Assertions.*;
 
-    @ClassRule
-    public static LoggerContextRule context = new LoggerContextRule(CONFIG);
+@LoggerContextSource("log4j-replace.xml")
+public class RegexReplacementTest {
+    private final ThreadContextHolder holder = new ThreadContextHolder(true, false);
+    private final ListAppender app;
+    private final ListAppender app2;
+    private final org.apache.logging.log4j.Logger logger;
+    private final org.apache.logging.log4j.Logger logger2;
 
-    @Rule
-    public final ThreadContextMapRule threadContextRule = new ThreadContextMapRule(); 
+    private static final String EXPECTED = "/RegexReplacementTest" + Strings.LINE_SEPARATOR;
 
-    @Before
-    public void setUp() throws Exception {
-        app = context.getListAppender("List").clear();
-        app2 = context.getListAppender("List2").clear();
+    public RegexReplacementTest(
+            final LoggerContext context, @Named("List") final ListAppender app, @Named("List2") final ListAppender app2) {
+        logger = context.getLogger("LoggerTest");
+        logger2 = context.getLogger("ReplacementTest");
+        this.app = app.clear();
+        this.app2 = app2.clear();
+        ThreadContext.clearMap();
     }
 
-    org.apache.logging.log4j.Logger logger = context.getLogger("LoggerTest");
-    org.apache.logging.log4j.Logger logger2 = context.getLogger("ReplacementTest");
+    @AfterEach
+    void tearDown() {
+        holder.restore();
+    }
 
     @Test
     public void testReplacement() {
         logger.error(this.getClass().getName());
         List<String> msgs = app.getMessages();
         assertNotNull(msgs);
-        assertEquals("Incorrect number of messages. Should be 1 is " + msgs.size(), 1, msgs.size());
-        assertTrue("Replacement failed - expected ending " + EXPECTED + " Actual " + msgs.get(0),
-            msgs.get(0).endsWith(EXPECTED));
+        assertEquals(1, msgs.size(), "Incorrect number of messages. Should be 1 is " + msgs.size());
+        assertTrue(
+                msgs.get(0).endsWith(EXPECTED), "Replacement failed - expected ending " + EXPECTED + " Actual " + msgs.get(0));
         app.clear();
         ThreadContext.put("MyKey", "Apache");
         logger.error("This is a test for ${ctx:MyKey}");
         msgs = app.getMessages();
         assertNotNull(msgs);
-        assertEquals("Incorrect number of messages. Should be 1 is " + msgs.size(), 1, msgs.size());
+        assertEquals(1, msgs.size(), "Incorrect number of messages. Should be 1 is " + msgs.size());
         assertEquals("LoggerTest This is a test for Apache" + Strings.LINE_SEPARATOR, msgs.get(0));
     }
-     @Test
+
+    @Test
     public void testConverter() {
         logger2.error(this.getClass().getName());
         final List<String> msgs = app2.getMessages();
         assertNotNull(msgs);
-         assertEquals("Incorrect number of messages. Should be 1 is " + msgs.size(), 1, msgs.size());
-         assertTrue("Replacement failed - expected ending " + EXPECTED + " Actual " + msgs.get(0),
-             msgs.get(0).endsWith(EXPECTED));
+        assertEquals(1, msgs.size(), "Incorrect number of messages. Should be 1 is " + msgs.size());
+        assertTrue(
+                msgs.get(0).endsWith(EXPECTED), "Replacement failed - expected ending " + EXPECTED + " Actual " + msgs.get(0));
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RootThrowablePatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RootThrowablePatternConverterTest.java
index 90d42a6..846a460 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RootThrowablePatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RootThrowablePatternConverterTest.java
@@ -16,19 +16,15 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class RootThrowablePatternConverterTest {
 
     @Test
@@ -47,7 +43,7 @@ public class RootThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertTrue("No suffix", result.contains("test suffix"));
+        assertTrue(result.contains("test suffix"), "No suffix");
     }
 
     @Test
@@ -67,7 +63,7 @@ public class RootThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertTrue("No suffix", result.contains("test suffix"));
+        assertTrue(result.contains("test suffix"), "No suffix");
     }
 
     @Test
@@ -86,7 +82,7 @@ public class RootThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertFalse("Has unexpected suffix", result.contains("inner suffix"));
+        assertFalse(result.contains("inner suffix"), "Has unexpected suffix");
     }
 
     @Test
@@ -104,9 +100,9 @@ public class RootThrowablePatternConverterTest {
         converter.format(event, sb);
         final String result = sb.toString();
         // System.out.print(result);
-        assertTrue("Missing Exception",
-                result.contains("Wrapped by: java.lang.IllegalArgumentException: IllegalArgument"));
-        assertTrue("Incorrect start of msg", result.startsWith("java.lang.NullPointerException: null pointer"));
+        assertTrue(
+                result.contains("Wrapped by: java.lang.IllegalArgumentException: IllegalArgument"), "Missing Exception");
+        assertTrue(result.startsWith("java.lang.NullPointerException: null pointer"), "Incorrect start of msg");
     }
 
     /**
@@ -136,8 +132,8 @@ public class RootThrowablePatternConverterTest {
         converter.format(event, sb);
         final String result = sb.toString();
         // System.out.print(result);
-        assertTrue("Missing Exception",
-                result.contains("Wrapped by: java.lang.IllegalArgumentException: IllegalArgument"));
-        assertTrue("Incorrect start of msg", result.startsWith("java.lang.NullPointerException: null pointer"));
+        assertTrue(
+                result.contains("Wrapped by: java.lang.IllegalArgumentException: IllegalArgument"), "Missing Exception");
+        assertTrue(result.startsWith("java.lang.NullPointerException: null pointer"), "Incorrect start of msg");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RootThrowableTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RootThrowableTest.java
index 9e165a6..04ec850 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RootThrowableTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RootThrowableTest.java
@@ -16,42 +16,30 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import java.util.List;
-
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
 import org.apache.logging.log4j.test.appender.ListAppender;
-import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
+import org.junit.jupiter.api.Test;
 
-/**
- *
- */
-public class RootThrowableTest {
-    private static final String CONFIG = "log4j-rootthrowablefilter.xml";
-    private static ListAppender app;
-
-    @ClassRule
-    public static LoggerContextRule context = new LoggerContextRule(CONFIG);
+import java.util.List;
 
-    @Before
-    public void setUp() throws Exception {
-        app = context.getListAppender("List").clear();
-    }
+import static org.junit.jupiter.api.Assertions.*;
 
+@LoggerContextSource("log4j-rootthrowablefilter.xml")
+public class RootThrowableTest {
     @Test
-    public void testException() {
+    public void testException(final LoggerContext context, @Named("List") final ListAppender app) {
+        app.clear();
         final Logger logger = context.getLogger("LoggerTest");
         final Throwable cause = new NullPointerException("null pointer");
         final Throwable parent = new IllegalArgumentException("IllegalArgument", cause);
         logger.error("Exception", parent);
         final List<String> msgs = app.getMessages();
         assertNotNull(msgs);
-        assertEquals("Incorrect number of messages. Should be 1 is " + msgs.size(), 1, msgs.size());
-        assertTrue("No suppressed lines", msgs.get(0).contains("suppressed"));
+        assertEquals(1, msgs.size(), "Incorrect number of messages. Should be 1 is " + msgs.size());
+        assertTrue(msgs.get(0).contains("suppressed"), "No suppressed lines");
         app.clear();
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterTest.java
index b3fe206..d25df96 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterTest.java
@@ -16,35 +16,31 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import java.util.List;
-
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
 import org.apache.logging.log4j.test.appender.ListAppender;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
+import java.util.List;
 
-/**
- *
- */
-public class SequenceNumberPatternConverterTest {
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.contains;
 
-    @ClassRule
-    public static LoggerContextRule ctx = new LoggerContextRule("SequenceNumberPatternConverterTest.yml");
+@LoggerContextSource("SequenceNumberPatternConverterTest.yml")
+public class SequenceNumberPatternConverterTest {
 
     @Test
-    public void testSequenceIncreases() throws Exception {
-        final Logger logger = ctx.getLogger();
+    public void testSequenceIncreases(final LoggerContext context, @Named("List") final ListAppender app) {
+        app.clear();
+        final Logger logger = context.getLogger(getClass().getName());
         logger.info("Message 1");
         logger.info("Message 2");
         logger.info("Message 3");
         logger.info("Message 4");
         logger.info("Message 5");
 
-        final ListAppender app = ctx.getListAppender("List");
         final List<String> messages = app.getMessages();
         assertThat(messages, contains("1", "2", "3", "4", "5"));
     }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterZeroPaddedTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterZeroPaddedTest.java
index f7f2540..a7dc8b0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterZeroPaddedTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterZeroPaddedTest.java
@@ -16,43 +16,33 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import java.util.List;
-
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
 import org.apache.logging.log4j.test.appender.ListAppender;
-import org.junit.Test;
-
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
-import org.junit.Before;
-import org.junit.ClassRule;
+import org.junit.jupiter.api.Test;
 
-/**
- *
- */
-public class SequenceNumberPatternConverterZeroPaddedTest {
+import java.util.List;
 
-    @ClassRule
-    public static LoggerContextRule ctx = new LoggerContextRule("SequenceNumberPatternConverterZeroPaddedTest.yml");
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.contains;
 
-    @Before
-    public void before() {
-      ctx.getListAppender("Padded").clear();
-    }
+@LoggerContextSource("SequenceNumberPatternConverterZeroPaddedTest.yml")
+public class SequenceNumberPatternConverterZeroPaddedTest {
 
     @Test
-    public void testPaddedSequence() throws Exception {
-        final Logger logger = ctx.getLogger();
+    public void testPaddedSequence(final LoggerContext context, @Named("Padded") final ListAppender app) {
+        app.clear();
+        final Logger logger = context.getLogger(getClass().getName());
         logger.info("Message 1");
         logger.info("Message 2");
         logger.info("Message 3");
         logger.info("Message 4");
         logger.info("Message 5");
 
-        final ListAppender app = ctx.getListAppender("Padded");
         final List<String> messages = app.getMessages();
-        System.out.println("Written messages "+messages);
+        // System.out.println("Written messages "+messages);
         assertThat(messages, contains("001", "002", "003", "004", "005"));
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/StyleConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/StyleConverterTest.java
index 248fdc3..f82be20 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/StyleConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/StyleConverterTest.java
@@ -19,55 +19,42 @@ package org.apache.logging.log4j.core.pattern;
 import java.util.List;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
 import org.apache.logging.log4j.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class StyleConverterTest {
 
     private static final String EXPECTED =
         "\u001B[1;31mERROR\u001B[m \u001B[1;36mLoggerTest\u001B[m o.a.l.l.c.p.StyleConverterTest org.apache.logging.log4j.core.pattern.StyleConverterTest"
         + Strings.LINE_SEPARATOR;
 
-    @BeforeClass
+    @BeforeAll
     public static void beforeClass() {
         System.setProperty("log4j.skipJansi", "false"); // LOG4J2-2087: explicitly enable
     }
 
-    @Rule
-    public LoggerContextRule init = new LoggerContextRule("log4j-style.xml");
-
-    private Logger logger;
-    private ListAppender app;
-
-    @Before
-    public void setUp() throws Exception {
-        this.logger = this.init.getLogger("LoggerTest");
-        this.app = this.init.getListAppender("List").clear();
-    }
-
     @Test
-    public void testReplacement() {
+    @LoggerContextSource("log4j-style.xml")
+    public void testReplacement(final LoggerContext context, @Named("List") final ListAppender app) {
+        final Logger logger = context.getLogger("LoggerTest");
         logger.error(this.getClass().getName());
 
         final List<String> msgs = app.getMessages();
         assertNotNull(msgs);
-        assertEquals("Incorrect number of messages. Should be 1 is " + msgs.size(), 1, msgs.size());
-        assertTrue("Replacement failed - expected ending " + EXPECTED + ", actual " + msgs.get(0), msgs.get(0).endsWith(EXPECTED));
+        assertEquals(1, msgs.size(), "Incorrect number of messages. Should be 1 is " + msgs.size());
+        assertTrue(msgs.get(0).endsWith(EXPECTED),
+                "Replacement failed - expected ending " + EXPECTED + ", actual " + msgs.get(0));
     }
 
     @Test
     public void testNull() {
-        Assert.assertNull(StyleConverter.newInstance(null, null));
+        assertNull(StyleConverter.newInstance(null, null));
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThreadIdPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThreadIdPatternConverterTest.java
index b608df8..883cf71 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThreadIdPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThreadIdPatternConverterTest.java
@@ -18,13 +18,10 @@ package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class ThreadIdPatternConverterTest {
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThreadNamePatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThreadNamePatternConverterTest.java
index 1ae94d2..2458b6b 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThreadNamePatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThreadNamePatternConverterTest.java
@@ -18,13 +18,10 @@ package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class ThreadNamePatternConverterTest {
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThreadPriorityPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThreadPriorityPatternConverterTest.java
index 37db555..82b6cd7 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThreadPriorityPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThreadPriorityPatternConverterTest.java
@@ -18,13 +18,10 @@ package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class ThreadPriorityPatternConverterTest {
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThrowablePatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThrowablePatternConverterTest.java
index 4931cf0..cc52994 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThrowablePatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThrowablePatternConverterTest.java
@@ -16,15 +16,14 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 public class ThrowablePatternConverterTest {
 
@@ -51,10 +50,10 @@ public class ThrowablePatternConverterTest {
     /**
      * TODO: Needs better a better exception? NumberFormatException is NOT helpful.
      */
-    @Test(expected = Exception.class)
+    @Test
     public void testBadShortOption() {
         final String[] options = { "short.UNKNOWN" };
-        ThrowablePatternConverter.newInstance(null, options);
+        assertThrows(NumberFormatException.class, () -> ThrowablePatternConverter.newInstance(null, options));
     }
 
     @Test
@@ -81,8 +80,8 @@ public class ThrowablePatternConverterTest {
         converter.format(event, sb);
         final String result = sb.toString();
         // System.out.print(result);
-        assertTrue("Incorrect start of msg", result.startsWith("java.lang.IllegalArgumentException: IllegalArgument"));
-        assertTrue("Missing nested exception", result.contains("java.lang.NullPointerException: null pointer"));
+        assertTrue(result.startsWith("java.lang.IllegalArgumentException: IllegalArgument"), "Incorrect start of msg");
+        assertTrue(result.contains("java.lang.NullPointerException: null pointer"), "Missing nested exception");
     }
 
     @Test
@@ -101,7 +100,7 @@ public class ThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertEquals("The class names should be same", packageName + "ThrowablePatternConverterTest", result);
+        assertEquals(packageName + "ThrowablePatternConverterTest", result, "The class names should be same");
     }
 
     @Test
@@ -119,7 +118,7 @@ public class ThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertEquals("The file names should be same", "ThrowablePatternConverterTest.java", result);
+        assertEquals("ThrowablePatternConverterTest.java", result, "The file names should be same");
     }
 
     @Test
@@ -140,7 +139,7 @@ public class ThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertTrue("The line numbers should be same", expectedLineNumber == Integer.parseInt(result));
+        assertEquals(Integer.parseInt(result), expectedLineNumber, "The line numbers should be same");
     }
 
     @Test
@@ -157,7 +156,7 @@ public class ThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertEquals("The messages should be same", "I am localized.", result);
+        assertEquals("I am localized.", result, "The messages should be same");
     }
 
     @Test
@@ -175,7 +174,7 @@ public class ThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertEquals("The messages should be same", "IllegalArgument", result);
+        assertEquals("IllegalArgument", result, "The messages should be same");
     }
 
     @Test
@@ -193,7 +192,7 @@ public class ThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertEquals("The method names should be same", "testShortMethodName", result);
+        assertEquals("testShortMethodName", result, "The method names should be same");
     }
 
     @Test
@@ -219,7 +218,8 @@ public class ThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertTrue("Each line of full stack trace should end with the specified suffix", everyLineEndsWith(result, "test suffix"));
+        assertTrue(everyLineEndsWith(result, "test suffix"),
+                "Each line of full stack trace should end with the specified suffix");
     }
 
     @Test
@@ -238,7 +238,7 @@ public class ThrowablePatternConverterTest {
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
-        assertTrue("Each line should end with suffix", everyLineEndsWith(result, "test suffix"));
+        assertTrue(everyLineEndsWith(result, "test suffix"), "Each line should end with suffix");
     }
 
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThrowableTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThrowableTest.java
index 80a7ed8..8e6847d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThrowableTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThrowableTest.java
@@ -19,31 +19,29 @@ package org.apache.logging.log4j.core.pattern;
 import java.util.List;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
 import org.apache.logging.log4j.test.appender.ListAppender;
-import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Unit tests for {@code throwable} pattern.
  */
+@LoggerContextSource("log4j-throwable.xml")
 public class ThrowableTest {
-    private static final String CONFIG = "log4j-throwable.xml";
-    private static ListAppender app;
+    private ListAppender app;
+    private Logger logger;
 
-    @ClassRule
-    public static LoggerContextRule context = new LoggerContextRule(CONFIG);
-
-    @Before
-    public void setUp() throws Exception {
-        app = context.getListAppender("List").clear();
+    @BeforeEach
+    public void setUp(final LoggerContext context, @Named("List") final ListAppender app) {
+        this.logger = context.getLogger("LoggerTest");
+        this.app = app.clear();
     }
 
-    Logger logger = context.getLogger("LoggerTest");
-
     @Test
     public void testException() {
         final Throwable cause = new NullPointerException("null pointer");
@@ -51,7 +49,7 @@ public class ThrowableTest {
         logger.error("Exception", parent);
         final List<String> msgs = app.getMessages();
         assertNotNull(msgs);
-        assertEquals("Incorrect number of messages. Should be 1 is " + msgs.size(), 1, msgs.size());
-        assertFalse("No suppressed lines", msgs.get(0).contains("suppressed"));
+        assertEquals(1, msgs.size(), "Incorrect number of messages. Should be 1 is " + msgs.size());
+        assertFalse(msgs.get(0).contains("suppressed"), "No suppressed lines");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/VariablesNotEmptyReplacementConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/VariablesNotEmptyReplacementConverterTest.java
index dd6f1b6..34a8a13 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/VariablesNotEmptyReplacementConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/VariablesNotEmptyReplacementConverterTest.java
@@ -16,19 +16,16 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import static org.junit.Assert.assertEquals;
-
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class VariablesNotEmptyReplacementConverterTest {
 
     @Test
@@ -72,6 +69,7 @@ public class VariablesNotEmptyReplacementConverterTest {
         final String[] options = new String[] { "[" + tag + "]" };
         final VariablesNotEmptyReplacementConverter converter = VariablesNotEmptyReplacementConverter
                 .newInstance(ctx.getConfiguration(), options);
+        assertNotNull(converter);
         converter.format(event, sb);
         assertEquals(expectedValue, sb.toString());
     }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/time/ClockFactoryTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/time/ClockFactoryTest.java
index dbf7880..cdc37be 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/time/ClockFactoryTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/time/ClockFactoryTest.java
@@ -43,7 +43,7 @@ public class ClockFactoryTest {
     public static void resetClock(final Class<?> clazz) throws IllegalAccessException {
         System.clearProperty(ClockFactory.PROPERTY_NAME);
         final Field field = FieldUtils.getField(clazz, "CLOCK", true);
-        FieldUtils.removeFinalModifier(field, true);
+        FieldUtils.removeFinalModifier(field);
         FieldUtils.writeStaticField(field, ClockFactory.getClock(), false);
     }