You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by fr...@apache.org on 2024/10/22 09:32:45 UTC

(logging-log4net) 01/01: added NUnit.Analyzers before moving to NUnit 4

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

freeandnil pushed a commit to branch Feature/NUnitBump
in repository https://gitbox.apache.org/repos/asf/logging-log4net.git

commit ec95778d0198bb147c1ed8180bcca966fc3c1175
Author: Jan Friedrich <fr...@apache.org>
AuthorDate: Tue Oct 22 11:32:21 2024 +0200

    added NUnit.Analyzers before moving to NUnit 4
---
 .editorconfig                                      |  26 +-
 src/Directory.Build.props                          |   7 +-
 src/log4net.Tests/Appender/AdoNetAppenderTest.cs   |  57 ++--
 .../Appender/AppenderCollectionTest.cs             |   8 +-
 .../Appender/BufferingAppenderTest.cs              |  22 +-
 src/log4net.Tests/Appender/DebugAppenderTest.cs    |  30 +-
 src/log4net.Tests/Appender/EventLogAppenderTest.cs |  44 +--
 src/log4net.Tests/Appender/FileAppenderTest.cs     |   2 +-
 src/log4net.Tests/Appender/MemoryAppenderTest.cs   |   2 +-
 src/log4net.Tests/Appender/RecursiveLoggingTest.cs |   2 +-
 .../Appender/RollingFileAppenderTest.cs            | 128 ++++---
 .../Appender/SmtpPickupDirAppenderTest.cs          |  22 +-
 src/log4net.Tests/Appender/TelnetAppenderTest.cs   |   4 +-
 src/log4net.Tests/Appender/TraceAppenderTest.cs    |  12 +-
 .../Context/LogicalThreadContextTest.cs            |  54 +--
 src/log4net.Tests/Context/ThreadContextTest.cs     |  38 +--
 .../Core/DefaultRepositorySelectorTest.cs          | 108 +++---
 src/log4net.Tests/Core/EvaluatorTest.cs            |  28 +-
 src/log4net.Tests/Core/FixingTest.cs               |  32 +-
 src/log4net.Tests/Core/LevelMapTest.cs             |  32 +-
 src/log4net.Tests/Core/LevelMappingTest.cs         |  30 +-
 src/log4net.Tests/Core/LevelTest.cs                |  16 +-
 src/log4net.Tests/Core/LoggingEventTest.cs         |  78 ++---
 src/log4net.Tests/Core/ShutdownTest.cs             |   6 +-
 src/log4net.Tests/Core/StringFormatTest.cs         | 372 ++++++++++-----------
 .../DateFormatter/AbsoluteTimeDateFormatterTest.cs |  12 +-
 .../DateFormatter/DateTimeDateFormatterTest.cs     |   4 +-
 src/log4net.Tests/Filter/FilterTest.cs             |  36 +-
 src/log4net.Tests/Hierarchy/HierarchyTest.cs       |  21 +-
 src/log4net.Tests/Hierarchy/LoggerTest.cs          | 240 +++++++------
 .../Hierarchy/XmlHierarchyConfiguratorTest.cs      |   8 +-
 src/log4net.Tests/Layout/PatternLayoutTest.cs      |  66 ++--
 src/log4net.Tests/Layout/XmlLayoutTest.cs          |  28 +-
 .../LoggerRepository/ConfigurationMessages.cs      |   4 +-
 .../ObjectRenderer/DefaultRendererTest.cs          |  12 +-
 src/log4net.Tests/Signing.cs                       |   4 +-
 src/log4net.Tests/Util/CyclicBufferTest.cs         |  50 ++-
 .../Util/EncodingWithoutPreambleTest.cs            |  14 +-
 .../Util/EnvironmentPatternConverterTest.cs        |   6 +-
 src/log4net.Tests/Util/LogLogTest.cs               |   8 +-
 src/log4net.Tests/Util/PatternConverterTest.cs     |  42 +--
 src/log4net.Tests/Util/PatternStringTest.cs        |  10 +-
 src/log4net.Tests/Util/PropertiesDictionaryTest.cs |   8 +-
 .../Util/RandomStringPatternConverterTest.cs       |   6 +-
 src/log4net.Tests/Util/SystemInfoTest.cs           |  26 +-
 src/log4net.Tests/Util/TransformTest.cs            |   4 +-
 src/log4net.Tests/log4net.Tests.csproj             |   1 +
 src/log4net/Util/EncodingWithoutPreamble.cs        |   2 +-
 48 files changed, 847 insertions(+), 925 deletions(-)

diff --git a/.editorconfig b/.editorconfig
index ceeea3be..81d6327b 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -40,26 +40,26 @@ dotnet_naming_style.prefix_underscore.required_prefix = _
 
 dotnet_naming_symbols.interface.applicable_kinds = interface
 dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
-dotnet_naming_symbols.interface.required_modifiers = 
+dotnet_naming_symbols.interface.required_modifiers =
 
 dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
 dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
-dotnet_naming_symbols.types.required_modifiers = 
+dotnet_naming_symbols.types.required_modifiers =
 
 dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
 dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
-dotnet_naming_symbols.non_field_members.required_modifiers = 
+dotnet_naming_symbols.non_field_members.required_modifiers =
 
 # Naming styles
 
 dotnet_naming_style.begins_with_i.required_prefix = I
-dotnet_naming_style.begins_with_i.required_suffix = 
-dotnet_naming_style.begins_with_i.word_separator = 
+dotnet_naming_style.begins_with_i.required_suffix =
+dotnet_naming_style.begins_with_i.word_separator =
 dotnet_naming_style.begins_with_i.capitalization = pascal_case
 
-dotnet_naming_style.pascal_case.required_prefix = 
-dotnet_naming_style.pascal_case.required_suffix = 
-dotnet_naming_style.pascal_case.word_separator = 
+dotnet_naming_style.pascal_case.required_prefix =
+dotnet_naming_style.pascal_case.required_suffix =
+dotnet_naming_style.pascal_case.word_separator =
 dotnet_naming_style.pascal_case.capitalization = pascal_case
 dotnet_style_operator_placement_when_wrapping = beginning_of_line
 tab_width = 2
@@ -79,7 +79,7 @@ dotnet_style_prefer_inferred_tuple_names = true:suggestion
 dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
 dotnet_style_prefer_compound_assignment = true:suggestion
 dotnet_style_prefer_simplified_interpolation = true:suggestion
-dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion
+dotnet_style_prefer_collection_expression = when_types_loosely_match:none
 dotnet_style_namespace_match_folder = true:suggestion
 dotnet_style_readonly_field = true:suggestion
 dotnet_style_predefined_type_for_locals_parameters_members = true:silent
@@ -121,7 +121,7 @@ csharp_space_around_binary_operators = before_and_after
 csharp_style_prefer_local_over_anonymous_function = true:suggestion
 csharp_style_prefer_index_operator = true:suggestion
 csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion
-csharp_style_prefer_range_operator = true:suggestion
+csharp_style_prefer_range_operator = true:none
 csharp_style_prefer_tuple_swap = true:suggestion
 csharp_style_prefer_utf8_string_literals = true:suggestion
 csharp_style_inlined_variable_declaration = true:suggestion
@@ -165,4 +165,8 @@ dotnet_diagnostic.KR1012.severity = none
 # KR1013: Name base classes correctly
 dotnet_diagnostic.KR1013.severity = none
 # KR1037: Use EnvironmentHelper instead of DateTime.
-dotnet_diagnostic.KR1037.severity = none
\ No newline at end of file
+dotnet_diagnostic.KR1037.severity = none
+# NUnit2045: Use Assert.Multiple
+dotnet_diagnostic.NUnit2045.severity = none
+# IDE0079: Remove unnecessary suppressions
+dotnet_diagnostic.IDE0079.severity = none
\ No newline at end of file
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index 49ce6346..a0d3ee37 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -11,9 +11,10 @@
     <SystemConfigurationConfigurationManagerPackageVersion>4.5.0</SystemConfigurationConfigurationManagerPackageVersion>
     <MicrosoftSourceLinkGitHubPackageVersion>8.0.0</MicrosoftSourceLinkGitHubPackageVersion>
     <!-- Test Packages -->
-    <MicrosoftNetTestSdkPackageVersion>17.9.0</MicrosoftNetTestSdkPackageVersion>
+    <MicrosoftNetTestSdkPackageVersion>17.11.1</MicrosoftNetTestSdkPackageVersion>
+    <NUnitAnalyzersPackageVersion>4.3.0</NUnitAnalyzersPackageVersion>
     <NUnitPackageVersion>3.14.0</NUnitPackageVersion>
-    <NUnit3TestAdapterPackageVersion>4.5.0</NUnit3TestAdapterPackageVersion>
-    <QuackersTestLoggerPackageVersion>1.0.24</QuackersTestLoggerPackageVersion>
+    <NUnit3TestAdapterPackageVersion>4.6.0</NUnit3TestAdapterPackageVersion>
+    <QuackersTestLoggerPackageVersion>1.0.25</QuackersTestLoggerPackageVersion>
   </PropertyGroup>
 </Project>
\ No newline at end of file
diff --git a/src/log4net.Tests/Appender/AdoNetAppenderTest.cs b/src/log4net.Tests/Appender/AdoNetAppenderTest.cs
index d054baa6..95106ecf 100644
--- a/src/log4net.Tests/Appender/AdoNetAppenderTest.cs
+++ b/src/log4net.Tests/Appender/AdoNetAppenderTest.cs
@@ -52,8 +52,8 @@ public class AdoNetAppenderTest
 
     ILog log = LogManager.GetLogger(rep.Name, "NoBufferingTest");
     log.Debug("Message");
-    Assert.NotNull(Log4NetCommand.MostRecentInstance);
-    Assert.AreEqual(1, Log4NetCommand.MostRecentInstance!.ExecuteNonQueryCount);
+    Assert.That(Log4NetCommand.MostRecentInstance, Is.Not.Null);
+    Assert.That(Log4NetCommand.MostRecentInstance!.ExecuteNonQueryCount, Is.EqualTo(1));
   }
 
   [Test]
@@ -76,11 +76,11 @@ public class AdoNetAppenderTest
     for (int i = 0; i < bufferSize; i++)
     {
       log.Debug("Message");
-      Assert.IsNull(Log4NetCommand.MostRecentInstance);
+      Assert.That(Log4NetCommand.MostRecentInstance, Is.Null);
     }
     log.Debug("Message");
-    Assert.NotNull(Log4NetCommand.MostRecentInstance);
-    Assert.AreEqual(bufferSize + 1, Log4NetCommand.MostRecentInstance!.ExecuteNonQueryCount);
+    Assert.That(Log4NetCommand.MostRecentInstance, Is.Not.Null);
+    Assert.That(Log4NetCommand.MostRecentInstance!.ExecuteNonQueryCount, Is.EqualTo(bufferSize + 1));
   }
 
   [Test]
@@ -150,25 +150,23 @@ public class AdoNetAppenderTest
     log.Debug("Message");
 
     IDbCommand? command = Log4NetCommand.MostRecentInstance;
-    Assert.NotNull(command);
+    Assert.That(command, Is.Not.Null);
 
-    Assert.AreEqual(
-        "INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)",
-        command!.CommandText);
-
-    Assert.AreEqual(6, command.Parameters.Count);
+    Assert.That(command.CommandText,
+      Is.EqualTo("INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"));
+    Assert.That(command.Parameters, Has.Count.EqualTo(6));
 
     IDbDataParameter param = (IDbDataParameter)command.Parameters["@message"];
-    Assert.AreEqual("Message", param.Value);
+    Assert.That(param.Value, Is.EqualTo("Message"));
 
     param = (IDbDataParameter)command.Parameters["@log_level"];
-    Assert.AreEqual(Level.Debug.ToString(), param.Value);
+    Assert.That(param.Value, Is.EqualTo(Level.Debug.ToString()));
 
     param = (IDbDataParameter)command.Parameters["@logger"];
-    Assert.AreEqual("WebsiteExample", param.Value);
+    Assert.That(param.Value, Is.EqualTo("WebsiteExample"));
 
     param = (IDbDataParameter)command.Parameters["@exception"];
-    Assert.IsEmpty((string?)param.Value);
+    Assert.That((string?)param.Value, Is.Empty);
   }
 
   [Test]
@@ -242,25 +240,24 @@ public class AdoNetAppenderTest
     }
 
     IDbCommand? command = Log4NetCommand.MostRecentInstance;
-    Assert.NotNull(command);
+    Assert.That(command, Is.Not.Null);
 
-    Assert.AreEqual(
-        "INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)",
-        command!.CommandText);
+    Assert.That(command!.CommandText,
+     Is.EqualTo("INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"));
 
-    Assert.AreEqual(6, command.Parameters.Count);
+    Assert.That(command.Parameters, Has.Count.EqualTo(6));
 
     IDbDataParameter param = (IDbDataParameter)command.Parameters["@message"];
-    Assert.AreEqual("Message", param.Value);
+    Assert.That(param.Value, Is.EqualTo("Message"));
 
     param = (IDbDataParameter)command.Parameters["@log_level"];
-    Assert.AreEqual(Level.Debug.ToString(), param.Value);
+    Assert.That(param.Value, Is.EqualTo(Level.Debug.ToString()));
 
     param = (IDbDataParameter)command.Parameters["@logger"];
-    Assert.AreEqual("WebsiteExample", param.Value);
+    Assert.That(param.Value, Is.EqualTo("WebsiteExample"));
 
     param = (IDbDataParameter)command.Parameters["@exception"];
-    Assert.IsEmpty((string?)param.Value);
+    Assert.That(param.Value, Is.Empty);
   }
 
   [Test]
@@ -295,11 +292,11 @@ public class AdoNetAppenderTest
 
     log.Debug("Message");
     IDbCommand? command = Log4NetCommand.MostRecentInstance;
-    Assert.NotNull(command);
+    Assert.That(command, Is.Not.Null);
 
     IDbDataParameter param = (IDbDataParameter)command!.Parameters["@productId"];
-    Assert.AreNotEqual(SystemInfo.NullText, param.Value);
-    Assert.AreEqual(DBNull.Value, param.Value);
+    Assert.That(param.Value, Is.Not.EqualTo(SystemInfo.NullText));
+    Assert.That(param.Value, Is.EqualTo(DBNull.Value));
   }
 
   [Test]
@@ -332,10 +329,10 @@ public class AdoNetAppenderTest
 
     log.Debug("Message");
     IDbCommand? command = Log4NetCommand.MostRecentInstance;
-    Assert.NotNull(command);
+    Assert.That(command, Is.Not.Null);
 
     IDbDataParameter param = (IDbDataParameter)command!.Parameters["@productId"];
-    Assert.AreNotEqual(SystemInfo.NullText, param.Value);
-    Assert.AreEqual(DBNull.Value, param.Value);
+    Assert.That(param.Value, Is.Not.EqualTo(SystemInfo.NullText));
+    Assert.That(param.Value, Is.EqualTo(DBNull.Value));
   }
 }
diff --git a/src/log4net.Tests/Appender/AppenderCollectionTest.cs b/src/log4net.Tests/Appender/AppenderCollectionTest.cs
index 8f2c4890..c0e56daf 100644
--- a/src/log4net.Tests/Appender/AppenderCollectionTest.cs
+++ b/src/log4net.Tests/Appender/AppenderCollectionTest.cs
@@ -44,8 +44,8 @@ public class AppenderCollectionTest
 
     IAppender[] appenderArray = appenderCollection.ToArray();
 
-    Assert.AreEqual(1, appenderArray.Length);
-    Assert.AreEqual(appender, appenderArray[0]);
+    Assert.That(appenderArray, Has.Length.EqualTo(1));
+    Assert.That(appenderArray[0], Is.EqualTo(appender));
   }
 
   [Test]
@@ -58,7 +58,7 @@ public class AppenderCollectionTest
 
     IAppender[] appenderArray = readonlyAppenderCollection.ToArray();
 
-    Assert.AreEqual(1, appenderArray.Length);
-    Assert.AreEqual(appender, appenderArray[0]);
+    Assert.That(appenderArray, Has.Length.EqualTo(1));
+    Assert.That(appenderArray[0], Is.EqualTo(appender));
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Appender/BufferingAppenderTest.cs b/src/log4net.Tests/Appender/BufferingAppenderTest.cs
index f56ec5a7..6a9cf1d5 100644
--- a/src/log4net.Tests/Appender/BufferingAppenderTest.cs
+++ b/src/log4net.Tests/Appender/BufferingAppenderTest.cs
@@ -63,12 +63,12 @@ public class BufferingAppenderTest
   {
     SetupRepository();
 
-    Assert.AreEqual(0, _countingAppender.Counter, "Test empty appender");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test empty appender");
 
     ILogger logger = _hierarchy.GetLogger("test");
     logger.Log(typeof(BufferingAppenderTest), Level.Warn, "Message logged", null);
 
-    Assert.AreEqual(1, _countingAppender.Counter, "Test 1 event logged");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(1), "Test 1 event logged");
   }
 
   [Test]
@@ -79,25 +79,25 @@ public class BufferingAppenderTest
     _bufferingForwardingAppender.BufferSize = 5;
     _bufferingForwardingAppender.ActivateOptions();
 
-    Assert.AreEqual(_countingAppender.Counter, 0);
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0));
 
     ILogger logger = _hierarchy.GetLogger("test");
 
     logger.Log(typeof(BufferingAppenderTest), Level.Warn, "Message 1", null);
-    Assert.AreEqual(0, _countingAppender.Counter, "Test 1 event in buffer");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test 1 event in buffer");
     logger.Log(typeof(BufferingAppenderTest), Level.Warn, "Message 2", null);
-    Assert.AreEqual(0, _countingAppender.Counter, "Test 2 event in buffer");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test 2 event in buffer");
     logger.Log(typeof(BufferingAppenderTest), Level.Warn, "Message 3", null);
-    Assert.AreEqual(0, _countingAppender.Counter, "Test 3 event in buffer");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test 3 event in buffer");
     logger.Log(typeof(BufferingAppenderTest), Level.Warn, "Message 4", null);
-    Assert.AreEqual(0, _countingAppender.Counter, "Test 4 event in buffer");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test 4 event in buffer");
     logger.Log(typeof(BufferingAppenderTest), Level.Warn, "Message 5", null);
-    Assert.AreEqual(0, _countingAppender.Counter, "Test 5 event in buffer");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test 5 event in buffer");
     logger.Log(typeof(BufferingAppenderTest), Level.Warn, "Message 6", null);
-    Assert.AreEqual(6, _countingAppender.Counter, "Test 0 event in buffer. 6 event sent");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(6), "Test 0 event in buffer. 6 event sent");
     logger.Log(typeof(BufferingAppenderTest), Level.Warn, "Message 7", null);
-    Assert.AreEqual(6, _countingAppender.Counter, "Test 1 event in buffer. 6 event sent");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(6), "Test 1 event in buffer. 6 event sent");
     logger.Log(typeof(BufferingAppenderTest), Level.Warn, "Message 8", null);
-    Assert.AreEqual(6, _countingAppender.Counter, "Test 2 event in buffer. 6 event sent");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(6), "Test 2 event in buffer. 6 event sent");
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Appender/DebugAppenderTest.cs b/src/log4net.Tests/Appender/DebugAppenderTest.cs
index 35b034ae..066d3cdd 100644
--- a/src/log4net.Tests/Appender/DebugAppenderTest.cs
+++ b/src/log4net.Tests/Appender/DebugAppenderTest.cs
@@ -58,9 +58,9 @@ public class DebugAppenderTest
     ILog log = LogManager.GetLogger(rep.Name, GetType());
     log.Debug("Message");
 
-    Assert.IsNull(categoryTraceListener.Category);
+    Assert.That(categoryTraceListener.Category, Is.Null);
 
-    Assert.IsFalse(testErrHandler.ErrorOccured);
+    Assert.That(testErrHandler.ErrorOccured, Is.False);
 
     Debug.Listeners.Remove(categoryTraceListener);
   }
@@ -86,7 +86,7 @@ public class DebugAppenderTest
     ILog log = LogManager.GetLogger(rep.Name, GetType());
     log.Debug("Message");
 
-    Assert.IsNull(categoryTraceListener.Category);
+    Assert.That(categoryTraceListener.Category, Is.Null);
 
     Debug.Listeners.Remove(categoryTraceListener);
   }
@@ -110,9 +110,9 @@ public class DebugAppenderTest
     ILog log = LogManager.GetLogger(rep.Name, GetType());
     log.Debug("Message");
 
-    Assert.AreEqual(
-        GetType().ToString(),
-        categoryTraceListener.Category);
+    Assert.That(
+      categoryTraceListener.Category,
+      Is.EqualTo(GetType().ToString()));
 
     Debug.Listeners.Remove(categoryTraceListener);
   }
@@ -137,9 +137,9 @@ public class DebugAppenderTest
     ILog log = LogManager.GetLogger(rep.Name, GetType());
     log.Debug("Message");
 
-    Assert.AreEqual(
-        MethodInfo.GetCurrentMethod().Name,
-        categoryTraceListener.Category);
+    Assert.That(
+        categoryTraceListener.Category,
+        Is.EqualTo(MethodInfo.GetCurrentMethod().Name));
 
     Debug.Listeners.Remove(categoryTraceListener);
   }
@@ -149,19 +149,13 @@ public class DebugAppenderTest
     public bool ErrorOccured { get; private set; }
 
     public void Error(string message, Exception? e, ErrorCode errorCode)
-    {
-      ErrorOccured = true;
-    }
+      => ErrorOccured = true;
 
     public void Error(string message, Exception e)
-    {
-      Error(message, e, ErrorCode.GenericFailure);
-    }
+      => Error(message, e, ErrorCode.GenericFailure);
 
     public void Error(string message)
-    {
-      Error(message, null, ErrorCode.GenericFailure);
-    }
+      => Error(message, null, ErrorCode.GenericFailure);
   }
 }
 #endif
\ No newline at end of file
diff --git a/src/log4net.Tests/Appender/EventLogAppenderTest.cs b/src/log4net.Tests/Appender/EventLogAppenderTest.cs
index db6acac4..ad0cd705 100644
--- a/src/log4net.Tests/Appender/EventLogAppenderTest.cs
+++ b/src/log4net.Tests/Appender/EventLogAppenderTest.cs
@@ -45,39 +45,29 @@ public sealed class EventLogAppenderTest
   [Test]
   public void TestGetEntryTypeForExistingApplicationName()
   {
-    EventLogAppender eventAppender = new()
-    {
-      ApplicationName = "Winlogon"
-    };
+    EventLogAppender eventAppender = new() { ApplicationName = "Winlogon" };
     eventAppender.ActivateOptions();
 
-    Assert.AreEqual(
-      EventLogEntryType.Information,
-      eventAppender.GetEntryType(Level.All));
+    Assert.That(eventAppender.GetEntryType(Level.All),
+      Is.EqualTo(EventLogEntryType.Information));
 
-    Assert.AreEqual(
-      EventLogEntryType.Information,
-      eventAppender.GetEntryType(Level.Debug));
+    Assert.That(eventAppender.GetEntryType(Level.Debug),
+      Is.EqualTo(EventLogEntryType.Information));
 
-    Assert.AreEqual(
-      EventLogEntryType.Information,
-      eventAppender.GetEntryType(Level.Info));
+    Assert.That(eventAppender.GetEntryType(Level.Info),
+      Is.EqualTo(EventLogEntryType.Information));
 
-    Assert.AreEqual(
-      EventLogEntryType.Warning,
-      eventAppender.GetEntryType(Level.Warn));
+    Assert.That(eventAppender.GetEntryType(Level.Warn),
+      Is.EqualTo(EventLogEntryType.Warning));
 
-    Assert.AreEqual(
-      EventLogEntryType.Error,
-      eventAppender.GetEntryType(Level.Error));
+    Assert.That(eventAppender.GetEntryType(Level.Error),
+      Is.EqualTo(EventLogEntryType.Error));
 
-    Assert.AreEqual(
-      EventLogEntryType.Error,
-      eventAppender.GetEntryType(Level.Fatal));
+    Assert.That(eventAppender.GetEntryType(Level.Fatal),
+      Is.EqualTo(EventLogEntryType.Error));
 
-    Assert.AreEqual(
-      EventLogEntryType.Error,
-      eventAppender.GetEntryType(Level.Off));
+    Assert.That(eventAppender.GetEntryType(Level.Off),
+      Is.EqualTo(EventLogEntryType.Error));
   }
 
   /// <summary>
@@ -87,9 +77,9 @@ public sealed class EventLogAppenderTest
   [Ignore("seems to require administrator privileges or a specific environment when run")]
   public void ActivateOptionsDisablesAppenderIfSourceDoesntExist()
   {
-    var eventAppender = new EventLogAppender();
+    EventLogAppender eventAppender = new();
     eventAppender.ActivateOptions();
-    Assert.AreEqual(Level.Off, eventAppender.Threshold);
+    Assert.That(eventAppender.Threshold, Is.EqualTo(Level.Off));
   }
 }
 
diff --git a/src/log4net.Tests/Appender/FileAppenderTest.cs b/src/log4net.Tests/Appender/FileAppenderTest.cs
index 22599d6d..35b77383 100644
--- a/src/log4net.Tests/Appender/FileAppenderTest.cs
+++ b/src/log4net.Tests/Appender/FileAppenderTest.cs
@@ -147,6 +147,6 @@ public sealed class FileAppenderTest
     ILogger logger = rep.GetLogger(nameof(FilenameWithGlobalContextPatternStringTest));
     logger.Log(GetType(), Level.Info, nameof(FilenameWithGlobalContextPatternStringTest), null);
     logs.Refresh();
