diff --git a/src/log4net.Tests/Appender/OutputDebugAppenderTest.cs b/src/log4net.Tests/Appender/OutputDebugAppenderTest.cs
index 9659244..882b1d5 100644
--- a/src/log4net.Tests/Appender/OutputDebugAppenderTest.cs
+++ b/src/log4net.Tests/Appender/OutputDebugAppenderTest.cs
@@ -19,8 +19,6 @@
 
 
 using System;
-using System.Diagnostics;
-
 using log4net.Appender;
 using log4net.Config;
 using log4net.Core;
@@ -33,13 +31,12 @@
 /// <summary>
 /// Used for internal unit testing the <see cref="OutputDebugStringAppender"/> class.
 /// </summary>
-/// <remarks>
-/// Used for internal unit testing the <see cref="OutputDebugStringAppender"/> class.
-/// </remarks>
 [TestFixture]
 [Platform(Include = "Win")]
 public sealed class OutputDebugStringAppenderTest
 {
+  private const string DebugMessage = "Message - Сообщение - הודעה";
+
   /// <summary>
   /// Verifies that the OutputDebugString api is called by the appender without issues
   /// </summary>
@@ -47,8 +44,8 @@
   public void AppendShouldNotCauseAnyErrors()
   {
     ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
-
-    OutputDebugStringAppender outputDebugStringAppender = new()
+    string? lastDebugString = null;
+    OutputAppender outputDebugStringAppender = new(value => lastDebugString = value)
     {
       Layout = new SimpleLayout(),
       ErrorHandler = new FailOnError()
@@ -58,15 +55,18 @@
     BasicConfigurator.Configure(rep, outputDebugStringAppender);
 
     ILog log = LogManager.GetLogger(rep.Name, GetType());
-    log.Debug("Message - Сообщение - הודעה");
-
-    // need a way to check that the api is actually called and the string is properly marshalled.
+    log.Debug(DebugMessage);
+    Assert.That(lastDebugString, Is.Not.Null.And.Contains(DebugMessage));
   }
 }
 
-class FailOnError : IErrorHandler
+file sealed class OutputAppender(Action<string> outputDebugString)
+  : OutputDebugStringAppender(outputDebugString)
+{ }
+
+file sealed class FailOnError : IErrorHandler
 {
   public void Error(string message, Exception? e, ErrorCode errorCode) => Assert.Fail($"Unexpected error: {message} exception: {e}, errorCode: {errorCode}");
   public void Error(string message, Exception e) => Assert.Fail($"Unexpected error: {message} exception: {e}");
-  public void Error(string message) =>  Assert.Fail($"Unexpected error: {message}");
-}
+  public void Error(string message) => Assert.Fail($"Unexpected error: {message}");
+}
\ No newline at end of file
diff --git a/src/log4net/Appender/OutputDebugStringAppender.cs b/src/log4net/Appender/OutputDebugStringAppender.cs
index 83e83da..44442e9 100644
--- a/src/log4net/Appender/OutputDebugStringAppender.cs
+++ b/src/log4net/Appender/OutputDebugStringAppender.cs
@@ -17,20 +17,33 @@
 //
 #endregion
 
-using System.Runtime.InteropServices;
-
+using System;
 using log4net.Core;
 using log4net.Util;
 
 namespace log4net.Appender;
 
 /// <summary>
-/// Appends log events to the OutputDebugString system.
+/// Appends log events to the OutputDebugString system
 /// </summary>
 /// <author>Nicko Cadell</author>
 /// <author>Gert Driesen</author>
 public class OutputDebugStringAppender : AppenderSkeleton
 {
+  private readonly Action<string> _outputDebugString;
+
+  /// <inheritdoc/>
+  public OutputDebugStringAppender()
+    : this(null)
+  { }
+
+  /// <summary>
+  /// Constructor for unit testing
+  /// </summary>
+  /// <param name="outputDebugString">replacement for <see cref="NativeMethods.OutputDebugString"/></param>
+  protected OutputDebugStringAppender(Action<string>? outputDebugString) 
+    => _outputDebugString = outputDebugString ?? NativeMethods.OutputDebugString;
+
   /// <summary>
   /// Writes the logging event to the output debug string API
   /// </summary>
@@ -40,13 +53,13 @@
   protected override void Append(LoggingEvent loggingEvent)
   {
 #if NETSTANDARD2_0_OR_GREATER
-    if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+    if (!System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows))
     {
-      throw new System.PlatformNotSupportedException("OutputDebugString is only available on Windows");
+      throw new PlatformNotSupportedException("OutputDebugString is only available on Windows");
     }
 #endif
 
-     NativeMethods.OutputDebugString(RenderLoggingEvent(loggingEvent));
+    _outputDebugString(RenderLoggingEvent(loggingEvent));
   }
 
   /// <summary>