-    Assert.IsTrue(logs.GetFiles().Any(file => file.Name.StartsWith("file_custom_log_issue_193")));
+    Assert.That(logs.GetFiles().Any(file => file.Name.StartsWith("file_custom_log_issue_193")));
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Appender/MemoryAppenderTest.cs b/src/log4net.Tests/Appender/MemoryAppenderTest.cs
index a51c5482..4b6b8220 100644
--- a/src/log4net.Tests/Appender/MemoryAppenderTest.cs
+++ b/src/log4net.Tests/Appender/MemoryAppenderTest.cs
@@ -70,7 +70,7 @@ public class MemoryAppenderTest
       thread.Join();
     }
     cEventsRead += memoryAppender.PopAllEvents().Length;
-    Assert.AreEqual(EventsExpected, cEventsRead, "Log events were lost.");
+    Assert.That(cEventsRead, Is.EqualTo(EventsExpected), "Log events were lost.");
   }
 
   private static ThreadStart LogMessages(string repository)
diff --git a/src/log4net.Tests/Appender/RecursiveLoggingTest.cs b/src/log4net.Tests/Appender/RecursiveLoggingTest.cs
index 76356735..a2724bab 100644
--- a/src/log4net.Tests/Appender/RecursiveLoggingTest.cs
+++ b/src/log4net.Tests/Appender/RecursiveLoggingTest.cs
@@ -67,6 +67,6 @@ public class RecursiveLoggingTest
     _eventCount = 0;
     _logger!.Log(typeof(RecursiveLoggingTest), Level.Warn, "Message logged", null);
 
-    Assert.AreEqual(MaxRecursion, _eventCount, "Expected MaxRecursion recursive calls");
+    Assert.That(_eventCount, Is.EqualTo(MaxRecursion), "Expected MaxRecursion recursive calls");
   }
 }
diff --git a/src/log4net.Tests/Appender/RollingFileAppenderTest.cs b/src/log4net.Tests/Appender/RollingFileAppenderTest.cs
index 70f86e7c..5d3e71f1 100644
--- a/src/log4net.Tests/Appender/RollingFileAppenderTest.cs
+++ b/src/log4net.Tests/Appender/RollingFileAppenderTest.cs
@@ -146,8 +146,8 @@ public sealed class RollingFileAppenderTest
   private static void VerifyFileCount(int iExpectedCount, bool preserveLogFileNameExtension = false)
   {
     List<string> alFiles = GetExistingFiles(FileName, preserveLogFileNameExtension);
-    Assert.IsNotNull(alFiles);
-    Assert.AreEqual(iExpectedCount, alFiles.Count);
+    Assert.That(alFiles, Is.Not.Null);
+    Assert.That(alFiles, Has.Count.EqualTo(iExpectedCount));
   }
 
   /// <summary>
@@ -351,51 +351,34 @@ public sealed class RollingFileAppenderTest
   /// Used for table-driven testing.  This class holds information that can be used
   /// for testing of file rolling.
   /// </summary>
-  public sealed class RollConditions
+  /// <param name="preLogFileEntries">
+  /// A table of entries showing files that should exist and their expected sizes
+  /// before logging is called
+  /// </param>
+  /// <param name="postLogFileEntries">
+  /// A table of entries showing files that should exist and their expected sizes
+  /// after a message is logged
+  /// </param>
+  public sealed class RollConditions(List<RollFileEntry> preLogFileEntries, List<RollFileEntry> postLogFileEntries)
   {
     /// <summary>
     /// A table of entries showing files that should exist and their expected sizes
     /// before logging is called
     /// </summary>
-    private readonly List<RollFileEntry> _preLogFileEntries;
+    public List<RollFileEntry> GetPreLogFileEntries() => preLogFileEntries;
 
     /// <summary>
     /// A table of entries showing files that should exist and their expected sizes
     /// after a message is logged
     /// </summary>
-    private readonly List<RollFileEntry> _postLogFileEntries;
-
-    /// <summary>
-    /// Constructor, taking all required parameters
-    /// </summary>
-    /// <param name="preLogFileEntries"></param>
-    /// <param name="postLogFileEntries"></param>
-    public RollConditions(List<RollFileEntry> preLogFileEntries, List<RollFileEntry> postLogFileEntries)
-    {
-      this._preLogFileEntries = preLogFileEntries;
-      this._postLogFileEntries = postLogFileEntries;
-    }
-
-    /// <summary>
-    /// A table of entries showing files that should exist and their expected sizes
-    /// before logging is called
-    /// </summary>
-    public List<RollFileEntry> GetPreLogFileEntries() => _preLogFileEntries;
-
-    /// <summary>
-    /// A table of entries showing files that should exist and their expected sizes
-    /// after a message is logged
-    /// </summary>
-    public List<RollFileEntry> GetPostLogFileEntries() => _postLogFileEntries;
+    public List<RollFileEntry> GetPostLogFileEntries() => postLogFileEntries;
   }
 
   private static void VerifyExistenceAndRemoveFromList(List<string> alExisting,
-      string sFileName,
-      FileInfo file,
-      RollFileEntry entry)
+    string sFileName, FileInfo file, RollFileEntry entry)
   {
-    Assert.IsTrue(alExisting.Contains(sFileName), "filename {0} not found in test directory", sFileName);
-    Assert.AreEqual(entry.FileLength, file.Length, "file length mismatch");
+    Assert.That(alExisting, Does.Contain(sFileName), $"filename {sFileName} not found in test directory");
+    Assert.That(file.Length, Is.EqualTo(entry.FileLength), "file length mismatch");
     // Remove this file from the list
     alExisting.Remove(sFileName);
   }
@@ -413,12 +396,12 @@ public sealed class RollingFileAppenderTest
     foreach (RollFileEntry rollFile in fileEntries)
     {
       string? sFileName = rollFile.FileName;
-      Assert.IsNotNull(sFileName);
+      Assert.That(sFileName, Is.Not.Null);
       FileInfo file = new(sFileName!);
 
       if (rollFile.FileLength > 0)
       {
-        Assert.IsTrue(file.Exists, "filename {0} does not exist", sFileName);
+        Assert.That(file.Exists, $"filename {sFileName} does not exist");
         VerifyExistenceAndRemoveFromList(alExisting, sFileName!, file, rollFile);
       }
       else
@@ -435,7 +418,7 @@ public sealed class RollingFileAppenderTest
 
     // This check ensures no extra files matching the wildcard pattern exist.
     // We only want the files we expect, and no others
-    Assert.AreEqual(0, alExisting.Count);
+    Assert.That(alExisting, Is.Empty);
   }
 
   /// <summary>
@@ -464,11 +447,11 @@ public sealed class RollingFileAppenderTest
   /// </summary>
   private void LogMessage(string sMessageToLog)
   {
-    Assert.IsNotNull(_caRoot);
-    Assert.AreEqual(_caRoot!.Counter, _messagesLogged++);
-    Assert.IsNotNull(_root);
+    Assert.That(_caRoot, Is.Not.Null);
+    Assert.That(_messagesLogged++, Is.EqualTo(_caRoot!.Counter));
+    Assert.That(_root, Is.Not.Null);
     _root!.Log(Level.Debug, sMessageToLog, null);
-    Assert.AreEqual(_caRoot.Counter, _messagesLogged);
+    Assert.That(_messagesLogged, Is.EqualTo(_caRoot.Counter));
   }
 
   /// <summary>
@@ -729,6 +712,8 @@ public sealed class RollingFileAppenderTest
   /// Calls back to a method that does the actual replacement, turning
   /// the numeric value into a filename.
   /// </summary>
+  [System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "SYSLIB1045:Convert to 'GeneratedRegexAttribute'.", 
+    Justification = "only .net8")]
   private static string ConvertToFiles(string sBackupInfo, MatchEvaluator evaluator)
   {
     Regex regex = new(@"\d+");
@@ -1021,7 +1006,7 @@ public sealed class RollingFileAppenderTest
     _root.Level = Level.Debug;
     _caRoot = new CountingAppender();
     _root.AddAppender(_caRoot);
-    Assert.AreEqual(0, _caRoot.Counter);
+    Assert.That(_caRoot.Counter, Is.EqualTo(0));
 
     //
     // Set the root appender with a RollingFileAppender
@@ -1199,7 +1184,7 @@ public sealed class RollingFileAppenderTest
     RollingFileAppender rfa, int iExpectedValue)
   {
     rfa.InitializeRollBackups(sBaseFile, alFiles);
-    Assert.AreEqual(iExpectedValue, rfa.CurrentSizeRollBackups);
+    Assert.That(rfa.CurrentSizeRollBackups, Is.EqualTo(iExpectedValue));
   }
 
   /// <summary>
@@ -1354,7 +1339,7 @@ public sealed class RollingFileAppenderTest
   }
 
   /// <summary>
-  /// Destroys the logger hierarchy created by <see cref="RollingFileAppenderTest.CreateLogger"/>
+  /// Destroys the logger hierarchy created by <see cref="CreateLogger"/>
   /// </summary>
   private static void DestroyLogger()
   {
@@ -1363,13 +1348,13 @@ public sealed class RollingFileAppenderTest
     h.ResetConfiguration();
     //Replace the repository selector so that we can recreate the hierarchy with the same name if necessary
     LoggerManager.RepositorySelector =
-      new DefaultRepositorySelector(typeof(log4net.Repository.Hierarchy.Hierarchy));
+      new DefaultRepositorySelector(typeof(Repository.Hierarchy.Hierarchy));
   }
 
   private static void AssertFileEquals(string filename, string contents)
   {
     string logcont = File.ReadAllText(filename);
-    Assert.AreEqual(contents, logcont, "Log contents is not what is expected");
+    Assert.That(logcont, Is.EqualTo(contents), "Log contents is not what is expected");
     File.Delete(filename);
   }
 
@@ -1389,7 +1374,7 @@ public sealed class RollingFileAppenderTest
 
     AssertFileEquals(filename,
         "This is a message" + Environment.NewLine + "This is a message 2" + Environment.NewLine);
-    Assert.AreEqual("", sh.Message, "Unexpected error message");
+    Assert.That(sh.Message, Is.EqualTo(""), "Unexpected error message");
   }
 
   /// <summary>
@@ -1411,7 +1396,7 @@ public sealed class RollingFileAppenderTest
     fs.Close();
 
     AssertFileEquals(filename, "Test");
-    StringAssert.StartsWith("Unable to acquire lock on file", sh.Message, "Expecting an error message");
+    Assert.That(sh.Message, Does.StartWith("Unable to acquire lock on file"), "Expecting an error message");
   }
 
   /// <summary>
@@ -1434,7 +1419,7 @@ public sealed class RollingFileAppenderTest
     DestroyLogger();
 
     AssertFileEquals(filename, "This is a message 2" + Environment.NewLine);
-    StringAssert.StartsWith("Unable to acquire lock on file", sh.Message,
+    Assert.That(sh.Message, Does.StartWith("Unable to acquire lock on file"),
       "Expecting an error message");
   }
 
@@ -1460,7 +1445,7 @@ public sealed class RollingFileAppenderTest
     }
     catch (IOException e1)
     {
-      Assert.AreEqual("The process cannot access the file ", e1.Message.Substring(0, 35),
+      Assert.That(e1.Message.Substring(0, 35), Is.EqualTo("The process cannot access the file "),
       "Unexpected exception");
       locked = true;
     }
@@ -1468,10 +1453,10 @@ public sealed class RollingFileAppenderTest
     log.Log(GetType(), Level.Info, "This is a message 2", null);
     DestroyLogger();
 
-    Assert.IsTrue(locked, "File was not locked");
+    Assert.That(locked, "File was not locked");
     AssertFileEquals(filename,
       "This is a message" + Environment.NewLine + "This is a message 2" + Environment.NewLine);
-    Assert.AreEqual("", sh.Message, "Unexpected error message");
+    Assert.That(sh.Message, Is.EqualTo(""), "Unexpected error message");
   }
 
 
@@ -1495,7 +1480,7 @@ public sealed class RollingFileAppenderTest
     fs.Close();
 
     AssertFileEquals(filename, "Test");
-    Assert.AreEqual("Unable to acquire lock on file", sh.Message.Substring(0, 30),
+    Assert.That(sh.Message.Substring(0, 30), Is.EqualTo("Unable to acquire lock on file"),
         "Expecting an error message");
   }
 
@@ -1519,7 +1504,7 @@ public sealed class RollingFileAppenderTest
     DestroyLogger();
 
     AssertFileEquals(filename, "This is a message 2" + Environment.NewLine);
-    Assert.AreEqual("Unable to acquire lock on file", sh.Message.Substring(0, 30),
+    Assert.That(sh.Message.Substring(0, 30), Is.EqualTo("Unable to acquire lock on file"),
       "Expecting an error message");
   }
 
@@ -1545,11 +1530,11 @@ public sealed class RollingFileAppenderTest
     log.Log(GetType(), Level.Info, "This is a message 2", null);
     DestroyLogger();
 
-    Assert.IsTrue(locked, "File was not locked");
+    Assert.That(locked, "File was not locked");
     AssertFileEquals(filename,
       "This is a message" + Environment.NewLine + "Test" + Environment.NewLine + "This is a message 2" +
       Environment.NewLine);
-    Assert.AreEqual("", sh.Message, "Unexpected error message");
+    Assert.That(sh.Message, Is.EqualTo(""), "Unexpected error message");
   }
 
   /// <summary>
@@ -1572,7 +1557,7 @@ public sealed class RollingFileAppenderTest
     fs.Close();
 
     AssertFileEquals(filename, "Test");
-    Assert.AreEqual("Unable to acquire lock on file", sh.Message.Substring(0, 30),
+    Assert.That(sh.Message.Substring(0, 30), Is.EqualTo("Unable to acquire lock on file"),
         "Expecting an error message");
   }
 
@@ -1596,7 +1581,7 @@ public sealed class RollingFileAppenderTest
     DestroyLogger();
 
     AssertFileEquals(filename, "This is a message 2" + Environment.NewLine);
-    Assert.AreEqual("Unable to acquire lock on file", sh.Message.Substring(0, 30),
+    Assert.That(sh.Message.Substring(0, 30), Is.EqualTo("Unable to acquire lock on file"),
       "Expecting an error message");
   }
 
@@ -1622,11 +1607,11 @@ public sealed class RollingFileAppenderTest
     log.Log(GetType(), Level.Info, "This is a message 2", null);
     DestroyLogger();
 
-    Assert.IsTrue(locked, "File was not locked");
+    Assert.That(locked, "File was not locked");
     AssertFileEquals(filename,
       "This is a message" + Environment.NewLine + "Test" + Environment.NewLine + "This is a message 2" +
       Environment.NewLine);
-    Assert.AreEqual("", sh.Message, "Unexpected error message");
+    Assert.That(sh.Message, Is.EqualTo(""), "Unexpected error message");
   }
 
   /// <summary>
@@ -1648,7 +1633,7 @@ public sealed class RollingFileAppenderTest
 
     AssertFileEquals(filename, "A" + Environment.NewLine);
     AssertFileEquals(filename + ".1", "A" + Environment.NewLine);
-    Assert.IsEmpty(sh.Message);
+    Assert.That(sh.Message, Is.Empty);
   }
 
   /// <summary>
@@ -1663,11 +1648,11 @@ public sealed class RollingFileAppenderTest
     ILogger log = CreateLogger(filename, null, sh);
 
     IAppender[]? appenders = log.Repository?.GetAppenders();
-    Assert.IsNotNull(appenders);
-    Assert.AreEqual(1, appenders!.Length, "The wrong number of appenders are configured");
+    Assert.That(appenders, Is.Not.Null);
+    Assert.That(appenders!, Has.Length.EqualTo(1), "The wrong number of appenders are configured");
 
     RollingFileAppender rfa = (RollingFileAppender)(appenders[0]);
-    Assert.AreEqual(typeof(FileAppender.ExclusiveLock), rfa.LockingModel.GetType(),
+    Assert.That(rfa.LockingModel.GetType(), Is.EqualTo(typeof(FileAppender.ExclusiveLock)),
         "The LockingModel is of an unexpected type");
 
     DestroyLogger();
@@ -1766,11 +1751,11 @@ public sealed class RollingFileAppenderTest
     // 3 = file.log.2
     if (iBackups is 0 or 1)
     {
-      Assert.AreEqual(0, rfa.CurrentSizeRollBackups);
+      Assert.That(rfa.CurrentSizeRollBackups, Is.EqualTo(0));
     }
     else
     {
-      Assert.AreEqual(Math.Min(iBackups - 1, iMaxSizeRollBackups), rfa.CurrentSizeRollBackups);
+      Assert.That(rfa.CurrentSizeRollBackups, Is.EqualTo(Math.Min(iBackups - 1, iMaxSizeRollBackups)));
     }
   }
 
@@ -1835,14 +1820,13 @@ public sealed class RollingFileAppenderSubClassTest : RollingFileAppender
   {
     RollingFileAppender rfa = new();
 
-    Assert.AreEqual(RollPoint.TopOfMinute, rfa.ComputeCheckPeriod(".yyyy-MM-dd HH:mm"),
-        "TopOfMinute pattern");
-    Assert.AreEqual(RollPoint.TopOfHour, rfa.ComputeCheckPeriod(".yyyy-MM-dd HH"), "TopOfHour pattern");
-    Assert.AreEqual(RollPoint.HalfDay, rfa.ComputeCheckPeriod(".yyyy-MM-dd tt"), "HalfDay pattern");
-    Assert.AreEqual(RollPoint.TopOfDay, rfa.ComputeCheckPeriod(".yyyy-MM-dd"), "TopOfDay pattern");
-    Assert.AreEqual(RollPoint.TopOfMonth, rfa.ComputeCheckPeriod(".yyyy-MM"), "TopOfMonth pattern");
+    Assert.That(rfa.ComputeCheckPeriod(".yyyy-MM-dd HH:mm"), Is.EqualTo(RollPoint.TopOfMinute), "TopOfMinute pattern");
+    Assert.That(rfa.ComputeCheckPeriod(".yyyy-MM-dd HH"), Is.EqualTo(RollPoint.TopOfHour), "TopOfHour pattern");
+    Assert.That(rfa.ComputeCheckPeriod(".yyyy-MM-dd tt"), Is.EqualTo(RollPoint.HalfDay), "HalfDay pattern");
+    Assert.That(rfa.ComputeCheckPeriod(".yyyy-MM-dd"), Is.EqualTo(RollPoint.TopOfDay), "TopOfDay pattern");
+    Assert.That(rfa.ComputeCheckPeriod(".yyyy-MM"), Is.EqualTo(RollPoint.TopOfMonth), "TopOfMonth pattern");
 
     // Test invalid roll point
-    Assert.AreEqual(RollPoint.InvalidRollPoint, rfa.ComputeCheckPeriod("..."), "TopOfMonth pattern");
+    Assert.That(rfa.ComputeCheckPeriod("..."), Is.EqualTo(RollPoint.InvalidRollPoint), "TopOfMonth pattern");
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Appender/SmtpPickupDirAppenderTest.cs b/src/log4net.Tests/Appender/SmtpPickupDirAppenderTest.cs
index 41e0f305..e59ca09c 100644
--- a/src/log4net.Tests/Appender/SmtpPickupDirAppenderTest.cs
+++ b/src/log4net.Tests/Appender/SmtpPickupDirAppenderTest.cs
@@ -167,7 +167,7 @@ public class SmtpPickupDirAppenderTest
     log.Log(GetType(), Level.Info, "This is a message 2", null);
     DestroyLogger();
 
-    Assert.AreEqual(1, Directory.GetFiles(_testPickupDir).Length);
+    Assert.That(Directory.GetFiles(_testPickupDir), Has.Length.EqualTo(1));
     string[] fileContent = File.ReadAllLines((Directory.GetFiles(_testPickupDir)[0]));
     bool hasDateHeader = false;
     const string dateHeaderStart = "Date: ";
@@ -182,9 +182,9 @@ public class SmtpPickupDirAppenderTest
         hasDateHeader = true;
       }
     }
-    Assert.IsTrue(hasDateHeader, "Output must contains a date header");
+    Assert.That(hasDateHeader, "Output must contains a date header");
 
-    Assert.AreEqual(string.Empty, sh.Message, "Unexpected error message");
+    Assert.That(sh.Message, Is.EqualTo(string.Empty), "Unexpected error message");
   }
 
   /// <summary>
@@ -203,12 +203,12 @@ public class SmtpPickupDirAppenderTest
     log.Log(GetType(), Level.Info, "This is a message 2", null);
     DestroyLogger();
 
-    Assert.AreEqual(1, Directory.GetFiles(_testPickupDir).Length);
+    Assert.That(Directory.GetFiles(_testPickupDir), Has.Length.EqualTo(1));
     FileInfo fileInfo = new(Directory.GetFiles(_testPickupDir)[0]);
-    Assert.AreEqual("." + fileExtension, fileInfo.Extension);
-    Assert.IsTrue(Guid.TryParse(fileInfo.Name.Substring(0, fileInfo.Name.Length - fileInfo.Extension.Length), out _));
+    Assert.That(fileInfo.Extension, Is.EqualTo("." + fileExtension));
+    Assert.That(Guid.TryParse(fileInfo.Name.Substring(0, fileInfo.Name.Length - fileInfo.Extension.Length), out _));
 
-    Assert.AreEqual("", sh.Message, "Unexpected error message");
+    Assert.That(sh.Message, Is.EqualTo(""), "Unexpected error message");
   }
 
   /// <summary>
@@ -225,11 +225,11 @@ public class SmtpPickupDirAppenderTest
     log.Log(GetType(), Level.Info, "This is a message 2", null);
     DestroyLogger();
 
-    Assert.AreEqual(1, Directory.GetFiles(_testPickupDir).Length);
+    Assert.That(Directory.GetFiles(_testPickupDir), Has.Length.EqualTo(1));
     FileInfo fileInfo = new(Directory.GetFiles(_testPickupDir)[0]);
-    Assert.IsEmpty(fileInfo.Extension);
-    Assert.IsTrue(Guid.TryParse(fileInfo.Name, out _));
+    Assert.That(fileInfo.Extension, Is.Empty);
+    Assert.That(Guid.TryParse(fileInfo.Name, out _));
 
-    Assert.AreEqual(string.Empty, sh.Message, "Unexpected error message");
+    Assert.That(sh.Message, Is.EqualTo(string.Empty), "Unexpected error message");
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Appender/TelnetAppenderTest.cs b/src/log4net.Tests/Appender/TelnetAppenderTest.cs
index f6f64566..c40134df 100644
--- a/src/log4net.Tests/Appender/TelnetAppenderTest.cs
+++ b/src/log4net.Tests/Appender/TelnetAppenderTest.cs
@@ -76,8 +76,8 @@ public sealed class TelnetAppenderTest
       WaitForReceived(2); // wait for log message
     }
     repository.Shutdown();
-    Assert.AreEqual(2, received.Count);
-    StringAssert.Contains(logId, received[1]);
+    Assert.That(received, Has.Count.EqualTo(2));
+    Assert.That(received[1], Does.Contain(logId));
 
     void Received(string message) => received.Add(message);
 
diff --git a/src/log4net.Tests/Appender/TraceAppenderTest.cs b/src/log4net.Tests/Appender/TraceAppenderTest.cs
index 59f7ca0d..2f889c2b 100644
--- a/src/log4net.Tests/Appender/TraceAppenderTest.cs
+++ b/src/log4net.Tests/Appender/TraceAppenderTest.cs
@@ -53,9 +53,9 @@ public class TraceAppenderTest
     ILog log = LogManager.GetLogger(rep.Name, GetType());
     log.Debug("Message");
 
-    Assert.AreEqual(
-        GetType().ToString(),
-        categoryTraceListener.Category);
+    Assert.That(
+        categoryTraceListener.Category,
+        Is.EqualTo(GetType().ToString()));
   }
 
   [Test]
@@ -79,9 +79,9 @@ public class TraceAppenderTest
     ILog log = LogManager.GetLogger(rep.Name, GetType());
     log.Debug("Message");
 
-    Assert.AreEqual(
-        MethodInfo.GetCurrentMethod()!.Name,
-        categoryTraceListener.Category);
+    Assert.That(
+        categoryTraceListener.Category,
+        Is.EqualTo(MethodInfo.GetCurrentMethod()!.Name));
   }
 }
 
diff --git a/src/log4net.Tests/Context/LogicalThreadContextTest.cs b/src/log4net.Tests/Context/LogicalThreadContextTest.cs
index 3a237ef1..118fa87b 100644
--- a/src/log4net.Tests/Context/LogicalThreadContextTest.cs
+++ b/src/log4net.Tests/Context/LogicalThreadContextTest.cs
@@ -60,19 +60,19 @@ public class LogicalThreadContextTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestLogicalThreadPropertiesPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no logical thread properties value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test no logical thread properties value set");
     stringAppender.Reset();
 
     LogicalThreadContext.Properties[Utils.PropertyKey] = "val1";
 
     log1.Info("TestMessage");
-    Assert.AreEqual("val1", stringAppender.GetString(), "Test logical thread properties value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("val1"), "Test logical thread properties value set");
     stringAppender.Reset();
 
     LogicalThreadContext.Properties.Remove(Utils.PropertyKey);
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test logical thread properties value removed");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test logical thread properties value removed");
     stringAppender.Reset();
   }
 
@@ -90,14 +90,14 @@ public class LogicalThreadContextTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestLogicalThreadPropertiesPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no logical thread stack value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test no logical thread stack value set");
     stringAppender.Reset();
 
     string testValueForCurrentContext = "Outer";
     LogicalThreadContext.Properties[Utils.PropertyKey] = testValueForCurrentContext;
 
     log1.Info("TestMessage");
-    Assert.AreEqual(testValueForCurrentContext, stringAppender.GetString(), "Test logical thread properties value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(testValueForCurrentContext), "Test logical thread properties value set");
     stringAppender.Reset();
 
     var strings = await Task.WhenAll(Enumerable.Range(0, 10).Select(x => SomeWorkProperties(x.ToString())));
@@ -105,17 +105,17 @@ public class LogicalThreadContextTest
     // strings should be ["00AA0BB0", "01AA1BB1", "02AA2BB2", ...]
     for (int i = 0; i < strings.Length; i++)
     {
-      Assert.AreEqual(string.Format("{0}{1}AA{1}BB{1}", testValueForCurrentContext, i), strings[i], "Test logical thread properties expected sequence");
+      Assert.That(strings[i], Is.EqualTo(string.Format("{0}{1}AA{1}BB{1}", testValueForCurrentContext, i)), "Test logical thread properties expected sequence");
     }
 
     log1.Info("TestMessage");
-    Assert.AreEqual(testValueForCurrentContext, stringAppender.GetString(), "Test logical thread properties value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(testValueForCurrentContext), "Test logical thread properties value set");
     stringAppender.Reset();
 
     LogicalThreadContext.Properties.Remove(Utils.PropertyKey);
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test logical thread properties value removed");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test logical thread properties value removed");
     stringAppender.Reset();
   }
 
@@ -133,18 +133,18 @@ public class LogicalThreadContextTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestThreadStackPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no logical thread stack value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test no logical thread stack value set");
     stringAppender.Reset();
 
     using (LogicalThreadContext.Stacks[Utils.PropertyKey].Push("val1"))
     {
       log1.Info("TestMessage");
-      Assert.AreEqual("val1", stringAppender.GetString(), "Test logical thread stack value set");
+      Assert.That(stringAppender.GetString(), Is.EqualTo("val1"), "Test logical thread stack value set");
       stringAppender.Reset();
     }
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test logical thread stack value removed");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test logical thread stack value removed");
     stringAppender.Reset();
   }
 
@@ -162,25 +162,25 @@ public class LogicalThreadContextTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestThreadStackPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no logical thread stack value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test no logical thread stack value set");
     stringAppender.Reset();
 
     using (LogicalThreadContext.Stacks[Utils.PropertyKey].Push("val1"))
     {
       log1.Info("TestMessage");
-      Assert.AreEqual("val1", stringAppender.GetString(), "Test logical thread stack value set");
+      Assert.That(stringAppender.GetString(), Is.EqualTo("val1"), "Test logical thread stack value set");
       stringAppender.Reset();
 
       using (LogicalThreadContext.Stacks[Utils.PropertyKey].Push("val2"))
       {
         log1.Info("TestMessage");
-        Assert.AreEqual("val1 val2", stringAppender.GetString(), "Test logical thread stack value pushed 2nd val");
+        Assert.That(stringAppender.GetString(), Is.EqualTo("val1 val2"), "Test logical thread stack value pushed 2nd val");
         stringAppender.Reset();
       }
     }
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test logical thread stack value removed");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test logical thread stack value removed");
     stringAppender.Reset();
   }
 
@@ -198,18 +198,18 @@ public class LogicalThreadContextTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestThreadStackPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no logical thread stack value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test no logical thread stack value set");
     stringAppender.Reset();
 
     using (LogicalThreadContext.Stacks[Utils.PropertyKey].Push(null))
     {
       log1.Info("TestMessage");
-      Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test logical thread stack value set");
+      Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test logical thread stack value set");
       stringAppender.Reset();
     }
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test logical thread stack value removed");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test logical thread stack value removed");
     stringAppender.Reset();
   }
 
@@ -227,25 +227,25 @@ public class LogicalThreadContextTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestThreadStackPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no logical thread stack value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test no logical thread stack value set");
     stringAppender.Reset();
 
     using (LogicalThreadContext.Stacks[Utils.PropertyKey].Push("val1"))
     {
       log1.Info("TestMessage");
-      Assert.AreEqual("val1", stringAppender.GetString(), "Test logical thread stack value set");
+      Assert.That(stringAppender.GetString(), Is.EqualTo("val1"), "Test logical thread stack value set");
       stringAppender.Reset();
 
       using (LogicalThreadContext.Stacks[Utils.PropertyKey].Push(null))
       {
         log1.Info("TestMessage");
-        Assert.AreEqual("val1 ", stringAppender.GetString(), "Test logical thread stack value pushed null");
+        Assert.That(stringAppender.GetString(), Is.EqualTo("val1 "), "Test logical thread stack value pushed null");
         stringAppender.Reset();
       }
     }
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test logical thread stack value removed");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test logical thread stack value removed");
     stringAppender.Reset();
   }
 
@@ -263,7 +263,7 @@ public class LogicalThreadContextTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestLogicalThreadStackPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no logical thread stack value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test no logical thread stack value set");
     stringAppender.Reset();
 
     string testValueForCurrentContext = "Outer";
@@ -271,7 +271,7 @@ public class LogicalThreadContextTest
     using (LogicalThreadContext.Stacks[Utils.PropertyKey].Push(testValueForCurrentContext))
     {
       log1.Info("TestMessage");
-      Assert.AreEqual(testValueForCurrentContext, stringAppender.GetString(), "Test logical thread stack value set");
+      Assert.That(stringAppender.GetString(), Is.EqualTo(testValueForCurrentContext), "Test logical thread stack value set");
       stringAppender.Reset();
 
       strings = await Task.WhenAll(Enumerable.Range(0, 10).Select(x => SomeWorkStack(x.ToString())));
@@ -280,11 +280,11 @@ public class LogicalThreadContextTest
     // strings should be ["Outer 0 AOuter 0 AOuter 0Outer 0 BOuter 0 B Outer 0", ...]
     for (int i = 0; i < strings.Length; i++)
     {
-      Assert.AreEqual(string.Format("{0} {1} A{0} {1} A{0} {1}{0} {1} B{0} {1} B{0} {1}", testValueForCurrentContext, i), strings[i], "Test logical thread properties expected sequence");
+      Assert.That(strings[i], Is.EqualTo(string.Format("{0} {1} A{0} {1} A{0} {1}{0} {1} B{0} {1} B{0} {1}", testValueForCurrentContext, i)), "Test logical thread properties expected sequence");
     }
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test logical thread properties value removed");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test logical thread properties value removed");
     stringAppender.Reset();
   }
 
@@ -335,7 +335,7 @@ public class LogicalThreadContextTest
     using (LogicalThreadContext.Stacks[Utils.PropertyKey].Push(stackName))
     {
       log.Info("TestMessage");
-      Assert.AreEqual(string.Format("Outer {0}", stackName), stringAppender.GetString(), "Test logical thread stack value set");
+      Assert.That(stringAppender.GetString(), Is.EqualTo(string.Format("Outer {0}", stackName)), "Test logical thread stack value set");
       stringAppender.Reset();
 
       await MoreWorkStack(log, "A");
diff --git a/src/log4net.Tests/Context/ThreadContextTest.cs b/src/log4net.Tests/Context/ThreadContextTest.cs
index 2f7e54fd..c89b68b0 100644
--- a/src/log4net.Tests/Context/ThreadContextTest.cs
+++ b/src/log4net.Tests/Context/ThreadContextTest.cs
@@ -59,19 +59,19 @@ public class ThreadContextTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestThreadProperiesPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no thread properties value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test no thread properties value set");
     stringAppender.Reset();
 
     ThreadContext.Properties[Utils.PropertyKey] = "val1";
 
     log1.Info("TestMessage");
-    Assert.AreEqual("val1", stringAppender.GetString(), "Test thread properties value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("val1"), "Test thread properties value set");
     stringAppender.Reset();
 
     ThreadContext.Properties.Remove(Utils.PropertyKey);
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test thread properties value removed");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test thread properties value removed");
     stringAppender.Reset();
   }
 
@@ -89,18 +89,18 @@ public class ThreadContextTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestThreadStackPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no thread stack value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test no thread stack value set");
     stringAppender.Reset();
 
     using (ThreadContext.Stacks[Utils.PropertyKey].Push("val1"))
     {
       log1.Info("TestMessage");
-      Assert.AreEqual("val1", stringAppender.GetString(), "Test thread stack value set");
+      Assert.That(stringAppender.GetString(), Is.EqualTo("val1"), "Test thread stack value set");
       stringAppender.Reset();
     }
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test thread stack value removed");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test thread stack value removed");
     stringAppender.Reset();
   }
 
@@ -118,25 +118,25 @@ public class ThreadContextTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestThreadStackPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no thread stack value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test no thread stack value set");
     stringAppender.Reset();
 
     using (ThreadContext.Stacks[Utils.PropertyKey].Push("val1"))
     {
       log1.Info("TestMessage");
-      Assert.AreEqual("val1", stringAppender.GetString(), "Test thread stack value set");
+      Assert.That(stringAppender.GetString(), Is.EqualTo("val1"), "Test thread stack value set");
       stringAppender.Reset();
 
       using (ThreadContext.Stacks[Utils.PropertyKey].Push("val2"))
       {
         log1.Info("TestMessage");
-        Assert.AreEqual("val1 val2", stringAppender.GetString(), "Test thread stack value pushed 2nd val");
+        Assert.That(stringAppender.GetString(), Is.EqualTo("val1 val2"), "Test thread stack value pushed 2nd val");
         stringAppender.Reset();
       }
     }
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test thread stack value removed");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test thread stack value removed");
     stringAppender.Reset();
   }
 
@@ -154,18 +154,18 @@ public class ThreadContextTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestThreadStackPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no thread stack value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test no thread stack value set");
     stringAppender.Reset();
 
     using (ThreadContext.Stacks[Utils.PropertyKey].Push(null))
     {
       log1.Info("TestMessage");
-      Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test thread stack value set");
+      Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test thread stack value set");
       stringAppender.Reset();
     }
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test thread stack value removed");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test thread stack value removed");
     stringAppender.Reset();
   }
 
@@ -183,25 +183,25 @@ public class ThreadContextTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestThreadStackPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no thread stack value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test no thread stack value set");
     stringAppender.Reset();
 
     using (ThreadContext.Stacks[Utils.PropertyKey].Push("val1"))
     {
       log1.Info("TestMessage");
-      Assert.AreEqual("val1", stringAppender.GetString(), "Test thread stack value set");
+      Assert.That(stringAppender.GetString(), Is.EqualTo("val1"), "Test thread stack value set");
       stringAppender.Reset();
 
       using (ThreadContext.Stacks[Utils.PropertyKey].Push(null))
       {
         log1.Info("TestMessage");
-        Assert.AreEqual("val1 ", stringAppender.GetString(), "Test thread stack value pushed null");
+        Assert.That(stringAppender.GetString(), Is.EqualTo("val1 "), "Test thread stack value pushed null");
         stringAppender.Reset();
       }
     }
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test thread stack value removed");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test thread stack value removed");
     stringAppender.Reset();
   }
 
@@ -234,7 +234,7 @@ public class ThreadContextTest
 
     var hierarchyLoggingRepository = (Repository.Hierarchy.Hierarchy?)log.Logger.Repository;
     StringAppender stringAppender = (StringAppender)hierarchyLoggingRepository!.Root.Appenders[0];
-    Assert.AreEqual(DateTime.Today.ToString(CultureInfo.InvariantCulture), stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(DateTime.Today.ToString(CultureInfo.InvariantCulture)));
   }
 
   [Test]
@@ -259,7 +259,7 @@ public class ThreadContextTest
       t.Join();
     }
 
-    Assert.IsTrue(flags.All(o => !o.Flag));
+    Assert.That(flags.All(o => !o.Flag));
   }
 
   public class FlagContainer
diff --git a/src/log4net.Tests/Core/DefaultRepositorySelectorTest.cs b/src/log4net.Tests/Core/DefaultRepositorySelectorTest.cs
index b847d9b4..eca0b79b 100644
--- a/src/log4net.Tests/Core/DefaultRepositorySelectorTest.cs
+++ b/src/log4net.Tests/Core/DefaultRepositorySelectorTest.cs
@@ -38,136 +38,117 @@ public class DefaultRepositorySelectorTest
   [Test]
   public void CreateRepository_ExplicitType()
   {
-    var selector = new DefaultRepositorySelector(typeof(MockLoggerRepository));
+    DefaultRepositorySelector selector = new(typeof(MockLoggerRepository));
     int numCreatedCallbacks = 0;
     selector.LoggerRepositoryCreatedEvent += (_, _) => numCreatedCallbacks++;
 
-    Assert.IsFalse(selector.ExistsRepository(RepositoryName));
+    Assert.That(selector.ExistsRepository(RepositoryName), Is.False);
     ILoggerRepository[] allRepositories = selector.GetAllRepositories();
-    Assert.AreEqual(0, allRepositories.Length);
-    Assert.AreEqual(0, numCreatedCallbacks);
+    Assert.That(allRepositories, Is.Empty);
+    Assert.That(numCreatedCallbacks, Is.EqualTo(0));
     Assert.Throws<LogException>(() => selector.GetRepository(RepositoryName));
 
     ILoggerRepository logRep = selector.CreateRepository(RepositoryName, typeof(MockLoggerRepository));
-    Assert.IsTrue(selector.ExistsRepository(RepositoryName));
+    Assert.That(selector.ExistsRepository(RepositoryName));
     allRepositories = selector.GetAllRepositories();
-    Assert.AreEqual(1, allRepositories.Length);
-    Assert.AreSame(logRep, allRepositories[0]);
-    Assert.AreEqual(1, numCreatedCallbacks);
-    Assert.IsInstanceOf<MockLoggerRepository>(logRep);
+    Assert.That(allRepositories, Has.Length.EqualTo(1));
+    Assert.That(allRepositories[0], Is.SameAs(logRep));
+    Assert.That(numCreatedCallbacks, Is.EqualTo(1));
+    Assert.That(logRep, Is.InstanceOf<MockLoggerRepository>());
     ILoggerRepository rep2 = selector.GetRepository(RepositoryName);
-    Assert.AreSame(logRep, rep2);
-
-    try
-    {
-      selector.CreateRepository(RepositoryName, typeof(MockLoggerRepository));
-      Assert.Fail("Should have thrown exception on redefinition.");
-    }
-    catch (LogException logEx)
-    {
-      Assert.IsTrue(logEx.Message.Contains("already defined"));
-    }
+    Assert.That(rep2, Is.SameAs(logRep));
+
+    LogException exception = Assert.Throws<LogException>(
+      () => selector.CreateRepository(RepositoryName, typeof(MockLoggerRepository)),
+      "Should have thrown exception on redefinition.");
+    Assert.That(exception.Message, Does.Contain("already defined"));
   }
 
   [Test]
   public void CreateRepository_AssemblyAndType_NoReadAssemblyAttributes()
   {
-    var selector = new DefaultRepositorySelector(typeof(MockLoggerRepository));
+    DefaultRepositorySelector selector = new(typeof(MockLoggerRepository));
     int numCreatedCallbacks = 0;
     selector.LoggerRepositoryCreatedEvent += (_, _) => numCreatedCallbacks++;
 
     ILoggerRepository logRep = selector.CreateRepository(typeof(MockLoggerRepository).Assembly,
       typeof(MockLoggerRepository), RepositoryName, readAssemblyAttributes: false);
-    Assert.IsTrue(selector.ExistsRepository(RepositoryName));
+    Assert.That(selector.ExistsRepository(RepositoryName));
     ILoggerRepository[] allRepositories = selector.GetAllRepositories();
-    Assert.AreEqual(1, allRepositories.Length);
-    Assert.AreSame(logRep, allRepositories[0]);
-    Assert.AreEqual(1, numCreatedCallbacks);
-    Assert.IsInstanceOf<MockLoggerRepository>(logRep);
+    Assert.That(allRepositories, Has.Length.EqualTo(1));
+    Assert.That(allRepositories[0], Is.SameAs(logRep));
+    Assert.That(numCreatedCallbacks, Is.EqualTo(1));
+    Assert.That(logRep, Is.InstanceOf<MockLoggerRepository>());
   }
 
   [Test]
   public void CreateRepository_AssemblyWithNullType_NoReadAssemblyAttributes()
   {
-    var selector = new DefaultRepositorySelector(typeof(MockLoggerRepository));
+    DefaultRepositorySelector selector = new(typeof(MockLoggerRepository));
 
     ILoggerRepository logRep = selector.CreateRepository(typeof(MockLoggerRepository2).Assembly, repositoryType: null,
       RepositoryName, readAssemblyAttributes: false);
-    Assert.IsInstanceOf<MockLoggerRepository>(logRep, "Should have instantiated the default logger type specified in the selector constructor");
+    Assert.That(logRep, Is.InstanceOf<MockLoggerRepository>(), "Should have instantiated the default logger type specified in the selector constructor");
   }
 
   [Test]
   public void CreateRepository_AssemblyWithNullType_ReadAssemblyAttributes()
   {
-    var selector = new DefaultRepositorySelector(typeof(MockLoggerRepository));
+    DefaultRepositorySelector selector = new(typeof(MockLoggerRepository));
 
     ILoggerRepository logRep = selector.CreateRepository(typeof(MockLoggerRepository2).Assembly, repositoryType: null,
       RepositoryName, readAssemblyAttributes: true);
-    Assert.IsInstanceOf<MockLoggerRepository>(logRep, "Should have instantiated default logger type");
-    Assert.AreEqual("MyRepository", logRep.Name);
+    Assert.That(logRep, Is.InstanceOf<MockLoggerRepository>(), "Should have instantiated default logger type");
+    Assert.That(logRep.Name, Is.EqualTo("MyRepository"));
   }
 
   [Test]
   public void CreateRepositoryAndAlias()
   {
-    var selector = new DefaultRepositorySelector(typeof(MockLoggerRepository));
+    DefaultRepositorySelector selector = new(typeof(MockLoggerRepository));
     int numCreatedCallbacks = 0;
     selector.LoggerRepositoryCreatedEvent += (_, _) => numCreatedCallbacks++;
 
     ILoggerRepository logRep = selector.CreateRepository(RepositoryName, typeof(MockLoggerRepository));
     selector.AliasRepository("alias1", logRep);
 
-    var otherTypeLogRep = new MockLoggerRepository2();
+    MockLoggerRepository2 otherTypeLogRep = new();
     Assert.Throws<InvalidOperationException>(() => selector.AliasRepository("alias1", otherTypeLogRep));
     Assert.Throws<InvalidOperationException>(() => selector.AliasRepository(RepositoryName, otherTypeLogRep));
 
-    Assert.IsTrue(selector.ExistsRepository(RepositoryName));
-    Assert.IsFalse(selector.ExistsRepository("alias1"));
+    Assert.That(selector.ExistsRepository(RepositoryName));
+    Assert.That(selector.ExistsRepository("alias1"), Is.False);
     ILoggerRepository[] allRepositories = selector.GetAllRepositories();
-    Assert.AreEqual(1, allRepositories.Length);
-    Assert.AreSame(logRep, allRepositories[0]);
-    Assert.AreEqual(1, numCreatedCallbacks);
+    Assert.That(allRepositories, Has.Length.EqualTo(1));
+    Assert.That(allRepositories[0], Is.SameAs(logRep));
+    Assert.That(numCreatedCallbacks, Is.EqualTo(1));
   }
 }
 
 internal class MockLoggerRepository : ILoggerRepository
 {
-  public MockLoggerRepository()
-  {
-    PluginMap = new(this);
-  }
+  public MockLoggerRepository() => PluginMap = new(this);
 
   public string Name { get; set; } = nameof(MockLoggerRepository);
   public RendererMap RendererMap { get; } = new();
   public PluginMap PluginMap { get; }
   public LevelMap LevelMap { get; } = new();
   public Level Threshold { get; set; } = Level.All;
-  public ILogger Exists(string name)
-  {
-    throw new NotImplementedException();
-  }
+  public ILogger Exists(string name) => throw new NotImplementedException();
 
-  public ILogger[] GetCurrentLoggers()
-  {
-    throw new NotImplementedException();
-  }
+  public ILogger[] GetCurrentLoggers() => throw new NotImplementedException();
 
-  public ILogger GetLogger(string name)
-  {
-    throw new NotImplementedException();
-  }
+  public ILogger GetLogger(string name) => throw new NotImplementedException();
 
   public void Shutdown()
-  {
-  }
+  { }
 
   public void ResetConfiguration()
-  {
-  }
+  { }
 
   public void Log(LoggingEvent logEvent)
-  {
-  }
+  { }
+
   public bool Configured { get; set; }
   public ICollection ConfigurationMessages { get; set; } = new List<string>();
 #pragma warning disable CS0067  // Unused event
@@ -175,11 +156,8 @@ internal class MockLoggerRepository : ILoggerRepository
   public event LoggerRepositoryConfigurationResetEventHandler? ConfigurationReset;
   public event LoggerRepositoryConfigurationChangedEventHandler? ConfigurationChanged;
 #pragma warning restore CS0067
-  public PropertiesDictionary Properties { get; } = new();
-  public IAppender[] GetAppenders()
-  {
-    throw new NotImplementedException();
-  }
+  public PropertiesDictionary Properties { get; } = [];
+  public IAppender[] GetAppenders() => throw new NotImplementedException();
 }
 
 internal sealed class MockLoggerRepository2 : MockLoggerRepository;
diff --git a/src/log4net.Tests/Core/EvaluatorTest.cs b/src/log4net.Tests/Core/EvaluatorTest.cs
index 025f3a5a..4640b9b6 100644
--- a/src/log4net.Tests/Core/EvaluatorTest.cs
+++ b/src/log4net.Tests/Core/EvaluatorTest.cs
@@ -68,10 +68,10 @@ public class EvaluatorTest
 
     logger.Log(typeof(EvaluatorTest), Level.Debug, "Debug message logged", null);
     logger.Log(typeof(EvaluatorTest), Level.Debug, "Debug message logged", null);
-    Assert.AreEqual(0, _countingAppender.Counter, "Test 2 events buffered");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test 2 events buffered");
 
     logger.Log(typeof(EvaluatorTest), Level.Info, "Info message logged", null);
-    Assert.AreEqual(3, _countingAppender.Counter, "Test 3 events flushed on Info message.");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(3), "Test 3 events flushed on Info message.");
   }
 
   [Test]
@@ -85,11 +85,11 @@ public class EvaluatorTest
 
     logger.Log(typeof(EvaluatorTest), Level.Debug, "Debug message logged", null);
     logger.Log(typeof(EvaluatorTest), Level.Debug, "Debug message logged", null);
-    Assert.AreEqual(0, _countingAppender.Counter, "Test 2 events buffered");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test 2 events buffered");
 
     Thread.Sleep(1000);
     logger.Log(typeof(EvaluatorTest), Level.Debug, "Info message logged", null);
-    Assert.AreEqual(3, _countingAppender.Counter, "Test 3 events flushed on Info message.");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(3), "Test 3 events flushed on Info message.");
   }
 
   [Test]
@@ -106,10 +106,10 @@ public class EvaluatorTest
     logger.Log(typeof(EvaluatorTest), Level.Debug, "Debug message logged", null);
     logger.Log(typeof(EvaluatorTest), Level.Debug, "Debug message logged", null);
     logger.Log(typeof(EvaluatorTest), Level.Debug, "Info message logged", null);
-    Assert.AreEqual(0, _countingAppender.Counter, "Test 5 events buffered");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test 5 events buffered");
 
     logger.Log(typeof(EvaluatorTest), Level.Debug, "Info message logged", null);
-    Assert.AreEqual(6, _countingAppender.Counter, "Test 6 events flushed on Info message.");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(6), "Test 6 events flushed on Info message.");
   }
 
   [Test]
@@ -123,10 +123,10 @@ public class EvaluatorTest
 
     logger.Log(typeof(EvaluatorTest), Level.Warn, "Warn message logged", null);
     logger.Log(typeof(EvaluatorTest), Level.Warn, "Warn message logged", null);
-    Assert.AreEqual(0, _countingAppender.Counter, "Test 2 events buffered");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test 2 events buffered");
 
     logger.Log(typeof(EvaluatorTest), Level.Warn, "Warn message logged", new ApplicationException());
-    Assert.AreEqual(3, _countingAppender.Counter, "Test 3 events flushed on ApplicationException message.");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(3), "Test 3 events flushed on ApplicationException message.");
   }
 
   [Test]
@@ -140,10 +140,10 @@ public class EvaluatorTest
 
     logger.Log(typeof(EvaluatorTest), Level.Warn, "Warn message logged", null);
     logger.Log(typeof(EvaluatorTest), Level.Warn, "Warn message logged", null);
-    Assert.AreEqual(0, _countingAppender.Counter, "Test 2 events buffered");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test 2 events buffered");
 
     logger.Log(typeof(EvaluatorTest), Level.Warn, "Warn message logged", new ApplicationException());
-    Assert.AreEqual(3, _countingAppender.Counter, "Test 3 events flushed on ApplicationException message.");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(3), "Test 3 events flushed on ApplicationException message.");
   }
 
   [Test]
@@ -157,10 +157,10 @@ public class EvaluatorTest
 
     logger.Log(typeof(EvaluatorTest), Level.Warn, "Warn message logged", null);
     logger.Log(typeof(EvaluatorTest), Level.Warn, "Warn message logged", null);
-    Assert.AreEqual(0, _countingAppender.Counter, "Test 2 events buffered");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test 2 events buffered");
 
     logger.Log(typeof(EvaluatorTest), Level.Warn, "Warn message logged", new ApplicationException());
-    Assert.AreEqual(0, _countingAppender.Counter, "Test 3 events buffered");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test 3 events buffered");
   }
 
   [Test]
@@ -175,9 +175,9 @@ public class EvaluatorTest
 
     logger.Log(typeof(EvaluatorTest), Level.Warn, "Warn message logged", null);
     logger.Log(typeof(EvaluatorTest), Level.Warn, "Warn message logged", null);
-    Assert.AreEqual(0, _countingAppender.Counter, "Test 2 events buffered");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test 2 events buffered");
 
     logger.Log(typeof(EvaluatorTest), Level.Warn, "Warn message logged", new ApplicationException());
-    Assert.AreEqual(0, _countingAppender.Counter, "Test 3 events buffered");
+    Assert.That(_countingAppender.Counter, Is.EqualTo(0), "Test 3 events buffered");
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Core/FixingTest.cs b/src/log4net.Tests/Core/FixingTest.cs
index 1464e45a..e5e682b7 100644
--- a/src/log4net.Tests/Core/FixingTest.cs
+++ b/src/log4net.Tests/Core/FixingTest.cs
@@ -71,7 +71,7 @@ public class FixingTest
     // Assert
     foreach (var flag in allFlags)
     {
-      Assert.AreEqual(flag, FixFlags.All & flag, $"FixFlags.All does not contain {flag}");
+      Assert.That(FixFlags.All & flag, Is.EqualTo(flag), $"FixFlags.All does not contain {flag}");
     }
   }
 
@@ -91,7 +91,7 @@ public class FixingTest
 
     AssertExpectedLoggingEvent(loggingEvent, loggingEventData);
 
-    Assert.AreEqual(FixFlags.None, loggingEvent.Fix, "Fixed Fields is incorrect");
+    Assert.That(loggingEvent.Fix, Is.EqualTo(FixFlags.None), "Fixed Fields is incorrect");
   }
 
   [Test]
@@ -112,7 +112,7 @@ public class FixingTest
 
     loggingEvent.Fix = FixFlags.All;
 
-    Assert.AreEqual(FixFlags.LocationInfo | FixFlags.UserName | FixFlags.Identity | FixFlags.Partial | FixFlags.Message | FixFlags.ThreadName | FixFlags.Exception | FixFlags.Domain | FixFlags.Properties, loggingEvent.Fix, "Fixed Fields is incorrect");
+    Assert.That(loggingEvent.Fix, Is.EqualTo(FixFlags.LocationInfo | FixFlags.UserName | FixFlags.Identity | FixFlags.Partial | FixFlags.Message | FixFlags.ThreadName | FixFlags.Exception | FixFlags.Domain | FixFlags.Properties), "Fixed Fields is incorrect");
   }
 
   [Test]
@@ -133,7 +133,7 @@ public class FixingTest
 
     loggingEvent.Fix = FixFlags.None;
 
-    Assert.AreEqual(FixFlags.None, loggingEvent.Fix, "Fixed Fields is incorrect");
+    Assert.That(loggingEvent.Fix, Is.EqualTo(FixFlags.None), "Fixed Fields is incorrect");
   }
 
   private static LoggingEventData BuildStandardEventData()
@@ -155,18 +155,16 @@ public class FixingTest
 
   private static void AssertExpectedLoggingEvent(LoggingEvent loggingEvent, LoggingEventData loggingEventData)
   {
-    Assert.AreEqual("ReallySimpleApp", loggingEventData.Domain, "Domain is incorrect");
-    Assert.AreEqual("System.Exception: This is the exception", loggingEvent.GetExceptionString(), "Exception is incorrect");
-    Assert.IsNull(loggingEventData.Identity, "Identity is incorrect");
-    Assert.AreEqual(Level.Warn, loggingEventData.Level, "Level is incorrect");
-    Assert.IsNotNull(loggingEvent.LocationInformation);
-    Assert.AreEqual("get_LocationInformation", loggingEvent.LocationInformation!.MethodName, "Location Info is incorrect");
-    Assert.AreEqual("log4net.Tests.Core.FixingTest", loggingEventData.LoggerName, "LoggerName is incorrect");
-    Assert.AreEqual(LogManager.GetRepository(TestRepository), loggingEvent.Repository, "Repository is incorrect");
-    Assert.AreEqual(Thread.CurrentThread.Name, loggingEventData.ThreadName, "ThreadName is incorrect");
-    // This test is redundant as loggingEventData.TimeStamp is a value type and cannot be null
-    //Assert.IsNotNull(loggingEventData.TimeStampUtc, "TimeStamp is incorrect");
-    Assert.AreEqual("TestUser", loggingEventData.UserName, "UserName is incorrect");
-    Assert.AreEqual("Logging event works", loggingEvent.RenderedMessage, "Message is incorrect");
+    Assert.That(loggingEventData.Domain, Is.EqualTo("ReallySimpleApp"), "Domain is incorrect");
+    Assert.That(loggingEvent.GetExceptionString(), Is.EqualTo("System.Exception: This is the exception"), "Exception is incorrect");
+    Assert.That(loggingEventData.Identity, Is.Null, "Identity is incorrect");
+    Assert.That(loggingEventData.Level, Is.EqualTo(Level.Warn), "Level is incorrect");
+    Assert.That(loggingEvent.LocationInformation, Is.Not.Null);
+    Assert.That(loggingEvent.LocationInformation!.MethodName, Is.EqualTo("get_LocationInformation"), "Location Info is incorrect");
+    Assert.That(loggingEventData.LoggerName, Is.EqualTo("log4net.Tests.Core.FixingTest"), "LoggerName is incorrect");
+    Assert.That(loggingEvent.Repository, Is.EqualTo(LogManager.GetRepository(TestRepository)), "Repository is incorrect");
+    Assert.That(loggingEventData.ThreadName, Is.EqualTo(Thread.CurrentThread.Name), "ThreadName is incorrect");
+    Assert.That(loggingEventData.UserName, Is.EqualTo("TestUser"), "UserName is incorrect");
+    Assert.That(loggingEvent.RenderedMessage, Is.EqualTo("Logging event works"), "Message is incorrect");
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Core/LevelMapTest.cs b/src/log4net.Tests/Core/LevelMapTest.cs
index 1b3e5910..30f6131f 100644
--- a/src/log4net.Tests/Core/LevelMapTest.cs
+++ b/src/log4net.Tests/Core/LevelMapTest.cs
@@ -35,33 +35,33 @@ public sealed class LevelMapTest
   [Test]
   public void LevelMapCreateClear()
   {
-    var map = new LevelMap();
+    LevelMap map = new();
     LevelCollection allLevels = map.AllLevels;
-    Assert.AreEqual(0, allLevels.Count);
-    Assert.IsNull(map["nonexistent"]);
+    Assert.That(allLevels, Is.Empty);
+    Assert.That(map["nonexistent"], Is.Null);
 
     map.Add("level1234", 1234, "displayName");
     allLevels = map.AllLevels;
-    Assert.AreEqual(1, allLevels.Count);
-    Assert.AreEqual("level1234", allLevels[0].Name);
-    Assert.AreEqual("displayName", allLevels[0].DisplayName);
-    Assert.AreEqual(1234, allLevels[0].Value);
+    Assert.That(allLevels, Has.Count.EqualTo(1));
+    Assert.That(allLevels[0].Name, Is.EqualTo("level1234"));
+    Assert.That(allLevels[0].DisplayName, Is.EqualTo("displayName"));
+    Assert.That(allLevels[0].Value, Is.EqualTo(1234));
     Level? level1234 = map["level1234"];
-    Assert.IsNotNull(level1234);
-    Assert.AreSame(level1234, allLevels[0]);
+    Assert.That(level1234, Is.Not.Null);
+    Assert.That(allLevels[0], Is.SameAs(level1234));
 
     Level lookupLevel = map.LookupWithDefault(level1234!);
-    Assert.AreSame(level1234, lookupLevel);
+    Assert.That(lookupLevel, Is.SameAs(level1234));
 
-    var otherLevel = new Level(5678, "level5678", "display");
+    Level otherLevel = new(5678, "level5678", "display");
     lookupLevel = map.LookupWithDefault(otherLevel);
-    Assert.AreSame(otherLevel, lookupLevel);
-    Assert.AreSame(otherLevel, map["LEVEL5678"]);
+    Assert.That(lookupLevel, Is.SameAs(otherLevel));
+    Assert.That(map["LEVEL5678"], Is.SameAs(otherLevel));
 
     map.Clear();
     allLevels = map.AllLevels;
-    Assert.AreEqual(0, allLevels.Count);
-    Assert.IsNull(map["level1234"]);
-    Assert.IsNull(map["LEVEL5678"]);
+    Assert.That(allLevels, Is.Empty);
+    Assert.That(map["level1234"], Is.Null);
+    Assert.That(map["LEVEL5678"], Is.Null);
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Core/LevelMappingTest.cs b/src/log4net.Tests/Core/LevelMappingTest.cs
index 6a6dec62..0bcb1ed6 100644
--- a/src/log4net.Tests/Core/LevelMappingTest.cs
+++ b/src/log4net.Tests/Core/LevelMappingTest.cs
@@ -82,16 +82,16 @@ public sealed class LevelMappingTest
       .GetMethod("SortEntries", BindingFlags.NonPublic | BindingFlags.Instance)!
       .Invoke(mapping, Array.Empty<object>())!;
 
-    CollectionAssert.AreEquivalent(withoutDuplicates, sorted);
-    CollectionAssert.AreNotEqual(withoutDuplicates, sorted);
+    Assert.That(sorted, Is.EquivalentTo(withoutDuplicates));
+    Assert.That(sorted, Is.Not.EqualTo(withoutDuplicates).AsCollection);
 
     int lowestLevelSeen = int.MaxValue;
     foreach (LevelMappingEntry entry in sorted)
     {
-      Assert.IsTrue(lowestLevelSeen >= entry.Level!.Value, entry.Level.Name);
+      Assert.That(lowestLevelSeen, Is.GreaterThanOrEqualTo(entry.Level!.Value), entry.Level.Name);
       lowestLevelSeen = entry.Level!.Value;
     }
-    Assert.AreEqual(Level.All.Value, lowestLevelSeen);
+    Assert.That(lowestLevelSeen, Is.EqualTo(Level.All.Value));
   }
 
   /// <summary>
@@ -106,19 +106,19 @@ public sealed class LevelMappingTest
     mapping.Add(new MappingEntry(Level.Emergency));
     mapping.Add(new MappingEntry(Level.Warn));
 
-    Assert.IsNull(mapping.Lookup(Level.Info)?.Level);
+    Assert.That(mapping.Lookup(Level.Info)?.Level, Is.Null);
 
     mapping.ActivateOptions();
 
-    Assert.AreEqual(Level.Info, mapping.Lookup(Level.Info)?.Level);
-    Assert.AreEqual(Level.Off, mapping.Lookup(Level.Off)?.Level);
-    Assert.AreEqual(Level.Emergency, mapping.Lookup(Level.Emergency)?.Level);
-    Assert.AreEqual(Level.Warn, mapping.Lookup(Level.Warn)?.Level);
-    Assert.AreEqual(Level.Warn, mapping.Lookup(Level.Error)?.Level);
-    Assert.IsNull(mapping.Lookup(Level.Fine)?.Level);
-    Assert.AreEqual(Level.Emergency, mapping.Lookup(Level.Log4Net_Debug)?.Level);
-    Assert.IsNull(mapping.Lookup(Level.Trace)?.Level);
-    Assert.AreEqual(Level.Warn, mapping.Lookup(Level.Alert)?.Level);
-    Assert.IsNull(mapping.Lookup(Level.All)?.Level);
+    Assert.That(mapping.Lookup(Level.Info)?.Level, Is.EqualTo(Level.Info));
+    Assert.That(mapping.Lookup(Level.Off)?.Level, Is.EqualTo(Level.Off));
+    Assert.That(mapping.Lookup(Level.Emergency)?.Level, Is.EqualTo(Level.Emergency));
+    Assert.That(mapping.Lookup(Level.Warn)?.Level, Is.EqualTo(Level.Warn));
+    Assert.That(mapping.Lookup(Level.Error)?.Level, Is.EqualTo(Level.Warn));
+    Assert.That(mapping.Lookup(Level.Fine)?.Level, Is.Null);
+    Assert.That(mapping.Lookup(Level.Log4Net_Debug)?.Level, Is.EqualTo(Level.Emergency));
+    Assert.That(mapping.Lookup(Level.Trace)?.Level, Is.Null);
+    Assert.That(mapping.Lookup(Level.Alert)?.Level, Is.EqualTo(Level.Warn));
+    Assert.That(mapping.Lookup(Level.All)?.Level, Is.Null);
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Core/LevelTest.cs b/src/log4net.Tests/Core/LevelTest.cs
index c56370d1..8396bfe3 100644
--- a/src/log4net.Tests/Core/LevelTest.cs
+++ b/src/log4net.Tests/Core/LevelTest.cs
@@ -50,18 +50,18 @@ public sealed class LevelTest
     [CallerArgumentExpression(nameof(left))] string leftName = "",
     [CallerArgumentExpression(nameof(right))] string rightName = "")
   {
-    Assert.AreEqual(leftInt < rightInt, left < right, "{0} < {1}", leftName, rightName);
-    Assert.AreEqual(leftInt > rightInt, left > right, "{0} > {1}", leftName, rightName);
-    Assert.AreEqual(leftInt <= rightInt, left <= right, "{0} <= {1}", leftName, rightName);
-    Assert.AreEqual(leftInt >= rightInt, left >= right, "{0} >= {1}", leftName, rightName);
-    Assert.AreEqual(leftInt == rightInt, left == right, "{0} == {1}", leftName, rightName);
-    Assert.AreEqual(leftInt != rightInt, left != right, "{0} != {1}", leftName, rightName);
-    Assert.AreEqual(leftInt?.Equals(rightInt), left?.Equals(right), "{0}?.Equals({1})", leftName, rightName);
+    Assert.That(left < right, Is.EqualTo(leftInt < rightInt), $"{leftName} < {rightName}");
+    Assert.That(left > right, Is.EqualTo(leftInt > rightInt), $"{leftName} > {rightName}");
+    Assert.That(left <= right, Is.EqualTo(leftInt <= rightInt), $"{leftName} <= {rightName}");
+    Assert.That(left >= right, Is.EqualTo(leftInt >= rightInt), $"{leftName} >= {rightName}");
+    Assert.That(left == right, Is.EqualTo(leftInt == rightInt), $"{leftName} == {rightName}");
+    Assert.That(left != right, Is.EqualTo(leftInt != rightInt), $"{leftName} != {rightName}");
+    Assert.That(left?.Equals(right), Is.EqualTo(leftInt?.Equals(rightInt)), $"{leftName}?.Equals({rightName})");
     if (leftInt is not null)
     {
       if (rightInt is not null)
       {
-        Assert.AreEqual(leftInt?.CompareTo(rightInt), left?.CompareTo(right!), "{0}?.CompareTo({1})", leftName, rightName);
+        Assert.That(left?.CompareTo(right!), Is.EqualTo(leftInt?.CompareTo(rightInt)), $"{leftName}?.CompareTo({rightName})");
       }
       else
       {
diff --git a/src/log4net.Tests/Core/LoggingEventTest.cs b/src/log4net.Tests/Core/LoggingEventTest.cs
index 19ac6802..e4115495 100644
--- a/src/log4net.Tests/Core/LoggingEventTest.cs
+++ b/src/log4net.Tests/Core/LoggingEventTest.cs
@@ -62,24 +62,24 @@ public sealed class LoggingEventTest
     stream.Position = 0;
     LoggingEvent ev2 = (LoggingEvent)formatter.Deserialize(stream);
 
-    Assert.AreEqual("aLogger", ev2.LoggerName);
-    Assert.AreEqual(Level.Log4Net_Debug, ev2.Level);
-    Assert.IsNull(ev2.MessageObject);
-    Assert.AreEqual("aMessage", ev2.RenderedMessage);
-    Assert.AreEqual("aThread", ev2.ThreadName);
-    Assert.AreEqual(timestamp, ev2.TimeStampUtc);
-    Assert.IsNotNull(ev2.LocationInfo);
-    Assert.AreEqual("System.RuntimeMethodHandle", ev2.LocationInfo!.ClassName);
-    Assert.AreEqual("InvokeMethod", ev2.LocationInfo!.MethodName);
-    Assert.IsNull(ev2.LocationInfo!.FileName);
-    Assert.AreEqual("0", ev2.LocationInfo!.LineNumber);
-    Assert.AreEqual("aUser", ev2.UserName);
-    Assert.AreEqual("anIdentity", ev2.Identity);
-    Assert.IsNull(ev2.ExceptionObject);
-    Assert.AreEqual("anException", ev2.GetExceptionString());
-    Assert.AreEqual("aDomain", ev2.Domain);
-    Assert.AreEqual(1, ev.Properties.Count);
-    Assert.AreEqual("bar", ev2.Properties["foo"]);
+    Assert.That(ev2.LoggerName, Is.EqualTo("aLogger"));
+    Assert.That(ev2.Level, Is.EqualTo(Level.Log4Net_Debug));
+    Assert.That(ev2.MessageObject, Is.Null);
+    Assert.That(ev2.RenderedMessage, Is.EqualTo("aMessage"));
+    Assert.That(ev2.ThreadName, Is.EqualTo("aThread"));
+    Assert.That(ev2.TimeStampUtc, Is.EqualTo(timestamp));
+    Assert.That(ev2.LocationInfo, Is.Not.Null);
+    Assert.That(ev2.LocationInfo!.ClassName, Is.EqualTo("System.RuntimeMethodHandle"));
+    Assert.That(ev2.LocationInfo!.MethodName, Is.EqualTo("InvokeMethod"));
+    Assert.That(ev2.LocationInfo!.FileName, Is.Null);
+    Assert.That(ev2.LocationInfo!.LineNumber, Is.EqualTo("0"));
+    Assert.That(ev2.UserName, Is.EqualTo("aUser"));
+    Assert.That(ev2.Identity, Is.EqualTo("anIdentity"));
+    Assert.That(ev2.ExceptionObject, Is.Null);
+    Assert.That(ev2.GetExceptionString(), Is.EqualTo("anException"));
+    Assert.That(ev2.Domain, Is.EqualTo("aDomain"));
+    Assert.That(ev.Properties, Has.Count.EqualTo(1));
+    Assert.That(ev2.Properties["foo"], Is.EqualTo("bar"));
   }
 
   /// <summary>
@@ -93,26 +93,26 @@ public sealed class LoggingEventTest
     using Stream stream = File.OpenRead(datPath);
     BinaryFormatter formatter = new();
     LoggingEvent ev = (LoggingEvent)formatter.Deserialize(stream);
-    Assert.IsNotNull(ev);
+    Assert.That(ev, Is.Not.Null);
 
-    Assert.AreEqual("aLogger", ev!.LoggerName);
-    Assert.AreEqual(Level.Log4Net_Debug, ev.Level);
-    Assert.IsNull(ev.MessageObject);
-    Assert.AreEqual("aMessage", ev.RenderedMessage);
-    Assert.AreEqual("aThread", ev.ThreadName);
-    Assert.IsNotNull(ev.LocationInfo);
-    Assert.AreEqual("?", ev.LocationInfo!.ClassName);
-    Assert.AreEqual("?", ev.LocationInfo!.MethodName);
-    Assert.AreEqual("?", ev.LocationInfo!.FileName);
-    Assert.AreEqual("?", ev.LocationInfo!.LineNumber);
-    Assert.AreEqual("aUser", ev.UserName);
-    Assert.AreEqual("anIdentity", ev.Identity);
-    Assert.IsNull(ev.ExceptionObject);
-    Assert.AreEqual("anException", ev.GetExceptionString());
-    Assert.AreEqual("aDomain", ev.Domain);
-    Assert.AreEqual(1, ev.Properties.Count);
-    Assert.AreEqual("bar", ev.Properties["foo"]);
-    Assert.AreEqual(_localTime.ToUniversalTime(), ev.TimeStampUtc);
+    Assert.That(ev!.LoggerName, Is.EqualTo("aLogger"));
+    Assert.That(ev.Level, Is.EqualTo(Level.Log4Net_Debug));
+    Assert.That(ev.MessageObject, Is.Null);
+    Assert.That(ev.RenderedMessage, Is.EqualTo("aMessage"));
+    Assert.That(ev.ThreadName, Is.EqualTo("aThread"));
+    Assert.That(ev.LocationInfo, Is.Not.Null);
+    Assert.That(ev.LocationInfo!.ClassName, Is.EqualTo("?"));
+    Assert.That(ev.LocationInfo!.MethodName, Is.EqualTo("?"));
+    Assert.That(ev.LocationInfo!.FileName, Is.EqualTo("?"));
+    Assert.That(ev.LocationInfo!.LineNumber, Is.EqualTo("?"));
+    Assert.That(ev.UserName, Is.EqualTo("aUser"));
+    Assert.That(ev.Identity, Is.EqualTo("anIdentity"));
+    Assert.That(ev.ExceptionObject, Is.Null);
+    Assert.That(ev.GetExceptionString(), Is.EqualTo("anException"));
+    Assert.That(ev.Domain, Is.EqualTo("aDomain"));
+    Assert.That(ev.Properties, Has.Count.EqualTo(1));
+    Assert.That(ev.Properties["foo"], Is.EqualTo("bar"));
+    Assert.That(ev.TimeStampUtc, Is.EqualTo(_localTime.ToUniversalTime()));
   }
 #endif // NET462_OR_GREATER
 
@@ -122,7 +122,7 @@ public sealed class LoggingEventTest
   [Test]
   public void ReviseThreadNameTest()
   {
-    Assert.AreEqual("PoolBoy", ReviseThreadName("PoolBoy"));
+    Assert.That(ReviseThreadName("PoolBoy"), Is.EqualTo("PoolBoy"));
     AssertIsCurrentThreadId(ReviseThreadName(null));
     AssertIsCurrentThreadId(ReviseThreadName(string.Empty));
     AssertIsCurrentThreadId(ReviseThreadName(".NET ThreadPool Worker"));
@@ -136,6 +136,6 @@ public sealed class LoggingEventTest
     }
 
     static void AssertIsCurrentThreadId(string name)
-      => Assert.AreEqual(name, SystemInfo.CurrentThreadId.ToString(CultureInfo.InvariantCulture));
+      => Assert.That(SystemInfo.CurrentThreadId.ToString(CultureInfo.InvariantCulture), Is.EqualTo(name));
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Core/ShutdownTest.cs b/src/log4net.Tests/Core/ShutdownTest.cs
index 6ddac260..6161e67f 100644
--- a/src/log4net.Tests/Core/ShutdownTest.cs
+++ b/src/log4net.Tests/Core/ShutdownTest.cs
@@ -53,13 +53,13 @@ public class ShutdownTest
     ILog log1 = LogManager.GetLogger(rep.Name, "logger1");
 
     log1.Info("TestMessage1");
-    Assert.AreEqual("TestMessage1", stringAppender.GetString(), "Test logging configured");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("TestMessage1"), "Test logging configured");
     stringAppender.Reset();
 
     rep.Shutdown();
 
     log1.Info("TestMessage2");
-    Assert.AreEqual("", stringAppender.GetString(), "Test not logging while shutdown");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test not logging while shutdown");
     stringAppender.Reset();
 
     // Create new appender and configure
@@ -70,7 +70,7 @@ public class ShutdownTest
     BasicConfigurator.Configure(rep, stringAppender);
 
     log1.Info("TestMessage3");
-    Assert.AreEqual("TestMessage3", stringAppender.GetString(), "Test logging re-configured");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("TestMessage3"), "Test logging re-configured");
     stringAppender.Reset();
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Core/StringFormatTest.cs b/src/log4net.Tests/Core/StringFormatTest.cs
index 81383d5c..3036219c 100644
--- a/src/log4net.Tests/Core/StringFormatTest.cs
+++ b/src/log4net.Tests/Core/StringFormatTest.cs
@@ -68,79 +68,79 @@ public class StringFormatTest
 
     // ***
     log1.Info("TestMessage");
-    Assert.AreEqual("TestMessage", stringAppender.GetString(), "Test simple INFO event");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("TestMessage"), "Test simple INFO event");
     stringAppender.Reset();
 
 
     // ***
     log1.DebugFormat("Before {0} After", "Middle");
-    Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted DEBUG event");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("Before Middle After"), "Test simple formatted DEBUG event");
     stringAppender.Reset();
 
     // ***
     log1.InfoFormat("Before {0} After", "Middle");
-    Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted INFO event");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("Before Middle After"), "Test simple formatted INFO event");
     stringAppender.Reset();
 
     // ***
     log1.WarnFormat("Before {0} After", "Middle");
-    Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted WARN event");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("Before Middle After"), "Test simple formatted WARN event");
     stringAppender.Reset();
 
     // ***
     log1.ErrorFormat("Before {0} After", "Middle");
-    Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted ERROR event");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("Before Middle After"), "Test simple formatted ERROR event");
     stringAppender.Reset();
 
     // ***
     log1.FatalFormat("Before {0} After", "Middle");
-    Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted FATAL event");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("Before Middle After"), "Test simple formatted FATAL event");
     stringAppender.Reset();
 
 
     // ***
     log1.InfoFormat("Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("Before Middle After End", stringAppender.GetString(), "Test simple formatted INFO event 2");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("Before Middle After End"), "Test simple formatted INFO event 2");
     stringAppender.Reset();
 
     // ***
     log1.InfoFormat("IGNORE THIS WARNING - EXCEPTION EXPECTED Before {0} After {1} {2}", "Middle", "End");
-    Assert.AreEqual(StringFormatError, stringAppender.GetString(), "Test formatting error");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(StringFormatError), "Test formatting error");
     stringAppender.Reset();
 
     // *** Nulls
     log1.Debug(null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.Debug(null, new Exception("Exception message"));
-    Assert.AreEqual("System.Exception: Exception message" + Environment.NewLine, stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("System.Exception: Exception message" + Environment.NewLine));
     stringAppender.Reset();
 
     log1.InfoFormat("One{0} null", null);
-    Assert.AreEqual("One null", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("One null"));
     stringAppender.Reset();
 
     log1.InfoFormat("Two{0} nulls{1}", null, null);
-    Assert.AreEqual("Two nulls", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("Two nulls"));
     stringAppender.Reset();
 
     log1.InfoFormat("Three{0} nulls{1} here{2}", null, null, null);
-    Assert.AreEqual("Three nulls here", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("Three nulls here"));
     stringAppender.Reset();
 
     log1.InfoFormat("Four{0} nulls{1} this{2} time{3}", null, null, null, null);
-    Assert.AreEqual("Four nulls this time", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("Four nulls this time"));
     stringAppender.Reset();
 
     object[]? args = null;
     log1.InfoFormat("Null param array", args);
-    Assert.AreEqual("Null param array", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("Null param array"));
     stringAppender.Reset();
 
     // Degenerate case - null param array internally converts to an array of one null.
     log1.InfoFormat("Null param array with {0}", args);
-    Assert.AreEqual("Null param array with ", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("Null param array with "));
     stringAppender.Reset();
   }
 
@@ -161,83 +161,83 @@ public class StringFormatTest
 
     // ***
     log1.Debug("TestMessage");
-    Assert.AreEqual("DEBUG:TestMessage", stringAppender.GetString(), "Test simple DEBUG event 1");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:TestMessage"), "Test simple DEBUG event 1");
     stringAppender.Reset();
 
     // ***
     log1.Debug("TestMessage", null);
-    Assert.AreEqual("DEBUG:TestMessage", stringAppender.GetString(), "Test simple DEBUG event 2");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:TestMessage"), "Test simple DEBUG event 2");
     stringAppender.Reset();
 
     // ***
     log1.Debug("TestMessage", new Exception("Exception message"));
-    Assert.AreEqual("DEBUG:TestMessageSystem.Exception: Exception message" + Environment.NewLine, stringAppender.GetString(), "Test simple DEBUG event 3");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:TestMessageSystem.Exception: Exception message" + Environment.NewLine), "Test simple DEBUG event 3");
     stringAppender.Reset();
 
     // ***
     log1.DebugFormat("a{0}", "1");
-    Assert.AreEqual("DEBUG:a1", stringAppender.GetString(), "Test formatted DEBUG event with 1 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:a1"), "Test formatted DEBUG event with 1 parm");
     stringAppender.Reset();
 
     // ***
     log1.DebugFormat("a{0}b{1}", "1", "2");
-    Assert.AreEqual("DEBUG:a1b2", stringAppender.GetString(), "Test formatted DEBUG event with 2 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:a1b2"), "Test formatted DEBUG event with 2 parm");
     stringAppender.Reset();
 
     // ***
     log1.DebugFormat("a{0}b{1}c{2}", "1", "2", "3");
-    Assert.AreEqual("DEBUG:a1b2c3", stringAppender.GetString(), "Test formatted DEBUG event with 3 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:a1b2c3"), "Test formatted DEBUG event with 3 parm");
     stringAppender.Reset();
 
 
     // ***
     log1.DebugFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
-    Assert.AreEqual("DEBUG:aQbWcEdReTf", stringAppender.GetString(), "Test formatted DEBUG event with 5 parms (only 4 used)");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:aQbWcEdReTf"), "Test formatted DEBUG event with 5 parms (only 4 used)");
     stringAppender.Reset();
 
     // ***
     log1.DebugFormat(null, "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("DEBUG:Before Middle After End", stringAppender.GetString(), "Test formatting with null provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:Before Middle After End"), "Test formatting with null provider");
     stringAppender.Reset();
 
     // ***
     log1.DebugFormat(new CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("DEBUG:Before Middle After End", stringAppender.GetString(), "Test formatting with 'en' provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:Before Middle After End"), "Test formatting with 'en' provider");
     stringAppender.Reset();
 
     // *** Nulls
     log1.Debug(null);
-    Assert.AreEqual("DEBUG:", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:"));
     stringAppender.Reset();
 
     log1.Debug(null, new Exception("Exception message"));
-    Assert.AreEqual("DEBUG:System.Exception: Exception message" + Environment.NewLine, stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:System.Exception: Exception message" + Environment.NewLine));
     stringAppender.Reset();
 
     log1.DebugFormat("One{0} null", null);
-    Assert.AreEqual("DEBUG:One null", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:One null"));
     stringAppender.Reset();
 
     log1.DebugFormat("Two{0} nulls{1}", null, null);
-    Assert.AreEqual("DEBUG:Two nulls", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:Two nulls"));
     stringAppender.Reset();
 
     log1.DebugFormat("Three{0} nulls{1} here{2}", null, null, null);
-    Assert.AreEqual("DEBUG:Three nulls here", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:Three nulls here"));
     stringAppender.Reset();
 
     log1.DebugFormat("Four{0} nulls{1} this{2} time{3}", null, null, null, null);
-    Assert.AreEqual("DEBUG:Four nulls this time", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:Four nulls this time"));
     stringAppender.Reset();
 
     object[]? args = null;
     log1.DebugFormat("Null param array", args);
-    Assert.AreEqual("DEBUG:Null param array", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:Null param array"));
     stringAppender.Reset();
 
     // Degenerate case - null param array internally converts to an array of one null.
     log1.DebugFormat("Null param array with {0}", args);
-    Assert.AreEqual("DEBUG:Null param array with ", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("DEBUG:Null param array with "));
     stringAppender.Reset();
   }
 
@@ -257,83 +257,83 @@ public class StringFormatTest
 
     // ***
     log1.Debug("TestMessage");
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple DEBUG event 1");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple DEBUG event 1");
     stringAppender.Reset();
 
     // ***
     log1.Debug("TestMessage", null);
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple DEBUG event 2");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple DEBUG event 2");
     stringAppender.Reset();
 
     // ***
     log1.Debug("TestMessage", new Exception("Exception message"));
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple DEBUG event 3");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple DEBUG event 3");
     stringAppender.Reset();
 
     // ***
     log1.DebugFormat("a{0}", "1");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted DEBUG event with 1 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted DEBUG event with 1 parm");
     stringAppender.Reset();
 
     // ***
     log1.DebugFormat("a{0}b{1}", "1", "2");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted DEBUG event with 2 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted DEBUG event with 2 parm");
     stringAppender.Reset();
 
     // ***
     log1.DebugFormat("a{0}b{1}c{2}", "1", "2", "3");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted DEBUG event with 3 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted DEBUG event with 3 parm");
     stringAppender.Reset();
 
 
     // ***
     log1.DebugFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted DEBUG event with 5 parms (only 4 used)");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted DEBUG event with 5 parms (only 4 used)");
     stringAppender.Reset();
 
     // ***
     log1.DebugFormat(null, "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatting with null provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatting with null provider");
     stringAppender.Reset();
 
     // ***
     log1.DebugFormat(new CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatting with 'en' provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatting with 'en' provider");
     stringAppender.Reset();
 
     // *** Nulls
     log1.Debug(null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.Debug(null, new Exception("Exception message"));
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.DebugFormat("One{0} null", null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.DebugFormat("Two{0} nulls{1}", null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.DebugFormat("Three{0} nulls{1} here{2}", null, null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.DebugFormat("Four{0} nulls{1} this{2} time{3}", null, null, null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     object[]? args = null;
     log1.DebugFormat("Null param array", args);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     // Degenerate case - null param array internally converts to an array of one null.
     log1.DebugFormat("Null param array with {0}", args);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
   }
 
@@ -352,83 +352,83 @@ public class StringFormatTest
 
     // ***
     log1.Info("TestMessage");
-    Assert.AreEqual("INFO:TestMessage", stringAppender.GetString(), "Test simple INFO event 1");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:TestMessage"), "Test simple INFO event 1");
     stringAppender.Reset();
 
     // ***
     log1.Info("TestMessage", null);
-    Assert.AreEqual("INFO:TestMessage", stringAppender.GetString(), "Test simple INFO event 2");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:TestMessage"), "Test simple INFO event 2");
     stringAppender.Reset();
 
     // ***
     log1.Info("TestMessage", new Exception("Exception message"));
-    Assert.AreEqual("INFO:TestMessageSystem.Exception: Exception message" + Environment.NewLine, stringAppender.GetString(), "Test simple INFO event 3");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:TestMessageSystem.Exception: Exception message" + Environment.NewLine), "Test simple INFO event 3");
     stringAppender.Reset();
 
     // ***
     log1.InfoFormat("a{0}", "1");
-    Assert.AreEqual("INFO:a1", stringAppender.GetString(), "Test formatted INFO event with 1 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:a1"), "Test formatted INFO event with 1 parm");
     stringAppender.Reset();
 
     // ***
     log1.InfoFormat("a{0}b{1}", "1", "2");
-    Assert.AreEqual("INFO:a1b2", stringAppender.GetString(), "Test formatted INFO event with 2 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:a1b2"), "Test formatted INFO event with 2 parm");
     stringAppender.Reset();
 
     // ***
     log1.InfoFormat("a{0}b{1}c{2}", "1", "2", "3");
-    Assert.AreEqual("INFO:a1b2c3", stringAppender.GetString(), "Test formatted INFO event with 3 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:a1b2c3"), "Test formatted INFO event with 3 parm");
     stringAppender.Reset();
 
 
     // ***
     log1.InfoFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
-    Assert.AreEqual("INFO:aQbWcEdReTf", stringAppender.GetString(), "Test formatted INFO event with 5 parms (only 4 used)");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:aQbWcEdReTf"), "Test formatted INFO event with 5 parms (only 4 used)");
     stringAppender.Reset();
 
     // ***
     log1.InfoFormat(null, "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("INFO:Before Middle After End", stringAppender.GetString(), "Test formatting with null provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:Before Middle After End"), "Test formatting with null provider");
     stringAppender.Reset();
 
     // ***
     log1.InfoFormat(new CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("INFO:Before Middle After End", stringAppender.GetString(), "Test formatting with 'en' provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:Before Middle After End"), "Test formatting with 'en' provider");
     stringAppender.Reset();
 
     // *** Nulls
     log1.Info(null);
-    Assert.AreEqual("INFO:", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:"));
     stringAppender.Reset();
 
     log1.Info(null, new Exception("Exception message"));
-    Assert.AreEqual("INFO:System.Exception: Exception message" + Environment.NewLine, stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:System.Exception: Exception message" + Environment.NewLine));
     stringAppender.Reset();
 
     log1.InfoFormat("One{0} null", null);
-    Assert.AreEqual("INFO:One null", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:One null"));
     stringAppender.Reset();
 
     log1.InfoFormat("Two{0} nulls{1}", null, null);
-    Assert.AreEqual("INFO:Two nulls", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:Two nulls"));
     stringAppender.Reset();
 
     log1.InfoFormat("Three{0} nulls{1} here{2}", null, null, null);
-    Assert.AreEqual("INFO:Three nulls here", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:Three nulls here"));
     stringAppender.Reset();
 
     log1.InfoFormat("Four{0} nulls{1} this{2} time{3}", null, null, null, null);
-    Assert.AreEqual("INFO:Four nulls this time", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:Four nulls this time"));
     stringAppender.Reset();
 
     object[]? args = null;
     log1.InfoFormat("Null param array", args);
-    Assert.AreEqual("INFO:Null param array", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:Null param array"));
     stringAppender.Reset();
 
     // Degenerate case - null param array internally converts to an array of one null.
     log1.InfoFormat("Null param array with {0}", args);
-    Assert.AreEqual("INFO:Null param array with ", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("INFO:Null param array with "));
     stringAppender.Reset();
   }
 
@@ -448,83 +448,83 @@ public class StringFormatTest
 
     // ***
     log1.Info("TestMessage");
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple INFO event 1");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple INFO event 1");
     stringAppender.Reset();
 
     // ***
     log1.Info("TestMessage", null);
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple INFO event 2");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple INFO event 2");
     stringAppender.Reset();
 
     // ***
     log1.Info("TestMessage", new Exception("Exception message"));
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple INFO event 3");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple INFO event 3");
     stringAppender.Reset();
 
     // ***
     log1.InfoFormat("a{0}", "1");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted INFO event with 1 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted INFO event with 1 parm");
     stringAppender.Reset();
 
     // ***
     log1.InfoFormat("a{0}b{1}", "1", "2");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted INFO event with 2 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted INFO event with 2 parm");
     stringAppender.Reset();
 
     // ***
     log1.InfoFormat("a{0}b{1}c{2}", "1", "2", "3");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted INFO event with 3 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted INFO event with 3 parm");
     stringAppender.Reset();
 
 
     // ***
     log1.InfoFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted INFO event with 5 parms (only 4 used)");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted INFO event with 5 parms (only 4 used)");
     stringAppender.Reset();
 
     // ***
     log1.InfoFormat(null, "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatting with null provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatting with null provider");
     stringAppender.Reset();
 
     // ***
     log1.InfoFormat(new CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatting with 'en' provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatting with 'en' provider");
     stringAppender.Reset();
 
     // *** Nulls
     log1.Info(null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.Info(null, new Exception("Exception message"));
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.InfoFormat("One{0} null", null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.InfoFormat("Two{0} nulls{1}", null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.InfoFormat("Three{0} nulls{1} here{2}", null, null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.InfoFormat("Four{0} nulls{1} this{2} time{3}", null, null, null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     object[]? args = null;
     log1.InfoFormat("Null param array", args);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     // Degenerate case - null param array internally converts to an array of one null.
     log1.InfoFormat("Null param array with {0}", args);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
   }
 
@@ -543,83 +543,83 @@ public class StringFormatTest
 
     // ***
     log1.Warn("TestMessage");
-    Assert.AreEqual("WARN:TestMessage", stringAppender.GetString(), "Test simple WARN event 1");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:TestMessage"), "Test simple WARN event 1");
     stringAppender.Reset();
 
     // ***
     log1.Warn("TestMessage", null);
-    Assert.AreEqual("WARN:TestMessage", stringAppender.GetString(), "Test simple WARN event 2");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:TestMessage"), "Test simple WARN event 2");
     stringAppender.Reset();
 
     // ***
     log1.Warn("TestMessage", new Exception("Exception message"));
-    Assert.AreEqual("WARN:TestMessageSystem.Exception: Exception message" + Environment.NewLine, stringAppender.GetString(), "Test simple WARN event 3");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:TestMessageSystem.Exception: Exception message" + Environment.NewLine), "Test simple WARN event 3");
     stringAppender.Reset();
 
     // ***
     log1.WarnFormat("a{0}", "1");
-    Assert.AreEqual("WARN:a1", stringAppender.GetString(), "Test formatted WARN event with 1 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:a1"), "Test formatted WARN event with 1 parm");
     stringAppender.Reset();
 
     // ***
     log1.WarnFormat("a{0}b{1}", "1", "2");
-    Assert.AreEqual("WARN:a1b2", stringAppender.GetString(), "Test formatted WARN event with 2 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:a1b2"), "Test formatted WARN event with 2 parm");
     stringAppender.Reset();
 
     // ***
     log1.WarnFormat("a{0}b{1}c{2}", "1", "2", "3");
-    Assert.AreEqual("WARN:a1b2c3", stringAppender.GetString(), "Test formatted WARN event with 3 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:a1b2c3"), "Test formatted WARN event with 3 parm");
     stringAppender.Reset();
 
 
     // ***
     log1.WarnFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
-    Assert.AreEqual("WARN:aQbWcEdReTf", stringAppender.GetString(), "Test formatted WARN event with 5 parms (only 4 used)");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:aQbWcEdReTf"), "Test formatted WARN event with 5 parms (only 4 used)");
     stringAppender.Reset();
 
     // ***
     log1.WarnFormat(null, "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("WARN:Before Middle After End", stringAppender.GetString(), "Test formatting with null provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:Before Middle After End"), "Test formatting with null provider");
     stringAppender.Reset();
 
     // ***
     log1.WarnFormat(new CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("WARN:Before Middle After End", stringAppender.GetString(), "Test formatting with 'en' provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:Before Middle After End"), "Test formatting with 'en' provider");
     stringAppender.Reset();
 
     // *** Nulls
     log1.Warn(null);
-    Assert.AreEqual("WARN:", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:"));
     stringAppender.Reset();
 
     log1.Warn(null, new Exception("Exception message"));
-    Assert.AreEqual("WARN:System.Exception: Exception message" + Environment.NewLine, stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:System.Exception: Exception message" + Environment.NewLine));
     stringAppender.Reset();
 
     log1.WarnFormat("One{0} null", null);
-    Assert.AreEqual("WARN:One null", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:One null"));
     stringAppender.Reset();
 
     log1.WarnFormat("Two{0} nulls{1}", null, null);
-    Assert.AreEqual("WARN:Two nulls", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:Two nulls"));
     stringAppender.Reset();
 
     log1.WarnFormat("Three{0} nulls{1} here{2}", null, null, null);
-    Assert.AreEqual("WARN:Three nulls here", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:Three nulls here"));
     stringAppender.Reset();
 
     log1.WarnFormat("Four{0} nulls{1} this{2} time{3}", null, null, null, null);
-    Assert.AreEqual("WARN:Four nulls this time", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:Four nulls this time"));
     stringAppender.Reset();
 
     object[]? args = null;
     log1.WarnFormat("Null param array", args);
-    Assert.AreEqual("WARN:Null param array", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:Null param array"));
     stringAppender.Reset();
 
     // Degenerate case - null param array internally converts to an array of one null.
     log1.WarnFormat("Null param array with {0}", args);
-    Assert.AreEqual("WARN:Null param array with ", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("WARN:Null param array with "));
     stringAppender.Reset();
   }
 
@@ -639,83 +639,83 @@ public class StringFormatTest
 
     // ***
     log1.Warn("TestMessage");
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple WARN event 1");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple WARN event 1");
     stringAppender.Reset();
 
     // ***
     log1.Warn("TestMessage", null);
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple WARN event 2");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple WARN event 2");
     stringAppender.Reset();
 
     // ***
     log1.Warn("TestMessage", new Exception("Exception message"));
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple WARN event 3");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple WARN event 3");
     stringAppender.Reset();
 
     // ***
     log1.WarnFormat("a{0}", "1");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted WARN event with 1 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted WARN event with 1 parm");
     stringAppender.Reset();
 
     // ***
     log1.WarnFormat("a{0}b{1}", "1", "2");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted WARN event with 2 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted WARN event with 2 parm");
     stringAppender.Reset();
 
     // ***
     log1.WarnFormat("a{0}b{1}c{2}", "1", "2", "3");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted WARN event with 3 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted WARN event with 3 parm");
     stringAppender.Reset();
 
 
     // ***
     log1.WarnFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted WARN event with 5 parms (only 4 used)");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted WARN event with 5 parms (only 4 used)");
     stringAppender.Reset();
 
     // ***
     log1.WarnFormat(null, "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatting with null provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatting with null provider");
     stringAppender.Reset();
 
     // ***
     log1.WarnFormat(new CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatting with 'en' provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatting with 'en' provider");
     stringAppender.Reset();
 
     // *** Nulls
     log1.Warn(null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.Warn(null, new Exception("Exception message"));
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.WarnFormat("One{0} null", null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.WarnFormat("Two{0} nulls{1}", null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.WarnFormat("Three{0} nulls{1} here{2}", null, null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.WarnFormat("Four{0} nulls{1} this{2} time{3}", null, null, null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     object[]? args = null;
     log1.WarnFormat("Null param array", args);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     // Degenerate case - null param array internally converts to an array of one null.
     log1.WarnFormat("Null param array with {0}", args);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
   }
 
@@ -734,83 +734,83 @@ public class StringFormatTest
 
     // ***
     log1.Error("TestMessage");
-    Assert.AreEqual("ERROR:TestMessage", stringAppender.GetString(), "Test simple ERROR event 1");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:TestMessage"), "Test simple ERROR event 1");
     stringAppender.Reset();
 
     // ***
     log1.Error("TestMessage", null);
-    Assert.AreEqual("ERROR:TestMessage", stringAppender.GetString(), "Test simple ERROR event 2");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:TestMessage"), "Test simple ERROR event 2");
     stringAppender.Reset();
 
     // ***
     log1.Error("TestMessage", new Exception("Exception message"));
-    Assert.AreEqual("ERROR:TestMessageSystem.Exception: Exception message" + Environment.NewLine, stringAppender.GetString(), "Test simple ERROR event 3");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:TestMessageSystem.Exception: Exception message" + Environment.NewLine), "Test simple ERROR event 3");
     stringAppender.Reset();
 
     // ***
     log1.ErrorFormat("a{0}", "1");
-    Assert.AreEqual("ERROR:a1", stringAppender.GetString(), "Test formatted ERROR event with 1 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:a1"), "Test formatted ERROR event with 1 parm");
     stringAppender.Reset();
 
     // ***
     log1.ErrorFormat("a{0}b{1}", "1", "2");
-    Assert.AreEqual("ERROR:a1b2", stringAppender.GetString(), "Test formatted ERROR event with 2 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:a1b2"), "Test formatted ERROR event with 2 parm");
     stringAppender.Reset();
 
     // ***
     log1.ErrorFormat("a{0}b{1}c{2}", "1", "2", "3");
-    Assert.AreEqual("ERROR:a1b2c3", stringAppender.GetString(), "Test formatted ERROR event with 3 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:a1b2c3"), "Test formatted ERROR event with 3 parm");
     stringAppender.Reset();
 
 
     // ***
     log1.ErrorFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
-    Assert.AreEqual("ERROR:aQbWcEdReTf", stringAppender.GetString(), "Test formatted ERROR event with 5 parms (only 4 used)");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:aQbWcEdReTf"), "Test formatted ERROR event with 5 parms (only 4 used)");
     stringAppender.Reset();
 
     // ***
     log1.ErrorFormat(null, "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("ERROR:Before Middle After End", stringAppender.GetString(), "Test formatting with null provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:Before Middle After End"), "Test formatting with null provider");
     stringAppender.Reset();
 
     // ***
     log1.ErrorFormat(new CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("ERROR:Before Middle After End", stringAppender.GetString(), "Test formatting with 'en' provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:Before Middle After End"), "Test formatting with 'en' provider");
     stringAppender.Reset();
 
     // *** Nulls
     log1.Error(null);
-    Assert.AreEqual("ERROR:", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:"));
     stringAppender.Reset();
 
     log1.Error(null, new Exception("Exception message"));
-    Assert.AreEqual("ERROR:System.Exception: Exception message" + Environment.NewLine, stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:System.Exception: Exception message" + Environment.NewLine));
     stringAppender.Reset();
 
     log1.ErrorFormat("One{0} null", null);
-    Assert.AreEqual("ERROR:One null", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:One null"));
     stringAppender.Reset();
 
     log1.ErrorFormat("Two{0} nulls{1}", null, null);
-    Assert.AreEqual("ERROR:Two nulls", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:Two nulls"));
     stringAppender.Reset();
 
     log1.ErrorFormat("Three{0} nulls{1} here{2}", null, null, null);
-    Assert.AreEqual("ERROR:Three nulls here", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:Three nulls here"));
     stringAppender.Reset();
 
     log1.ErrorFormat("Four{0} nulls{1} this{2} time{3}", null, null, null, null);
-    Assert.AreEqual("ERROR:Four nulls this time", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:Four nulls this time"));
     stringAppender.Reset();
 
     object[]? args = null;
     log1.ErrorFormat("Null param array", args);
-    Assert.AreEqual("ERROR:Null param array", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:Null param array"));
     stringAppender.Reset();
 
     // Degenerate case - null param array internally converts to an array of one null.
     log1.ErrorFormat("Null param array with {0}", args);
-    Assert.AreEqual("ERROR:Null param array with ", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("ERROR:Null param array with "));
     stringAppender.Reset();
   }
 
@@ -830,83 +830,83 @@ public class StringFormatTest
 
     // ***
     log1.Error("TestMessage");
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple ERROR event 1");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple ERROR event 1");
     stringAppender.Reset();
 
     // ***
     log1.Error("TestMessage", null);
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple ERROR event 2");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple ERROR event 2");
     stringAppender.Reset();
 
     // ***
     log1.Error("TestMessage", new Exception("Exception message"));
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple ERROR event 3");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple ERROR event 3");
     stringAppender.Reset();
 
     // ***
     log1.ErrorFormat("a{0}", "1");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted ERROR event with 1 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted ERROR event with 1 parm");
     stringAppender.Reset();
 
     // ***
     log1.ErrorFormat("a{0}b{1}", "1", "2");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted ERROR event with 2 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted ERROR event with 2 parm");
     stringAppender.Reset();
 
     // ***
     log1.ErrorFormat("a{0}b{1}c{2}", "1", "2", "3");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted ERROR event with 3 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted ERROR event with 3 parm");
     stringAppender.Reset();
 
 
     // ***
     log1.ErrorFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted ERROR event with 5 parms (only 4 used)");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted ERROR event with 5 parms (only 4 used)");
     stringAppender.Reset();
 
     // ***
     log1.ErrorFormat(null, "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatting with null provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatting with null provider");
     stringAppender.Reset();
 
     // ***
     log1.ErrorFormat(new CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatting with 'en' provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatting with 'en' provider");
     stringAppender.Reset();
 
     // *** Nulls
     log1.Error(null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.Error(null, new Exception("Exception message"));
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.ErrorFormat("One{0} null", null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.ErrorFormat("Two{0} nulls{1}", null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.ErrorFormat("Three{0} nulls{1} here{2}", null, null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.ErrorFormat("Four{0} nulls{1} this{2} time{3}", null, null, null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     object[]? args = null;
     log1.ErrorFormat("Null param array", args);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     // Degenerate case - null param array internally converts to an array of one null.
     log1.ErrorFormat("Null param array with {0}", args);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
   }
 
@@ -925,83 +925,83 @@ public class StringFormatTest
 
     // ***
     log1.Fatal("TestMessage");
-    Assert.AreEqual("FATAL:TestMessage", stringAppender.GetString(), "Test simple FATAL event 1");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:TestMessage"), "Test simple FATAL event 1");
     stringAppender.Reset();
 
     // ***
     log1.Fatal("TestMessage", null);
-    Assert.AreEqual("FATAL:TestMessage", stringAppender.GetString(), "Test simple FATAL event 2");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:TestMessage"), "Test simple FATAL event 2");
     stringAppender.Reset();
 
     // ***
     log1.Fatal("TestMessage", new Exception("Exception message"));
-    Assert.AreEqual("FATAL:TestMessageSystem.Exception: Exception message" + Environment.NewLine, stringAppender.GetString(), "Test simple FATAL event 3");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:TestMessageSystem.Exception: Exception message" + Environment.NewLine), "Test simple FATAL event 3");
     stringAppender.Reset();
 
     // ***
     log1.FatalFormat("a{0}", "1");
-    Assert.AreEqual("FATAL:a1", stringAppender.GetString(), "Test formatted FATAL event with 1 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:a1"), "Test formatted FATAL event with 1 parm");
     stringAppender.Reset();
 
     // ***
     log1.FatalFormat("a{0}b{1}", "1", "2");
-    Assert.AreEqual("FATAL:a1b2", stringAppender.GetString(), "Test formatted FATAL event with 2 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:a1b2"), "Test formatted FATAL event with 2 parm");
     stringAppender.Reset();
 
     // ***
     log1.FatalFormat("a{0}b{1}c{2}", "1", "2", "3");
-    Assert.AreEqual("FATAL:a1b2c3", stringAppender.GetString(), "Test formatted FATAL event with 3 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:a1b2c3"), "Test formatted FATAL event with 3 parm");
     stringAppender.Reset();
 
 
     // ***
     log1.FatalFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
-    Assert.AreEqual("FATAL:aQbWcEdReTf", stringAppender.GetString(), "Test formatted FATAL event with 5 parms (only 4 used)");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:aQbWcEdReTf"), "Test formatted FATAL event with 5 parms (only 4 used)");
     stringAppender.Reset();
 
     // ***
     log1.FatalFormat(null, "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("FATAL:Before Middle After End", stringAppender.GetString(), "Test formatting with null provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:Before Middle After End"), "Test formatting with null provider");
     stringAppender.Reset();
 
     // ***
     log1.FatalFormat(new CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("FATAL:Before Middle After End", stringAppender.GetString(), "Test formatting with 'en' provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:Before Middle After End"), "Test formatting with 'en' provider");
     stringAppender.Reset();
 
     // *** Nulls
     log1.Fatal(null);
-    Assert.AreEqual("FATAL:", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:"));
     stringAppender.Reset();
 
     log1.Fatal(null, new Exception("Exception message"));
-    Assert.AreEqual("FATAL:System.Exception: Exception message" + Environment.NewLine, stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:System.Exception: Exception message" + Environment.NewLine));
     stringAppender.Reset();
 
     log1.FatalFormat("One{0} null", null);
-    Assert.AreEqual("FATAL:One null", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:One null"));
     stringAppender.Reset();
 
     log1.FatalFormat("Two{0} nulls{1}", null, null);
-    Assert.AreEqual("FATAL:Two nulls", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:Two nulls"));
     stringAppender.Reset();
 
     log1.FatalFormat("Three{0} nulls{1} here{2}", null, null, null);
-    Assert.AreEqual("FATAL:Three nulls here", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:Three nulls here"));
     stringAppender.Reset();
 
     log1.FatalFormat("Four{0} nulls{1} this{2} time{3}", null, null, null, null);
-    Assert.AreEqual("FATAL:Four nulls this time", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:Four nulls this time"));
     stringAppender.Reset();
 
     object[]? args = null;
     log1.FatalFormat("Null param array", args);
-    Assert.AreEqual("FATAL:Null param array", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:Null param array"));
     stringAppender.Reset();
 
     // Degenerate case - null param array internally converts to an array of one null.
     log1.FatalFormat("Null param array with {0}", args);
-    Assert.AreEqual("FATAL:Null param array with ", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo("FATAL:Null param array with "));
     stringAppender.Reset();
   }
 
@@ -1021,83 +1021,83 @@ public class StringFormatTest
 
     // ***
     log1.Fatal("TestMessage");
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple FATAL event 1");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple FATAL event 1");
     stringAppender.Reset();
 
     // ***
     log1.Fatal("TestMessage", null);
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple FATAL event 2");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple FATAL event 2");
     stringAppender.Reset();
 
     // ***
     log1.Fatal("TestMessage", new Exception("Exception message"));
-    Assert.AreEqual("", stringAppender.GetString(), "Test simple FATAL event 3");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test simple FATAL event 3");
     stringAppender.Reset();
 
     // ***
     log1.FatalFormat("a{0}", "1");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted FATAL event with 1 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted FATAL event with 1 parm");
     stringAppender.Reset();
 
     // ***
     log1.FatalFormat("a{0}b{1}", "1", "2");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted FATAL event with 2 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted FATAL event with 2 parm");
     stringAppender.Reset();
 
     // ***
     log1.FatalFormat("a{0}b{1}c{2}", "1", "2", "3");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted FATAL event with 3 parm");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted FATAL event with 3 parm");
     stringAppender.Reset();
 
 
     // ***
     log1.FatalFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatted FATAL event with 5 parms (only 4 used)");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatted FATAL event with 5 parms (only 4 used)");
     stringAppender.Reset();
 
     // ***
     log1.FatalFormat(null, "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatting with null provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatting with null provider");
     stringAppender.Reset();
 
     // ***
     log1.FatalFormat(new CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
-    Assert.AreEqual("", stringAppender.GetString(), "Test formatting with 'en' provider");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""), "Test formatting with 'en' provider");
     stringAppender.Reset();
 
     // *** Nulls
     log1.Fatal(null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.Fatal(null, new Exception("Exception message"));
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.FatalFormat("One{0} null", null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.FatalFormat("Two{0} nulls{1}", null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.FatalFormat("Three{0} nulls{1} here{2}", null, null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     log1.FatalFormat("Four{0} nulls{1} this{2} time{3}", null, null, null, null);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     object[]? args = null;
     log1.FatalFormat("Null param array", args);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
 
     // Degenerate case - null param array internally converts to an array of one null.
     log1.FatalFormat("Null param array with {0}", args);
-    Assert.AreEqual("", stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(""));
     stringAppender.Reset();
   }
 }
diff --git a/src/log4net.Tests/DateFormatter/AbsoluteTimeDateFormatterTest.cs b/src/log4net.Tests/DateFormatter/AbsoluteTimeDateFormatterTest.cs
index 4e98ca4b..64250cd5 100644
--- a/src/log4net.Tests/DateFormatter/AbsoluteTimeDateFormatterTest.cs
+++ b/src/log4net.Tests/DateFormatter/AbsoluteTimeDateFormatterTest.cs
@@ -44,7 +44,7 @@ public class AbsoluteTimeDateFormatterTest
     DateTime dt = DateTime.Now;
     f1.FormatDate(dt, sw);
     f2.FormatDate(dt, sw);
-    Assert.AreEqual(1, FormatterOne.Invocations);
+    Assert.That(FormatterOne.Invocations, Is.EqualTo(1));
   }
 
   [Test]
@@ -57,7 +57,7 @@ public class AbsoluteTimeDateFormatterTest
     DateTime dt2 = dt1.AddMilliseconds(600);
     f1.FormatDate(dt1, sw);
     f2.FormatDate(dt2, sw);
-    Assert.AreEqual(1, FormatterOne.Invocations);
+    Assert.That(FormatterOne.Invocations, Is.EqualTo(1));
   }
 
   [Test]
@@ -70,7 +70,7 @@ public class AbsoluteTimeDateFormatterTest
     DateTime dt2 = dt1.AddMilliseconds(1100);
     f1.FormatDate(dt1, sw);
     f2.FormatDate(dt2, sw);
-    Assert.AreEqual(2, FormatterOne.Invocations);
+    Assert.That(FormatterOne.Invocations, Is.EqualTo(2));
   }
 
   [Test]
@@ -82,7 +82,7 @@ public class AbsoluteTimeDateFormatterTest
     DateTime dt1 = DateTime.Today.AddMinutes(10);
     f1.FormatDate(dt1, sw);
     f2.FormatDate(dt1, sw);
-    Assert.AreEqual(2, FormatterOne.Invocations);
+    Assert.That(FormatterOne.Invocations, Is.EqualTo(2));
   }
 
   [Test]
@@ -94,12 +94,12 @@ public class AbsoluteTimeDateFormatterTest
 
     // Tests for prepended 0 characters for 2-digit and 3-digit portions.
     formatter.FormatDate(new DateTime(1970, 1, 1, 1, 1, 1).AddMilliseconds(1), writer);
-    Assert.AreEqual("01:01:01,001", sb.ToString());
+    Assert.That(sb.ToString(), Is.EqualTo("01:01:01,001"));
     sb.Clear();
 
     // Non-zero-prepend case.
     formatter.FormatDate(new DateTime(2100, 12, 30, 11, 59, 59).AddMilliseconds(100), writer);
-    Assert.AreEqual("11:59:59,100", sb.ToString());
+    Assert.That(sb.ToString(), Is.EqualTo("11:59:59,100"));
     sb.Clear();
   }
 }
diff --git a/src/log4net.Tests/DateFormatter/DateTimeDateFormatterTest.cs b/src/log4net.Tests/DateFormatter/DateTimeDateFormatterTest.cs
index 88b63bc8..ce415936 100644
--- a/src/log4net.Tests/DateFormatter/DateTimeDateFormatterTest.cs
+++ b/src/log4net.Tests/DateFormatter/DateTimeDateFormatterTest.cs
@@ -38,13 +38,13 @@ public class DateTimeDateFormatterTest
     // Tests for prepended 0 characters for 2-digit and 3-digit portions.
     var formatter = new DateTimeDateFormatter();
     formatter.FormatDate(new DateTime(1970, 1, 1, 1, 1, 1).AddMilliseconds(1), writer);
-    Assert.AreEqual("01 Jan 1970 01:01:01,001", sb.ToString());
+    Assert.That(sb.ToString(), Is.EqualTo("01 Jan 1970 01:01:01,001"));
     sb.Clear();
 
     // Non-zero-prepend case.
     var formatter2 = new DifferentTypeNameDateTimeDateFormatter();
     formatter2.FormatDate(new DateTime(2100, 12, 30, 11, 59, 59).AddMilliseconds(100), writer);
-    Assert.AreEqual("30 Dec 2100 11:59:59,100", sb.ToString());
+    Assert.That(sb.ToString(), Is.EqualTo("30 Dec 2100 11:59:59,100"));
     sb.Clear();
   }
 
diff --git a/src/log4net.Tests/Filter/FilterTest.cs b/src/log4net.Tests/Filter/FilterTest.cs
index 651a9d8d..b35b703a 100644
--- a/src/log4net.Tests/Filter/FilterTest.cs
+++ b/src/log4net.Tests/Filter/FilterTest.cs
@@ -62,23 +62,20 @@ public class FilterTest
     XmlConfigurator.Configure(rep, log4NetConfig["log4net"]!);
 
     IAppender[] appenders = LogManager.GetRepository(rep.Name).GetAppenders();
-    Assert.IsTrue(appenders.Length == 1);
+    Assert.That(appenders, Has.Length.EqualTo(1));
 
-    IAppender? appender = Array.Find(appenders, (IAppender a) =>
-    {
-      return a.Name == "MemoryAppender";
-    });
-    Assert.IsNotNull(appender);
+    IAppender? appender = Array.Find(appenders, (IAppender a) => a.Name == "MemoryAppender");
+    Assert.That(appender, Is.Not.Null);
 
     MultiplePropertyFilter? multiplePropertyFilter =
         ((AppenderSkeleton)appender!).FilterHead as MultiplePropertyFilter;
-    Assert.IsNotNull(multiplePropertyFilter);
+    Assert.That(multiplePropertyFilter, Is.Not.Null);
     MultiplePropertyFilter.Condition[] conditions = multiplePropertyFilter!.GetConditions();
-    Assert.AreEqual(2, conditions.Length);
-    Assert.AreEqual("ABC", conditions[0].Key);
-    Assert.AreEqual("123", conditions[0].StringToMatch);
-    Assert.AreEqual("DEF", conditions[1].Key);
-    Assert.AreEqual("456", conditions[1].StringToMatch);
+    Assert.That(conditions, Has.Length.EqualTo(2));
+    Assert.That(conditions[0].Key, Is.EqualTo("ABC"));
+    Assert.That(conditions[0].StringToMatch, Is.EqualTo("123"));
+    Assert.That(conditions[1].Key, Is.EqualTo("DEF"));
+    Assert.That(conditions[1].StringToMatch, Is.EqualTo("456"));
   }
 }
 
@@ -86,20 +83,11 @@ public class MultiplePropertyFilter : FilterSkeleton
 {
   private readonly List<Condition> _conditions = new();
 
-  public override FilterDecision Decide(LoggingEvent loggingEvent)
-  {
-    return FilterDecision.Accept;
-  }
+  public override FilterDecision Decide(LoggingEvent loggingEvent) => FilterDecision.Accept;
 
-  public Condition[] GetConditions()
-  {
-    return _conditions.ToArray();
-  }
+  public Condition[] GetConditions() => _conditions.ToArray();
 
-  public void AddCondition(Condition condition)
-  {
-    _conditions.Add(condition);
-  }
+  public void AddCondition(Condition condition) => _conditions.Add(condition);
 
   public class Condition
   {
diff --git a/src/log4net.Tests/Hierarchy/HierarchyTest.cs b/src/log4net.Tests/Hierarchy/HierarchyTest.cs
index a2dbf285..b0d4d8ee 100644
--- a/src/log4net.Tests/Hierarchy/HierarchyTest.cs
+++ b/src/log4net.Tests/Hierarchy/HierarchyTest.cs
@@ -55,8 +55,8 @@ public class HierarchyTest
     ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
     XmlConfigurator.Configure(rep, log4NetConfig["log4net"]!);
 
-    Assert.AreEqual("4", rep.Properties["two-plus-two"]);
-    Assert.IsNull(rep.Properties["one-plus-one"]);
+    Assert.That(rep.Properties["two-plus-two"], Is.EqualTo("4"));
+    Assert.That(rep.Properties["one-plus-one"], Is.Null);
   }
 
   [Test]
@@ -65,8 +65,7 @@ public class HierarchyTest
     CountingAppender alpha = new();
     CountingAppender beta = new();
 
-    Repository.Hierarchy.Hierarchy hierarchy =
-        (Repository.Hierarchy.Hierarchy)LogManager.GetRepository();
+    Repository.Hierarchy.Hierarchy hierarchy = (Repository.Hierarchy.Hierarchy)LogManager.GetRepository();
 
     hierarchy.Root.AddAppender(alpha);
     hierarchy.Root.AddAppender(beta);
@@ -75,8 +74,8 @@ public class HierarchyTest
     ILog log = LogManager.GetLogger(GetType());
     log.Debug("Hello World");
 
-    Assert.AreEqual(1, alpha.Counter);
-    Assert.AreEqual(1, beta.Counter);
+    Assert.That(alpha.Counter, Is.EqualTo(1));
+    Assert.That(beta.Counter, Is.EqualTo(1));
   }
 
   [Test]
@@ -90,8 +89,8 @@ public class HierarchyTest
     ILog log = LogManager.GetLogger(GetType());
     log.Debug("Hello World");
 
-    Assert.AreEqual(1, alpha.Counter);
-    Assert.AreEqual(1, beta.Counter);
+    Assert.That(alpha.Counter, Is.EqualTo(1));
+    Assert.That(beta.Counter, Is.EqualTo(1));
   }
 
   [Test]
@@ -182,8 +181,8 @@ public class HierarchyTest
 
     ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
     XmlConfigurator.Configure(rep, log4NetConfig["log4net"]!);
-    Assert.AreEqual("A.B.C", rep.GetLogger("A.B.C").Name);
-    Assert.AreEqual("A.B", rep.GetLogger("A.B").Name);
+    Assert.That(rep.GetLogger("A.B.C").Name, Is.EqualTo("A.B.C"));
+    Assert.That(rep.GetLogger("A.B").Name, Is.EqualTo("A.B"));
   }
 
   /// <summary>
@@ -208,6 +207,6 @@ public class HierarchyTest
     ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
     XmlConfigurator.Configure(rep, log4NetConfig["log4net"]!);
 
-    Parallel.For(0, 100, i => Assert.AreEqual($"A.{i}", rep.GetLogger($"A.{i}").Name));
+    Parallel.For(0, 100, i => Assert.That(rep.GetLogger($"A.{i}").Name, Is.EqualTo($"A.{i}")));
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Hierarchy/LoggerTest.cs b/src/log4net.Tests/Hierarchy/LoggerTest.cs
index 4a730f09..dd10b463 100644
--- a/src/log4net.Tests/Hierarchy/LoggerTest.cs
+++ b/src/log4net.Tests/Hierarchy/LoggerTest.cs
@@ -40,7 +40,7 @@ public sealed class LoggerTest
   private Logger? _log;
 
   // A short message.
-  private static string _msg = "M";
+  private const string TestLogMessage = "M";
 
   /// <summary>
   /// Any steps that happen after each test go here
@@ -61,16 +61,16 @@ public sealed class LoggerTest
   public void TestAppender1()
   {
     _log = (Logger)LogManager.GetLogger("test").Logger;
-    var a1 = new CountingAppender { Name = "testAppender1" };
+    CountingAppender a1 = new() { Name = "testAppender1" };
     _log.AddAppender(a1);
 
     IEnumerator enumAppenders = ((IEnumerable)_log.Appenders).GetEnumerator();
     try
     {
-      Assert.IsTrue(enumAppenders.MoveNext());
-      var aHat = (CountingAppender?)enumAppenders.Current;
-      Assert.IsNotNull(aHat);
-      Assert.AreEqual(a1, aHat);
+      Assert.That(enumAppenders.MoveNext());
+      CountingAppender? aHat = (CountingAppender?)enumAppenders.Current;
+      Assert.That(aHat, Is.Not.Null);
+      Assert.That(aHat, Is.EqualTo(a1));
     }
     finally
     {
@@ -88,34 +88,34 @@ public sealed class LoggerTest
   [Test]
   public void TestAppender2()
   {
-    var a1 = new CountingAppender { Name = "testAppender2.1" };
-    var a2 = new CountingAppender { Name = "testAppender2.2" };
+    CountingAppender a1 = new() { Name = "testAppender2.1" };
+    CountingAppender a2 = new() { Name = "testAppender2.2" };
 
     _log = (Logger)LogManager.GetLogger("test").Logger;
     _log.AddAppender(a1);
     _log.AddAppender(a2);
-    Assert.AreEqual(2, _log.Appenders.Count);
+    Assert.That(_log.Appenders, Has.Count.EqualTo(2));
 
-    var aHat = (CountingAppender?)_log.GetAppender(a1.Name);
-    Assert.AreEqual(a1, aHat);
+    CountingAppender? aHat = (CountingAppender?)_log.GetAppender(a1.Name);
+    Assert.That(aHat, Is.EqualTo(a1));
 
     aHat = (CountingAppender?)_log.GetAppender(a2.Name);
-    Assert.IsNotNull(aHat);
-    Assert.AreEqual(a2, aHat);
+    Assert.That(aHat, Is.Not.Null);
+    Assert.That(aHat, Is.EqualTo(a2));
 
     // By name.
     IAppender? removedAppender = _log.RemoveAppender("testAppender2.1");
-    Assert.AreSame(a1, removedAppender);
-    Assert.AreEqual(1, _log.Appenders.Count);
+    Assert.That(removedAppender, Is.SameAs(a1));
+    Assert.That(_log.Appenders, Has.Count.EqualTo(1));
 
     IEnumerator enumAppenders = ((IEnumerable)_log.Appenders).GetEnumerator();
     try
     {
-      Assert.IsTrue(enumAppenders.MoveNext());
+      Assert.That(enumAppenders.MoveNext());
       aHat = (CountingAppender?)enumAppenders.Current;
-      Assert.IsNotNull(aHat);
-      Assert.AreSame(a2, aHat);
-      Assert.IsFalse(enumAppenders.MoveNext());
+      Assert.That(aHat, Is.Not.Null);
+      Assert.That(aHat, Is.SameAs(a2));
+      Assert.That(enumAppenders.MoveNext(), Is.False);
     }
     finally
     {
@@ -126,18 +126,18 @@ public sealed class LoggerTest
     }
 
     aHat = (CountingAppender?)_log.GetAppender(a2.Name);
-    Assert.IsNotNull(aHat);
-    Assert.AreSame(a2, aHat);
+    Assert.That(aHat, Is.Not.Null);
+    Assert.That(aHat, Is.SameAs(a2));
 
     // By appender.
     removedAppender = _log.RemoveAppender(a2);
-    Assert.AreSame(a2, removedAppender);
-    Assert.AreEqual(0, _log.Appenders.Count);
+    Assert.That(removedAppender, Is.SameAs(a2));
+    Assert.That(_log.Appenders, Is.Empty);
 
     enumAppenders = ((IEnumerable)_log.Appenders).GetEnumerator();
     try
     {
-      Assert.IsFalse(enumAppenders.MoveNext());
+      Assert.That(enumAppenders.MoveNext(), Is.False);
     }
     finally
     {
@@ -156,21 +156,21 @@ public sealed class LoggerTest
   {
     Logger a = (Logger)LogManager.GetLogger("a").Logger;
     Logger ab = (Logger)LogManager.GetLogger("a.b").Logger;
-    var ca = new CountingAppender();
+    CountingAppender ca = new();
 
     a.AddAppender(ca);
-    Assert.IsNotNull(a.Repository);
-    a.Repository!.Configured = true;
-
-    Assert.AreEqual(0, ca.Counter);
-    ab.Log(Level.Debug, _msg, null);
-    Assert.AreEqual(1, ca.Counter);
-    ab.Log(Level.Info, _msg, null);
-    Assert.AreEqual(2, ca.Counter);
-    ab.Log(Level.Warn, _msg, null);
-    Assert.AreEqual(3, ca.Counter);
-    ab.Log(Level.Error, _msg, null);
-    Assert.AreEqual(4, ca.Counter);
+    Assert.That(a.Repository, Is.Not.Null);
+    a.Repository.Configured = true;
+
+    Assert.That(ca.Counter, Is.EqualTo(0));
+    ab.Log(Level.Debug, TestLogMessage, null);
+    Assert.That(ca.Counter, Is.EqualTo(1));
+    ab.Log(Level.Info, TestLogMessage, null);
+    Assert.That(ca.Counter, Is.EqualTo(2));
+    ab.Log(Level.Warn, TestLogMessage, null);
+    Assert.That(ca.Counter, Is.EqualTo(3));
+    ab.Log(Level.Error, TestLogMessage, null);
+    Assert.That(ca.Counter, Is.EqualTo(4));
   }
 
   /// <summary>
@@ -184,28 +184,28 @@ public sealed class LoggerTest
     Logger abc = (Logger)LogManager.GetLogger("a.b.c").Logger;
     Logger x = (Logger)LogManager.GetLogger("x").Logger;
 
-    var ca1 = new CountingAppender();
-    var ca2 = new CountingAppender();
+    CountingAppender ca1 = new();
+    CountingAppender ca2 = new();
 
     a.AddAppender(ca1);
     abc.AddAppender(ca2);
-    Assert.IsNotNull(a.Repository);
-    a.Repository!.Configured = true;
+    Assert.That(a.Repository, Is.Not.Null);
+    a.Repository.Configured = true;
 
-    Assert.AreEqual(0, ca1.Counter);
-    Assert.AreEqual(0, ca2.Counter);
+    Assert.That(ca1.Counter, Is.EqualTo(0));
+    Assert.That(ca2.Counter, Is.EqualTo(0));
 
-    ab.Log(Level.Debug, _msg, null);
-    Assert.AreEqual(1, ca1.Counter);
-    Assert.AreEqual(0, ca2.Counter);
+    ab.Log(Level.Debug, TestLogMessage, null);
+    Assert.That(ca1.Counter, Is.EqualTo(1));
+    Assert.That(ca2.Counter, Is.EqualTo(0));
 
-    abc.Log(Level.Debug, _msg, null);
-    Assert.AreEqual(2, ca1.Counter);
-    Assert.AreEqual(1, ca2.Counter);
+    abc.Log(Level.Debug, TestLogMessage, null);
+    Assert.That(ca1.Counter, Is.EqualTo(2));
+    Assert.That(ca2.Counter, Is.EqualTo(1));
 
-    x.Log(Level.Debug, _msg, null);
-    Assert.AreEqual(2, ca1.Counter);
-    Assert.AreEqual(1, ca2.Counter);
+    x.Log(Level.Debug, TestLogMessage, null);
+    Assert.That(ca1.Counter, Is.EqualTo(2));
+    Assert.That(ca2.Counter, Is.EqualTo(1));
   }
 
   /// <summary>
@@ -219,36 +219,36 @@ public sealed class LoggerTest
     Logger ab = (Logger)LogManager.GetLogger("a.b").Logger;
     Logger abc = (Logger)LogManager.GetLogger("a.b.c").Logger;
 
-    var caRoot = new CountingAppender();
-    var caA = new CountingAppender();
-    var caAbc = new CountingAppender();
+    CountingAppender caRoot = new();
+    CountingAppender caA = new();
+    CountingAppender caAbc = new();
 
     root.AddAppender(caRoot);
     a.AddAppender(caA);
     abc.AddAppender(caAbc);
-    Assert.IsNotNull(a.Repository);
-    a.Repository!.Configured = true;
+    Assert.That(a.Repository, Is.Not.Null);
+    a.Repository.Configured = true;
 
-    Assert.AreEqual(0, caRoot.Counter);
-    Assert.AreEqual(0, caA.Counter);
-    Assert.AreEqual(0, caAbc.Counter);
+    Assert.That(caRoot.Counter, Is.EqualTo(0));
+    Assert.That(caA.Counter, Is.EqualTo(0));
+    Assert.That(caAbc.Counter, Is.EqualTo(0));
 
     ab.Additivity = false;
 
-    a.Log(Level.Debug, _msg, null);
-    Assert.AreEqual(1, caRoot.Counter);
-    Assert.AreEqual(1, caA.Counter);
-    Assert.AreEqual(0, caAbc.Counter);
+    a.Log(Level.Debug, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(1));
+    Assert.That(caA.Counter, Is.EqualTo(1));
+    Assert.That(caAbc.Counter, Is.EqualTo(0));
 
-    ab.Log(Level.Debug, _msg, null);
-    Assert.AreEqual(1, caRoot.Counter);
-    Assert.AreEqual(1, caA.Counter);
-    Assert.AreEqual(0, caAbc.Counter);
+    ab.Log(Level.Debug, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(1));
+    Assert.That(caA.Counter, Is.EqualTo(1));
+    Assert.That(caAbc.Counter, Is.EqualTo(0));
 
-    abc.Log(Level.Debug, _msg, null);
-    Assert.AreEqual(1, caRoot.Counter);
-    Assert.AreEqual(1, caA.Counter);
-    Assert.AreEqual(1, caAbc.Counter);
+    abc.Log(Level.Debug, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(1));
+    Assert.That(caA.Counter, Is.EqualTo(1));
+    Assert.That(caAbc.Counter, Is.EqualTo(1));
   }
 
   /// <summary>
@@ -257,50 +257,50 @@ public sealed class LoggerTest
   [Test]
   public void TestDisable1()
   {
-    var caRoot = new CountingAppender();
+    CountingAppender caRoot = new();
     Logger root = ((Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root;
     root.AddAppender(caRoot);
 
-    Repository.Hierarchy.Hierarchy h = ((Repository.Hierarchy.Hierarchy)LogManager.GetRepository());
+    Repository.Hierarchy.Hierarchy h = (Repository.Hierarchy.Hierarchy)LogManager.GetRepository();
     h.Threshold = Level.Info;
     h.Configured = true;
 
-    Assert.AreEqual(0, caRoot.Counter);
+    Assert.That(caRoot.Counter, Is.EqualTo(0));
 
-    root.Log(Level.Debug, _msg, null);
-    Assert.AreEqual(0, caRoot.Counter);
-    root.Log(Level.Info, _msg, null);
-    Assert.AreEqual(1, caRoot.Counter);
-    root.Log(Level.Warn, _msg, null);
-    Assert.AreEqual(2, caRoot.Counter);
-    root.Log(Level.Warn, _msg, null);
-    Assert.AreEqual(3, caRoot.Counter);
+    root.Log(Level.Debug, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(0));
+    root.Log(Level.Info, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(1));
+    root.Log(Level.Warn, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(2));
+    root.Log(Level.Warn, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(3));
 
     h.Threshold = Level.Warn;
-    root.Log(Level.Debug, _msg, null);
-    Assert.AreEqual(3, caRoot.Counter);
-    root.Log(Level.Info, _msg, null);
-    Assert.AreEqual(3, caRoot.Counter);
-    root.Log(Level.Warn, _msg, null);
-    Assert.AreEqual(4, caRoot.Counter);
-    root.Log(Level.Error, _msg, null);
-    Assert.AreEqual(5, caRoot.Counter);
-    root.Log(Level.Error, _msg, null);
-    Assert.AreEqual(6, caRoot.Counter);
+    root.Log(Level.Debug, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(3));
+    root.Log(Level.Info, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(3));
+    root.Log(Level.Warn, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(4));
+    root.Log(Level.Error, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(5));
+    root.Log(Level.Error, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(6));
 
     h.Threshold = Level.Off;
-    root.Log(Level.Debug, _msg, null);
-    Assert.AreEqual(6, caRoot.Counter);
-    root.Log(Level.Info, _msg, null);
-    Assert.AreEqual(6, caRoot.Counter);
-    root.Log(Level.Warn, _msg, null);
-    Assert.AreEqual(6, caRoot.Counter);
-    root.Log(Level.Error, _msg, null);
-    Assert.AreEqual(6, caRoot.Counter);
-    root.Log(Level.Fatal, _msg, null);
-    Assert.AreEqual(6, caRoot.Counter);
-    root.Log(Level.Fatal, _msg, null);
-    Assert.AreEqual(6, caRoot.Counter);
+    root.Log(Level.Debug, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(6));
+    root.Log(Level.Info, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(6));
+    root.Log(Level.Warn, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(6));
+    root.Log(Level.Error, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(6));
+    root.Log(Level.Fatal, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(6));
+    root.Log(Level.Fatal, TestLogMessage, null);
+    Assert.That(caRoot.Counter, Is.EqualTo(6));
   }
 
   /// <summary>
@@ -310,20 +310,20 @@ public sealed class LoggerTest
   public void TestExists()
   {
     ILog a = LogManager.GetLogger("a");
-    Assert.IsNotNull(a);
+    Assert.That(a, Is.Not.Null);
     ILog aB = LogManager.GetLogger("a.b");
-    Assert.IsNotNull(aB);
+    Assert.That(aB, Is.Not.Null);
     ILog aBc = LogManager.GetLogger("a.b.c");
-    Assert.IsNotNull(aBc);
+    Assert.That(aBc, Is.Not.Null);
 
     ILog? t = LogManager.Exists("xx");
-    Assert.IsNull(t);
+    Assert.That(t, Is.Null);
     t = LogManager.Exists("a");
-    Assert.AreSame(a, t);
+    Assert.That(t, Is.SameAs(a));
     t = LogManager.Exists("a.b");
-    Assert.AreSame(aB, t);
+    Assert.That(t, Is.SameAs(aB));
     t = LogManager.Exists("a.b.c");
-    Assert.AreSame(aBc, t);
+    Assert.That(t, Is.SameAs(aBc));
   }
 
   /// <summary>
@@ -332,20 +332,14 @@ public sealed class LoggerTest
   [Test]
   public void TestHierarchy1()
   {
-    var h = new Repository.Hierarchy.Hierarchy
-    {
-      Root =
-      {
-        Level = Level.Error
-      }
-    };
+    Repository.Hierarchy.Hierarchy h = new() { Root = { Level = Level.Error } };
 
     Logger a0 = (Logger)h.GetLogger("a");
-    Assert.AreEqual("a", a0.Name);
-    Assert.IsNull(a0.Level);
-    Assert.AreSame(Level.Error, a0.EffectiveLevel);
+    Assert.That(a0.Name, Is.EqualTo("a"));
+    Assert.That(a0.Level, Is.Null);
+    Assert.That(a0.EffectiveLevel, Is.SameAs(Level.Error));
 
     Logger a1 = (Logger)h.GetLogger("a");
-    Assert.AreSame(a0, a1);
+    Assert.That(a1, Is.SameAs(a0));
   }
 }
diff --git a/src/log4net.Tests/Hierarchy/XmlHierarchyConfiguratorTest.cs b/src/log4net.Tests/Hierarchy/XmlHierarchyConfiguratorTest.cs
index ad839b2a..13b31f29 100644
--- a/src/log4net.Tests/Hierarchy/XmlHierarchyConfiguratorTest.cs
+++ b/src/log4net.Tests/Hierarchy/XmlHierarchyConfiguratorTest.cs
@@ -35,16 +35,16 @@ public class XmlHierarchyConfiguratorTest
   [Platform(Include="Win")]
   public void EnvironmentOnWindowsIsCaseInsensitive()
   {
-    SetTestPropWithPath();      
-    Assert.AreNotEqual("Path=", TestProp);
+    SetTestPropWithPath();
+    Assert.That(TestProp, Is.Not.EqualTo("Path="));
   }
 
   [Test]
   [Platform(Include="Unix")]
   public void EnvironmentOnUnixIsCaseSensitive()
   {
-    SetTestPropWithPath();      
-    Assert.AreEqual("Path=", TestProp);
+    SetTestPropWithPath();
+    Assert.That(TestProp, Is.EqualTo("Path="));
   }
 
   private void SetTestPropWithPath()
diff --git a/src/log4net.Tests/Layout/PatternLayoutTest.cs b/src/log4net.Tests/Layout/PatternLayoutTest.cs
index db95bb4e..b6522b75 100644
--- a/src/log4net.Tests/Layout/PatternLayoutTest.cs
+++ b/src/log4net.Tests/Layout/PatternLayoutTest.cs
@@ -86,19 +86,19 @@ public class PatternLayoutTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestThreadProperiesPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no thread properties value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test no thread properties value set");
     stringAppender.Reset();
 
     ThreadContext.Properties[Utils.PropertyKey] = "val1";
 
     log1.Info("TestMessage");
-    Assert.AreEqual("val1", stringAppender.GetString(), "Test thread properties value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("val1"), "Test thread properties value set");
     stringAppender.Reset();
 
     ThreadContext.Properties.Remove(Utils.PropertyKey);
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test thread properties value removed");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test thread properties value removed");
     stringAppender.Reset();
   }
 
@@ -116,7 +116,7 @@ public class PatternLayoutTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestStackTracePattern");
 
     log1.Info("TestMessage");
-    StringAssert.EndsWith("PatternLayoutTest.TestStackTracePattern", stringAppender.GetString(), "stack trace value set");
+    Assert.That(stringAppender.GetString(), Does.EndWith("PatternLayoutTest.TestStackTracePattern"), "stack trace value set");
     stringAppender.Reset();
   }
 
@@ -134,19 +134,19 @@ public class PatternLayoutTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestGlobalProperiesPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test no global properties value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test no global properties value set");
     stringAppender.Reset();
 
     GlobalContext.Properties[Utils.PropertyKey] = "val1";
 
     log1.Info("TestMessage");
-    Assert.AreEqual("val1", stringAppender.GetString(), "Test global properties value set");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("val1"), "Test global properties value set");
     stringAppender.Reset();
 
     GlobalContext.Properties.Remove(Utils.PropertyKey);
 
     log1.Info("TestMessage");
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString(), "Test global properties value removed");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText), "Test global properties value removed");
     stringAppender.Reset();
   }
 
@@ -168,7 +168,7 @@ public class PatternLayoutTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestAddingCustomPattern");
 
     log1.Info("TestMessage");
-    Assert.AreEqual("TestMessage", stringAppender.GetString(), "%TestAddingCustomPattern not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("TestMessage"), "%TestAddingCustomPattern not registered");
     stringAppender.Reset();
   }
 
@@ -186,36 +186,36 @@ public class PatternLayoutTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestAddingCustomPattern");
 
     log1.Info("NoDots");
-    Assert.AreEqual("NoDots", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("NoDots"), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info("One.Dot");
-    Assert.AreEqual("One.Dot", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("One.Dot"), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info("Tw.o.Dots");
-    Assert.AreEqual("Tw.o.Dots", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("Tw.o.Dots"), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info("TrailingDot.");
-    Assert.AreEqual("TrailingDot.", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("TrailingDot."), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info(".LeadingDot");
-    Assert.AreEqual(".LeadingDot", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(".LeadingDot"), "%message-as-name not registered");
     stringAppender.Reset();
 
     // empty string and other evil combinations as tests for of-by-one mistakes in index calculations
     log1.Info(string.Empty);
-    Assert.AreEqual(string.Empty, stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(string.Empty), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info(".");
-    Assert.AreEqual(".", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("."), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info("x");
-    Assert.AreEqual("x", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("x"), "%message-as-name not registered");
     stringAppender.Reset();
   }
 
@@ -233,36 +233,36 @@ public class PatternLayoutTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestAddingCustomPattern");
 
     log1.Info("NoDots");
-    Assert.AreEqual("NoDots", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("NoDots"), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info("One.Dot");
-    Assert.AreEqual("Dot", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("Dot"), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info("Tw.o.Dots");
-    Assert.AreEqual("Dots", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("Dots"), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info("TrailingDot.");
-    Assert.AreEqual("TrailingDot.", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("TrailingDot."), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info(".LeadingDot");
-    Assert.AreEqual("LeadingDot", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("LeadingDot"), "%message-as-name not registered");
     stringAppender.Reset();
 
     // empty string and other evil combinations as tests for of-by-one mistakes in index calculations
     log1.Info(string.Empty);
-    Assert.AreEqual(string.Empty, stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(string.Empty), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info("x");
-    Assert.AreEqual("x", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("x"), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info(".");
-    Assert.AreEqual(".", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("."), "%message-as-name not registered");
     stringAppender.Reset();
   }
 
@@ -280,36 +280,36 @@ public class PatternLayoutTest
     ILog log1 = LogManager.GetLogger(rep.Name, "TestAddingCustomPattern");
 
     log1.Info("NoDots");
-    Assert.AreEqual("NoDots", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("NoDots"), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info("One.Dot");
-    Assert.AreEqual("One.Dot", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("One.Dot"), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info("Tw.o.Dots");
-    Assert.AreEqual("o.Dots", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("o.Dots"), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info("TrailingDot.");
-    Assert.AreEqual("TrailingDot.", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("TrailingDot."), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info(".LeadingDot");
-    Assert.AreEqual("LeadingDot", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("LeadingDot"), "%message-as-name not registered");
     stringAppender.Reset();
 
     // empty string and other evil combinations as tests for of-by-one mistakes in index calculations
     log1.Info(string.Empty);
-    Assert.AreEqual(string.Empty, stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo(string.Empty), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info("x");
-    Assert.AreEqual("x", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("x"), "%message-as-name not registered");
     stringAppender.Reset();
 
     log1.Info(".");
-    Assert.AreEqual(".", stringAppender.GetString(), "%message-as-name not registered");
+    Assert.That(stringAppender.GetString(), Is.EqualTo("."), "%message-as-name not registered");
     stringAppender.Reset();
   }
 
@@ -345,7 +345,7 @@ public class PatternLayoutTest
     Exception exception = new("Oh no!");
     log1.Info("TestMessage", exception);
 
-    Assert.AreEqual(SystemInfo.NullText, stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(SystemInfo.NullText));
 
     stringAppender.Reset();
   }
diff --git a/src/log4net.Tests/Layout/XmlLayoutTest.cs b/src/log4net.Tests/Layout/XmlLayoutTest.cs
index 58caa2dd..2bebff11 100644
--- a/src/log4net.Tests/Layout/XmlLayoutTest.cs
+++ b/src/log4net.Tests/Layout/XmlLayoutTest.cs
@@ -113,7 +113,7 @@ public sealed class XmlLayoutTest
 
     string expected = CreateEventNode("Test message");
 
-    Assert.AreEqual(expected, writer.ToString());
+    Assert.That(writer.ToString(), Is.EqualTo(expected));
   }
 
   [Test]
@@ -129,7 +129,7 @@ public sealed class XmlLayoutTest
 
     string expected = CreateEventNode("This is a masked char-&gt;?");
 
-    Assert.AreEqual(expected, writer.ToString());
+    Assert.That(writer.ToString(), Is.EqualTo(expected));
   }
 
   [Test]
@@ -146,7 +146,7 @@ public sealed class XmlLayoutTest
 
     string expected = CreateEventNode("<![CDATA[&&&&&&&Escape this ]]>]]<![CDATA[>. End here.]]>");
 
-    Assert.AreEqual(expected, writer.ToString());
+    Assert.That(writer.ToString(), Is.EqualTo(expected));
   }
 
   [Test]
@@ -163,7 +163,7 @@ public sealed class XmlLayoutTest
 
     string expected = CreateEventNode("<![CDATA[&&&&&&&Escape the end ]]>]]&gt;");
 
-    Assert.AreEqual(expected, writer.ToString());
+    Assert.That(writer.ToString(), Is.EqualTo(expected));
   }
 
   [Test]
@@ -180,7 +180,7 @@ public sealed class XmlLayoutTest
 
     string expected = CreateEventNode("<![CDATA[]]>]]<![CDATA[>&&&&&&&Escape the begining]]>");
 
-    Assert.AreEqual(expected, writer.ToString());
+    Assert.That(writer.ToString(), Is.EqualTo(expected));
   }
 
   [Test]
@@ -195,7 +195,7 @@ public sealed class XmlLayoutTest
 
     string expected = CreateEventNode("VGVzdCBtZXNzYWdl");
 
-    Assert.AreEqual(expected, writer.ToString());
+    Assert.That(writer.ToString(), Is.EqualTo(expected));
   }
 
   [Test]
@@ -215,7 +215,7 @@ public sealed class XmlLayoutTest
 
     string expected = CreateEventNode("Property1", "prop1");
 
-    Assert.AreEqual(expected, stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(expected));
   }
 
   [Test]
@@ -235,7 +235,7 @@ public sealed class XmlLayoutTest
 
     string expected = CreateEventNode("Property1", "cHJvcDE=");
 
-    Assert.AreEqual(expected, stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(expected));
   }
 
   [Test]
@@ -255,7 +255,7 @@ public sealed class XmlLayoutTest
 
     string expected = CreateEventNode("Property1", "prop1 &quot;quoted&quot;");
 
-    Assert.AreEqual(expected, stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(expected));
   }
 
   [Test]
@@ -275,7 +275,7 @@ public sealed class XmlLayoutTest
 
     string expected = CreateEventNode("Property1", "mask this -&gt;?");
 
-    Assert.AreEqual(expected, stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(expected));
   }
 
   [Test]
@@ -295,7 +295,7 @@ public sealed class XmlLayoutTest
 
     string expected = CreateEventNode("Property?", "mask this -&gt;?");
 
-    Assert.AreEqual(expected, stringAppender.GetString());
+    Assert.That(stringAppender.GetString(), Is.EqualTo(expected));
   }
 
   [Test]
@@ -363,12 +363,12 @@ public sealed class XmlLayoutTest
     var sub = log.Substring(startOfExceptionText, endOfExceptionText - startOfExceptionText);
     if (sub.StartsWith("<![CDATA["))
     {
-      StringAssert.EndsWith("]]>", sub);
+      Assert.That(sub, Does.EndWith("]]>"));
     }
     else
     {
-      StringAssert.DoesNotContain("<", sub);
-      StringAssert.DoesNotContain(">", sub);
+      Assert.That(sub, Does.Not.Contain("<"));
+      Assert.That(sub, Does.Not.Contain(">"));
     }
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/LoggerRepository/ConfigurationMessages.cs b/src/log4net.Tests/LoggerRepository/ConfigurationMessages.cs
index 3c5cf75d..18382461 100644
--- a/src/log4net.Tests/LoggerRepository/ConfigurationMessages.cs
+++ b/src/log4net.Tests/LoggerRepository/ConfigurationMessages.cs
@@ -63,7 +63,7 @@ public class ConfigurationMessages
 
       ICollection configurationMessages = XmlConfigurator.Configure(rep, log4NetConfig["log4net"]!);
 
-      Assert.IsTrue(configurationMessages.Count > 0);
+      Assert.That(configurationMessages.Count > 0);
     }
     finally
     {
@@ -76,7 +76,7 @@ public class ConfigurationMessages
   {
     ConfigurationChangedEventArgs configChanged = (ConfigurationChangedEventArgs)e;
 
-    Assert.IsTrue(configChanged.ConfigurationMessages.Count > 0);
+    Assert.That(configChanged.ConfigurationMessages.Count > 0);
   }
 }
 
diff --git a/src/log4net.Tests/ObjectRenderer/DefaultRendererTest.cs b/src/log4net.Tests/ObjectRenderer/DefaultRendererTest.cs
index da7eb622..925966d0 100644
--- a/src/log4net.Tests/ObjectRenderer/DefaultRendererTest.cs
+++ b/src/log4net.Tests/ObjectRenderer/DefaultRendererTest.cs
@@ -67,11 +67,11 @@ public class DefaultRendererTest
     VerifyRenderObject(ht, s =>
     {
       // table entries may be rendered in arbitrary order, e.g. "{b=2, c=3, a=1}".
-      Assert.AreEqual('{', s[0]);
-      Assert.IsTrue(s.EndsWith("}"));
-      Assert.IsTrue(s.Contains("a=1"));
-      Assert.IsTrue(s.Contains("b=2"));
-      Assert.IsTrue(s.Contains("c=3"));
+      Assert.That(s[0], Is.EqualTo('{'));
+      Assert.That(s.EndsWith("}"));
+      Assert.That(s, Does.Contain("a=1"));
+      Assert.That(s, Does.Contain("b=2"));
+      Assert.That(s, Does.Contain("c=3"));
     });
 
     Dictionary<string, int> dict = new()
@@ -87,7 +87,7 @@ public class DefaultRendererTest
 
   private void VerifyRenderObject(object? toRender, string expected)
   {
-    VerifyRenderObject(toRender, s => { Assert.AreEqual(expected, s); });
+    VerifyRenderObject(toRender, s => Assert.That(s, Is.EqualTo(expected)));
   }
 
   private void VerifyRenderObject(object? toRender, Action<string> validate)
diff --git a/src/log4net.Tests/Signing.cs b/src/log4net.Tests/Signing.cs
index 4e3f4a51..8b552433 100644
--- a/src/log4net.Tests/Signing.cs
+++ b/src/log4net.Tests/Signing.cs
@@ -32,7 +32,7 @@ public class Signing
     var asm = typeof(LoggerRepositorySkeleton).Assembly;
     // Act
     var result = asm.GetName().GetPublicKey();
-    Assert.IsNotNull(result);
-    Assert.AreNotEqual(0, result!.Length);
+    Assert.That(result, Is.Not.Null);
+    Assert.That(result!.Length, Is.Not.EqualTo(0));
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Util/CyclicBufferTest.cs b/src/log4net.Tests/Util/CyclicBufferTest.cs
index 4da97b2a..06e64ed5 100644
--- a/src/log4net.Tests/Util/CyclicBufferTest.cs
+++ b/src/log4net.Tests/Util/CyclicBufferTest.cs
@@ -33,40 +33,38 @@ namespace log4net.Tests.Util;
 public class CyclicBufferTest
 {
   [Test]
-  public void TestConstructorSize0()
-  {
-    Assert.Throws<ArgumentOutOfRangeException>(() => new CyclicBuffer(0));
-  }
+  public void TestConstructorSize0() 
+    => Assert.Throws<ArgumentOutOfRangeException>(() => new CyclicBuffer(0));
 
   [Test]
   public void TestSize1()
   {
     CyclicBuffer cb = new(1);
 
-    Assert.AreEqual(0, cb.Length, "Empty Buffer should have length 0");
-    Assert.AreEqual(1, cb.MaxSize, "Buffer should have max size 1");
+    Assert.That(cb.Length, Is.EqualTo(0), "Empty Buffer should have length 0");
+    Assert.That(cb.MaxSize, Is.EqualTo(1), "Buffer should have max size 1");
 
     LoggingEvent event1 = new(null, null, null, null, null, null);
     LoggingEvent event2 = new(null, null, null, null, null, null);
 
     LoggingEvent? discardedEvent = cb.Append(event1);
 
-    Assert.IsNull(discardedEvent, "No event should be discarded until the buffer is full");
-    Assert.AreEqual(1, cb.Length, "Buffer should have length 1");
-    Assert.AreEqual(1, cb.MaxSize, "Buffer should still have max size 1");
+    Assert.That(discardedEvent, Is.Null, "No event should be discarded until the buffer is full");
+    Assert.That(cb.Length, Is.EqualTo(1), "Buffer should have length 1");
+    Assert.That(cb.MaxSize, Is.EqualTo(1), "Buffer should still have max size 1");
 
     discardedEvent = cb.Append(event2);
 
-    Assert.AreSame(event1, discardedEvent, "Expect event1 to now be discarded");
-    Assert.AreEqual(1, cb.Length, "Buffer should still have length 1");
-    Assert.AreEqual(1, cb.MaxSize, "Buffer should really still have max size 1");
+    Assert.That(discardedEvent, Is.SameAs(event1), "Expect event1 to now be discarded");
+    Assert.That(cb.Length, Is.EqualTo(1), "Buffer should still have length 1");
+    Assert.That(cb.MaxSize, Is.EqualTo(1), "Buffer should really still have max size 1");
 
     LoggingEvent[] discardedEvents = cb.PopAll();
 
-    Assert.AreEqual(1, discardedEvents.Length, "Popped events length should be 1");
-    Assert.AreSame(event2, discardedEvents[0], "Expect event2 to now be popped");
-    Assert.AreEqual(0, cb.Length, "Buffer should be back to length 0");
-    Assert.AreEqual(1, cb.MaxSize, "Buffer should really really still have max size 1");
+    Assert.That(discardedEvents, Has.Length.EqualTo(1), "Popped events length should be 1");
+    Assert.That(discardedEvents[0], Is.SameAs(event2), "Expect event2 to now be popped");
+    Assert.That(cb.Length, Is.EqualTo(0), "Buffer should be back to length 0");
+    Assert.That(cb.MaxSize, Is.EqualTo(1), "Buffer should really really still have max size 1");
   }
 
   [Test]
@@ -74,8 +72,8 @@ public class CyclicBufferTest
   {
     CyclicBuffer cb = new(2);
 
-    Assert.AreEqual(0, cb.Length, "Empty Buffer should have length 0");
-    Assert.AreEqual(2, cb.MaxSize, "Buffer should have max size 2");
+    Assert.That(cb.Length, Is.EqualTo(0), "Empty Buffer should have length 0");
+    Assert.That(cb.MaxSize, Is.EqualTo(2), "Buffer should have max size 2");
 
     LoggingEvent event1 = new(null, null, null, null, null, null);
     LoggingEvent event2 = new(null, null, null, null, null, null);
@@ -84,21 +82,21 @@ public class CyclicBufferTest
     LoggingEvent? discardedEvent;
 
     discardedEvent = cb.Append(event1);
-    Assert.IsNull(discardedEvent, "No event should be discarded after append 1");
+    Assert.That(discardedEvent, Is.Null, "No event should be discarded after append 1");
     discardedEvent = cb.Append(event2);
-    Assert.IsNull(discardedEvent, "No event should be discarded after append 2");
+    Assert.That(discardedEvent, Is.Null, "No event should be discarded after append 2");
 
     discardedEvent = cb.Append(event3);
-    Assert.AreSame(event1, discardedEvent, "Expect event1 to now be discarded");
+    Assert.That(discardedEvent, Is.SameAs(event1), "Expect event1 to now be discarded");
 
     discardedEvent = cb.PopOldest();
-    Assert.AreSame(event2, discardedEvent, "Expect event2 to now be discarded");
+    Assert.That(discardedEvent, Is.SameAs(event2), "Expect event2 to now be discarded");
 
     LoggingEvent[] discardedEvents = cb.PopAll();
 
-    Assert.AreEqual(1, discardedEvents.Length, "Popped events length should be 1");
-    Assert.AreSame(event3, discardedEvents[0], "Expect event3 to now be popped");
-    Assert.AreEqual(0, cb.Length, "Buffer should be back to length 0");
-    Assert.AreEqual(2, cb.MaxSize, "Buffer should really really still have max size 2");
+    Assert.That(discardedEvents, Has.Length.EqualTo(1), "Popped events length should be 1");
+    Assert.That(discardedEvents[0], Is.SameAs(event3), "Expect event3 to now be popped");
+    Assert.That(cb.Length, Is.EqualTo(0), "Buffer should be back to length 0");
+    Assert.That(cb.MaxSize, Is.EqualTo(2), "Buffer should really really still have max size 2");
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Util/EncodingWithoutPreambleTest.cs b/src/log4net.Tests/Util/EncodingWithoutPreambleTest.cs
index adcd0e4e..b2409626 100644
--- a/src/log4net.Tests/Util/EncodingWithoutPreambleTest.cs
+++ b/src/log4net.Tests/Util/EncodingWithoutPreambleTest.cs
@@ -38,6 +38,8 @@ public sealed class EncodingWithoutPreambleTest
   /// Tests the wrapping functionality
   /// </summary>
   [Test]
+  [System.Diagnostics.CodeAnalysis.SuppressMessage("Assertion", "NUnit2010:Use EqualConstraint for better assertion messages in case of failure",
+    Justification = "Is.EqualTo checks the type first, we just want to call Equals()")]
   public void WrappedTest()
   {
     Encoding wrapped = Encoding.UTF8;
@@ -45,13 +47,13 @@ public sealed class EncodingWithoutPreambleTest
     Encoding target = (Encoding)encodingType
       .GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance)
       .First()
-      .Invoke(new[] { wrapped });
-    Assert.IsTrue(target.Equals(wrapped));
+      .Invoke([wrapped]);
+    Assert.That(target.Equals(wrapped));
     const string text = "Hall�chen!";
     byte[] bytes = wrapped.GetBytes(text);
-    Assert.AreEqual(bytes, target.GetBytes(text));
-    Assert.AreEqual(wrapped.GetString(bytes), target.GetString(bytes));
-    CollectionAssert.AreEqual(new byte[] { 0xEF, 0xBB, 0xBF }, wrapped.GetPreamble());
-    CollectionAssert.AreEqual(Array.Empty<byte>(), target.GetPreamble());
+    Assert.That(target.GetBytes(text), Is.EqualTo(bytes));
+    Assert.That(target.GetString(bytes), Is.EqualTo(wrapped.GetString(bytes)));
+    Assert.That(wrapped.GetPreamble(), Is.EqualTo(new byte[] { 0xEF, 0xBB, 0xBF }).AsCollection);
+    Assert.That(target.GetPreamble(), Is.EqualTo(Array.Empty<byte>()).AsCollection);
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Util/EnvironmentPatternConverterTest.cs b/src/log4net.Tests/Util/EnvironmentPatternConverterTest.cs
index cda6f5aa..ff41af19 100644
--- a/src/log4net.Tests/Util/EnvironmentPatternConverterTest.cs
+++ b/src/log4net.Tests/Util/EnvironmentPatternConverterTest.cs
@@ -56,7 +56,7 @@ public sealed class EnvironmentPatternConverterTest
     var sw = new StringWriter();
     converter.Convert(sw, null);
 
-    Assert.AreEqual(SystemLevelValue, sw.ToString(), "System level environment variable not expended correctly.");
+    Assert.That(sw.ToString(), Is.EqualTo(SystemLevelValue), "System level environment variable not expended correctly.");
 
     Environment.SetEnvironmentVariable(EnvironmentVariableName, null, EnvironmentVariableTarget.Machine);
   }
@@ -76,7 +76,7 @@ public sealed class EnvironmentPatternConverterTest
     var sw = new StringWriter();
     converter.Convert(sw, null);
 
-    Assert.AreEqual(UserLevelValue, sw.ToString(), "User level environment variable not expended correctly.");
+    Assert.That(sw.ToString(), Is.EqualTo(UserLevelValue), "User level environment variable not expended correctly.");
 
     Environment.SetEnvironmentVariable(EnvironmentVariableName, null, EnvironmentVariableTarget.User);
   }
@@ -92,7 +92,7 @@ public sealed class EnvironmentPatternConverterTest
     var sw = new StringWriter();
     converter.Convert(sw, null);
 
-    Assert.AreEqual(ProcessLevelValue, sw.ToString(), "Process level environment variable not expended correctly.");
+    Assert.That(sw.ToString(), Is.EqualTo(ProcessLevelValue), "Process level environment variable not expended correctly.");
 
     Environment.SetEnvironmentVariable(EnvironmentVariableName, null);
   }
diff --git a/src/log4net.Tests/Util/LogLogTest.cs b/src/log4net.Tests/Util/LogLogTest.cs
index 69b8c9b0..000b2890 100644
--- a/src/log4net.Tests/Util/LogLogTest.cs
+++ b/src/log4net.Tests/Util/LogLogTest.cs
@@ -43,7 +43,7 @@ public class LogLogTest
     Trace.Write("Hello");
     Trace.Write("World");
 
-    Assert.AreEqual(2, listTraceListener.Count);
+    Assert.That(listTraceListener.Count, Is.EqualTo(2));
   }
 
   [Test]
@@ -55,7 +55,7 @@ public class LogLogTest
     LogLog.Error(GetType(), "Hello");
     LogLog.Error(GetType(), "World");
     Trace.Flush();
-    Assert.AreEqual(2, listTraceListener.Count);
+    Assert.That(listTraceListener.Count, Is.EqualTo(2));
 
     try
     {
@@ -63,7 +63,7 @@ public class LogLogTest
 
       LogLog.Error(GetType(), "Hello");
       LogLog.Error(GetType(), "World");
-      Assert.AreEqual(2, listTraceListener.Count);
+      Assert.That(listTraceListener.Count, Is.EqualTo(2));
     }
     finally
     {
@@ -81,7 +81,7 @@ public class LogLogTest
     LogLog.Error(GetType(), "This will be recorded.");
     LogLog.Error(GetType(), "This will be recorded.");
 
-    Assert.AreEqual(2, messages.Count);
+    Assert.That(messages, Has.Count.EqualTo(2));
   }
   
   /// <summary>
diff --git a/src/log4net.Tests/Util/PatternConverterTest.cs b/src/log4net.Tests/Util/PatternConverterTest.cs
index 6361aad7..c4c357f1 100644
--- a/src/log4net.Tests/Util/PatternConverterTest.cs
+++ b/src/log4net.Tests/Util/PatternConverterTest.cs
@@ -72,14 +72,14 @@ public class PatternConverterTest
 
     PropertyKeyCountPatternLayoutConverter? converter =
         PropertyKeyCountPatternLayoutConverter.MostRecentInstance;
-    Assert.IsNotNull(converter);
-    Assert.IsNotNull(converter!.Properties);
-    Assert.AreEqual(2, converter.Properties!.Count);
-    Assert.AreEqual("4", converter.Properties["two-plus-two"]);
+    Assert.That(converter, Is.Not.Null);
+    Assert.That(converter!.Properties, Is.Not.Null);
+    Assert.That(converter.Properties!, Has.Count.EqualTo(2));
+    Assert.That(converter.Properties["two-plus-two"], Is.EqualTo("4"));
 
     StringAppender appender =
         (StringAppender)LogManager.GetRepository(rep.Name).GetAppenders()[0];
-    Assert.AreEqual("2", appender.GetString());
+    Assert.That(appender.GetString(), Is.EqualTo("2"));
   }
 
   [Test]
@@ -120,47 +120,41 @@ public class PatternConverterTest
 
     PropertyKeyCountPatternConverter? converter =
         PropertyKeyCountPatternConverter.MostRecentInstance;
-    Assert.IsNotNull(converter);
-    Assert.IsNotNull(converter!.Properties);
-    Assert.AreEqual(2, converter!.Properties!.Count);
-    Assert.AreEqual("4", converter.Properties["two-plus-two"]);
+    Assert.That(converter, Is.Not.Null);
+    Assert.That(converter!.Properties, Is.Not.Null);
+    Assert.That(converter!.Properties!, Has.Count.EqualTo(2));
+    Assert.That(converter.Properties["two-plus-two"], Is.EqualTo("4"));
 
     PatternStringAppender appender =
         (PatternStringAppender)LogManager.GetRepository(rep.Name).GetAppenders()[0];
-    Assert.IsNotNull(appender.Setting);
-    Assert.AreEqual("2", appender.Setting!.Format());
+    Assert.That(appender.Setting, Is.Not.Null);
+    Assert.That(appender.Setting!.Format(), Is.EqualTo("2"));
   }
 }
 
 public class PropertyKeyCountPatternLayoutConverter : PatternLayoutConverter
 {
-  private static PropertyKeyCountPatternLayoutConverter? _mostRecentInstance;
+  public PropertyKeyCountPatternLayoutConverter() => MostRecentInstance = this;
 
-  public PropertyKeyCountPatternLayoutConverter() => _mostRecentInstance = this;
-
-  protected override void Convert(TextWriter writer, LoggingEvent loggingEvent) => writer.Write(Properties!.GetKeys().Length);
+  protected override void Convert(TextWriter writer, LoggingEvent loggingEvent) 
+    => writer.Write(Properties!.GetKeys().Length);
 
-  public static PropertyKeyCountPatternLayoutConverter? MostRecentInstance => _mostRecentInstance;
+  public static PropertyKeyCountPatternLayoutConverter? MostRecentInstance { get; private set; }
 }
 
 public class PropertyKeyCountPatternConverter : PatternConverter
 {
-  private static PropertyKeyCountPatternConverter? _mostRecentInstance;
-
-  public PropertyKeyCountPatternConverter() => _mostRecentInstance = this;
+  public PropertyKeyCountPatternConverter() => MostRecentInstance = this;
 
   public override void Convert(TextWriter writer, object? state)
     => writer.Write(Properties!.GetKeys().Length);
 
-  public static PropertyKeyCountPatternConverter? MostRecentInstance => _mostRecentInstance;
+  public static PropertyKeyCountPatternConverter? MostRecentInstance { get; private set; }
 }
 
 public class PatternStringAppender : StringAppender
 {
-  public PatternStringAppender()
-  {
-    MostRecentInstace = this;
-  }
+  public PatternStringAppender() => MostRecentInstace = this;
 
   public PatternString? Setting { get; set; }
 
diff --git a/src/log4net.Tests/Util/PatternStringTest.cs b/src/log4net.Tests/Util/PatternStringTest.cs
index 35d1477a..d2951577 100644
--- a/src/log4net.Tests/Util/PatternStringTest.cs
+++ b/src/log4net.Tests/Util/PatternStringTest.cs
@@ -49,7 +49,7 @@ public class PatternStringTest : MarshalByRefObject
       Environment.SpecialFolder specialFolder =
           (Environment.SpecialFolder)Enum.Parse(typeof(Environment.SpecialFolder), specialFolderName);
 
-      Assert.AreEqual(Environment.GetFolderPath(specialFolder), evaluatedPattern);
+      Assert.That(evaluatedPattern, Is.EqualTo(Environment.GetFolderPath(specialFolder)));
     }
   }
 
@@ -86,19 +86,19 @@ public class PatternStringTest : MarshalByRefObject
     }
   }
 
-  public void TestAppSettingPathConverterInConfiguredDomain()
+  private void TestAppSettingPathConverterInConfiguredDomain()
   {
     string pattern = "%appSetting{TestKey}";
     PatternString patternString = new(pattern);
     string evaluatedPattern = patternString.Format();
     string appSettingValue = ConfigurationManager.AppSettings["TestKey"];
-    Assert.AreEqual("TestValue", appSettingValue, "Expected configuration file to contain a key TestKey with the value TestValue");
-    Assert.AreEqual(appSettingValue, evaluatedPattern, "Evaluated pattern expected to be identical to appSetting value");
+    Assert.That(appSettingValue, Is.EqualTo("TestValue"), "Expected configuration file to contain a key TestKey with the value TestValue");
+    Assert.That(evaluatedPattern, Is.EqualTo(appSettingValue), "Evaluated pattern expected to be identical to appSetting value");
 
     string badPattern = "%appSetting{UnknownKey}";
     patternString = new PatternString(badPattern);
     evaluatedPattern = patternString.Format();
-    Assert.AreEqual("(null)", evaluatedPattern, "Evaluated pattern expected to be \"(null)\" for non-existent appSettings key");
+    Assert.That(evaluatedPattern, Is.EqualTo("(null)"), "Evaluated pattern expected to be \"(null)\" for non-existent appSettings key");
   }
 
   private static string CreateTempConfigFile(string configurationFileContent)
diff --git a/src/log4net.Tests/Util/PropertiesDictionaryTest.cs b/src/log4net.Tests/Util/PropertiesDictionaryTest.cs
index 8b1cb51f..d0f65558 100644
--- a/src/log4net.Tests/Util/PropertiesDictionaryTest.cs
+++ b/src/log4net.Tests/Util/PropertiesDictionaryTest.cs
@@ -48,9 +48,9 @@ public class PropertiesDictionaryTest
       pd[i.ToString()] = i;
     }
 
-    Assert.AreEqual(10, pd.Count, "Dictionary should have 10 items");
+    Assert.That(pd, Has.Count.EqualTo(10), "Dictionary should have 10 items");
 
-    Assert.IsNull(pd["notThere"], "Getter should act as IDictionary not IDictionary<TKey, TValue>");
+    Assert.That(pd["notThere"], Is.Null, "Getter should act as IDictionary not IDictionary<TKey, TValue>");
 
     // Serialize the properties into a memory stream
     BinaryFormatter formatter = new();
@@ -61,11 +61,11 @@ public class PropertiesDictionaryTest
     memory.Position = 0;
     PropertiesDictionary pd2 = (PropertiesDictionary)formatter.Deserialize(memory);
 
-    Assert.AreEqual(10, pd2.Count, "Deserialized Dictionary should have 10 items");
+    Assert.That(pd2, Has.Count.EqualTo(10), "Deserialized Dictionary should have 10 items");
 
     foreach (string key in pd.GetKeys())
     {
-      Assert.AreEqual(pd[key], pd2[key], "Check Value Persisted for key [{0}]", key);
+      Assert.That(pd2[key], Is.EqualTo(pd[key]), $"Check Value Persisted for key [{key}]");
     }
   }
 }
diff --git a/src/log4net.Tests/Util/RandomStringPatternConverterTest.cs b/src/log4net.Tests/Util/RandomStringPatternConverterTest.cs
index ab7519c2..4fdec131 100644
--- a/src/log4net.Tests/Util/RandomStringPatternConverterTest.cs
+++ b/src/log4net.Tests/Util/RandomStringPatternConverterTest.cs
@@ -41,7 +41,7 @@ public class RandomStringPatternConverterTest
     StringWriter sw = new();
     converter.Convert(sw, null);
 
-    Assert.AreEqual(4, sw.ToString().Length, "Default string length should be 4");
+    Assert.That(sw.ToString(), Has.Length.EqualTo(4), "Default string length should be 4");
 
     // Set string length to 7
     converter.Option = "7";
@@ -51,13 +51,13 @@ public class RandomStringPatternConverterTest
     converter.Convert(sw, null);
 
     string string1 = sw.ToString();
-    Assert.AreEqual(7, string1.Length, "string length should be 7");
+    Assert.That(string1, Has.Length.EqualTo(7), "string length should be 7");
 
     // Check for duplicate result
     sw = new StringWriter();
     converter.Convert(sw, null);
 
     string string2 = sw.ToString();
-    Assert.IsTrue(string1 != string2, "strings should be different");
+    Assert.That(string1 != string2, "strings should be different");
   }
 }
\ No newline at end of file
diff --git a/src/log4net.Tests/Util/SystemInfoTest.cs b/src/log4net.Tests/Util/SystemInfoTest.cs
index 07507876..957b22a4 100644
--- a/src/log4net.Tests/Util/SystemInfoTest.cs
+++ b/src/log4net.Tests/Util/SystemInfoTest.cs
@@ -71,13 +71,13 @@ public class SystemInfoTest
     Type? t;
 
     t = GetTypeFromString("log4net.Tests.Util.SystemInfoTest,log4net.Tests", false, false);
-    Assert.AreSame(typeof(SystemInfoTest), t, "Test explicit case sensitive type load");
+    Assert.That(t, Is.SameAs(typeof(SystemInfoTest)), "Test explicit case sensitive type load");
 
     t = GetTypeFromString("LOG4NET.TESTS.UTIL.SYSTEMINFOTEST,log4net.Tests", false, true);
-    Assert.AreSame(typeof(SystemInfoTest), t, "Test explicit case in-sensitive type load caps");
+    Assert.That(t, Is.SameAs(typeof(SystemInfoTest)), "Test explicit case in-sensitive type load caps");
 
     t = GetTypeFromString("log4net.tests.util.systeminfotest,log4net.Tests", false, true);
-    Assert.AreSame(typeof(SystemInfoTest), t, "Test explicit case in-sensitive type load lower");
+    Assert.That(t, Is.SameAs(typeof(SystemInfoTest)), "Test explicit case in-sensitive type load lower");
   }
 
   [Test]
@@ -87,10 +87,10 @@ public class SystemInfoTest
     Type? t;
 
     t = GetTypeFromString("LOG4NET.TESTS.UTIL.SYSTEMINFOTEST,LOG4NET.TESTS", false, true);
-    Assert.AreSame(typeof(SystemInfoTest), t, "Test explicit case in-sensitive type load caps");
+    Assert.That(t, Is.SameAs(typeof(SystemInfoTest)), "Test explicit case in-sensitive type load caps");
 
     t = GetTypeFromString("log4net.tests.util.systeminfotest,log4net.tests", false, true);
-    Assert.AreSame(typeof(SystemInfoTest), t, "Test explicit case in-sensitive type load lower");
+    Assert.That(t, Is.SameAs(typeof(SystemInfoTest)), "Test explicit case in-sensitive type load lower");
   }
 
   [Test]
@@ -99,13 +99,13 @@ public class SystemInfoTest
     Type? t;
 
     t = GetTypeFromString("log4net.Tests.Util.SystemInfoTest", false, false);
-    Assert.AreSame(typeof(SystemInfoTest), t, "Test explicit case sensitive type load");
+    Assert.That(t, Is.SameAs(typeof(SystemInfoTest)), "Test explicit case sensitive type load");
 
     t = GetTypeFromString("LOG4NET.TESTS.UTIL.SYSTEMINFOTEST", false, true);
-    Assert.AreSame(typeof(SystemInfoTest), t, "Test explicit case in-sensitive type load caps");
+    Assert.That(t, Is.SameAs(typeof(SystemInfoTest)), "Test explicit case in-sensitive type load caps");
 
     t = GetTypeFromString("log4net.tests.util.systeminfotest", false, true);
-    Assert.AreSame(typeof(SystemInfoTest), t, "Test explicit case in-sensitive type load lower");
+    Assert.That(t, Is.SameAs(typeof(SystemInfoTest)), "Test explicit case in-sensitive type load lower");
   }
 
   [Test]
@@ -114,15 +114,15 @@ public class SystemInfoTest
     Type? t;
 
     t = GetTypeFromString("log4net.Util.SystemInfo", false, false);
-    Assert.AreSame(typeof(SystemInfo), t,
+    Assert.That(t, Is.SameAs(typeof(SystemInfo)),
                                      string.Format("Test explicit case sensitive type load found {0} rather than {1}",
                                                    t?.AssemblyQualifiedName, typeof(SystemInfo).AssemblyQualifiedName));
 
     t = GetTypeFromString("LOG4NET.UTIL.SYSTEMINFO", false, true);
-    Assert.AreSame(typeof(SystemInfo), t, "Test explicit case in-sensitive type load caps");
+    Assert.That(t, Is.SameAs(typeof(SystemInfo)), "Test explicit case in-sensitive type load caps");
 
     t = GetTypeFromString("log4net.util.systeminfo", false, true);
-    Assert.AreSame(typeof(SystemInfo), t, "Test explicit case in-sensitive type load lower");
+    Assert.That(t, Is.SameAs(typeof(SystemInfo)), "Test explicit case in-sensitive type load lower");
   }
 
   [Test]
@@ -131,7 +131,7 @@ public class SystemInfoTest
     Type? t;
 
     t = GetTypeFromString("LOG4NET.TESTS.UTIL.SYSTEMINFOTEST,LOG4NET.TESTS", false, false);
-    Assert.AreSame(null, t, "Test explicit case sensitive fails type load");
+    Assert.That(t, Is.SameAs(null), "Test explicit case sensitive fails type load");
 
     Assert.Throws<TypeLoadException>(() => GetTypeFromString("LOG4NET.TESTS.UTIL.SYSTEMINFOTEST,LOG4NET.TESTS", true, false));
   }
@@ -142,7 +142,7 @@ public class SystemInfoTest
     Type? t;
 
     t = GetTypeFromString("LOG4NET.TESTS.UTIL.SYSTEMINFOTEST", false, false);
-    Assert.AreSame(null, t, "Test explicit case sensitive fails type load");
+    Assert.That(t, Is.SameAs(null), "Test explicit case sensitive fails type load");
 
     Assert.Throws<TypeLoadException>(() => GetTypeFromString("LOG4NET.TESTS.UTIL.SYSTEMINFOTEST", true, false));
   }
diff --git a/src/log4net.Tests/Util/TransformTest.cs b/src/log4net.Tests/Util/TransformTest.cs
index 16237570..a766d203 100644
--- a/src/log4net.Tests/Util/TransformTest.cs
+++ b/src/log4net.Tests/Util/TransformTest.cs
@@ -33,13 +33,13 @@ public class TransformTest
   public void MaskXmlInvalidCharactersAllowsJapaneseCharacters()
   {
     string kome = "\u203B";
-    Assert.AreEqual(kome, Transform.MaskXmlInvalidCharacters(kome, "?"));
+    Assert.That(Transform.MaskXmlInvalidCharacters(kome, "?"), Is.EqualTo(kome));
   }
 
   [Test]
   public void MaskXmlInvalidCharactersMasks0Char()
   {
     string c = "\u0000";
-    Assert.AreEqual("?", Transform.MaskXmlInvalidCharacters(c, "?"));
+    Assert.That(Transform.MaskXmlInvalidCharacters(c, "?"), Is.EqualTo("?"));
   }
 }
diff --git a/src/log4net.Tests/log4net.Tests.csproj b/src/log4net.Tests/log4net.Tests.csproj
index da3af276..5d4c90af 100644
--- a/src/log4net.Tests/log4net.Tests.csproj
+++ b/src/log4net.Tests/log4net.Tests.csproj
@@ -21,6 +21,7 @@
   </ItemGroup>
   <ItemGroup>
     <PackageReference Include="NUnit" Version="$(NUnitPackageVersion)" />
+    <PackageReference Include="NUnit.Analyzers" Version="$(NUnitAnalyzersPackageVersion)" />
     <PackageReference Include="NUnit3TestAdapter" Version="$(NUnit3TestAdapterPackageVersion)" />
     <PackageReference Include="Quackers.TestLogger" Version="$(QuackersTestLoggerPackageVersion)" />
   </ItemGroup>
diff --git a/src/log4net/Util/EncodingWithoutPreamble.cs b/src/log4net/Util/EncodingWithoutPreamble.cs
index d827c9ed..1a069070 100644
--- a/src/log4net/Util/EncodingWithoutPreamble.cs
+++ b/src/log4net/Util/EncodingWithoutPreamble.cs
@@ -30,7 +30,7 @@ internal sealed class EncodingWithoutPreamble : Encoding
   private readonly Encoding _wrapped;
 
   /// <inheritdoc/>
-  private EncodingWithoutPreamble(Encoding wrapped) => this._wrapped = wrapped.EnsureNotNull();
+  private EncodingWithoutPreamble(Encoding wrapped) => _wrapped = wrapped.EnsureNotNull();
 
   /// <summary>
   /// wraps the <paramref name="encoding"/> in case it has a preamble