diff --git a/README.md b/README.md
index 0b3b73dd..bd4a2c27 100644
--- a/README.md
+++ b/README.md
@@ -55,6 +55,7 @@ A C# .NET version based on [mock4net](https://github.com/alexvictoor/mock4net) w
| **WireMock.Net.xUnit** | [](https://www.nuget.org/packages/WireMock.Net.xUnit) | [](https://www.myget.org/feed/wiremock-net/package/nuget/WireMock.Net.xUnit)
| **WireMock.Net.xUnit.v3** | [](https://www.nuget.org/packages/WireMock.Net.xUnit.v3) | [](https://www.myget.org/feed/wiremock-net/package/nuget/WireMock.Net.xUnit.v3)
| **WireMock.Net.TUnit** | [](https://www.nuget.org/packages/WireMock.Net.TUnit) | [](https://www.myget.org/feed/wiremock-net/package/nuget/WireMock.Net.TUnit)
+| **WireMock.Net.NUnit** | [](https://www.nuget.org/packages/WireMock.Net.NUnit) | [](https://www.myget.org/feed/wiremock-net/package/nuget/WireMock.Net.NUnit)
| | | |
| **WireMock.Net.Extensions.Routing** | [](https://www.nuget.org/packages/WireMock.Net.Extensions.Routing) | [](https://www.myget.org/feed/wiremock-net/package/nuget/WireMock.Net.Extensions.Routing)
| **WireMock.Net.Matchers.CSharpCode** | [](https://www.nuget.org/packages/WireMock.Net.Matchers.CSharpCode) | [](https://www.myget.org/feed/wiremock-net/package/nuget/WireMock.Net.Matchers.CSharpCode)
diff --git a/WireMock.Net Solution.sln b/WireMock.Net Solution.sln
index edd11b30..02034e54 100644
--- a/WireMock.Net Solution.sln
+++ b/WireMock.Net Solution.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 18
-VisualStudioVersion = 18.0.11205.157 d18.0
+VisualStudioVersion = 18.0.11205.157
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{8F890C6F-9ACC-438D-928A-AD61CDA862F2}"
EndProject
@@ -146,6 +146,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WireMock.Net.ProtoBuf", "sr
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WireMock.Net.xUnit.v3", "src\WireMock.Net.xUnit.v3\WireMock.Net.xUnit.v3.csproj", "{4F46BD02-BEBC-4B2D-B857-4169AD1FB067}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WireMock.Net.NUnit", "src\WireMock.Net.NUnit\WireMock.Net.NUnit.csproj", "{2DBBD70D-8051-441F-92BB-FF9B8B4B4982}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -356,6 +358,10 @@ Global
{4F46BD02-BEBC-4B2D-B857-4169AD1FB067}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4F46BD02-BEBC-4B2D-B857-4169AD1FB067}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4F46BD02-BEBC-4B2D-B857-4169AD1FB067}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2DBBD70D-8051-441F-92BB-FF9B8B4B4982}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2DBBD70D-8051-441F-92BB-FF9B8B4B4982}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2DBBD70D-8051-441F-92BB-FF9B8B4B4982}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2DBBD70D-8051-441F-92BB-FF9B8B4B4982}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -414,6 +420,7 @@ Global
{1E874C8F-08A2-493B-8421-619F9A6E9E77} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2}
{B47413AA-55D3-49A7-896A-17ADBFF72407} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2}
{4F46BD02-BEBC-4B2D-B857-4169AD1FB067} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2}
+ {2DBBD70D-8051-441F-92BB-FF9B8B4B4982} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {DC539027-9852-430C-B19F-FD035D018458}
diff --git a/src/WireMock.Net.NUnit/TestContextWireMockLogger.cs b/src/WireMock.Net.NUnit/TestContextWireMockLogger.cs
new file mode 100644
index 00000000..6ff601e9
--- /dev/null
+++ b/src/WireMock.Net.NUnit/TestContextWireMockLogger.cs
@@ -0,0 +1,71 @@
+// Copyright © WireMock.Net
+
+using System;
+using JsonConverter.Abstractions;
+using JsonConverter.Newtonsoft.Json;
+using NUnit.Framework;
+using WireMock.Admin.Requests;
+using WireMock.Logging;
+
+namespace WireMock.Net.NUnit;
+
+///
+/// When using NUnit, this class enables to log the output from WireMock.Net using the .
+///
+public sealed class TestContextWireMockLogger(IJsonConverter? jsonConverter = null) : IWireMockLogger
+{
+ private readonly JsonConverterOptions _jsonConverterOptions = new() { WriteIndented = true, IgnoreNullValues = true };
+ private readonly IJsonConverter _jsonConverter = jsonConverter ?? new NewtonsoftJsonConverter();
+
+ ///
+ public void Debug(string formatString, params object[] args)
+ {
+ TestContext.WriteLine(Format("Debug", formatString, args));
+ }
+
+ ///
+ public void Info(string formatString, params object[] args)
+ {
+ TestContext.WriteLine(Format("Info", formatString, args));
+ }
+
+ ///
+ public void Warn(string formatString, params object[] args)
+ {
+ TestContext.WriteLine(Format("Warning", formatString, args));
+ }
+
+ ///
+ public void Error(string formatString, params object[] args)
+ {
+ TestContext.WriteLine(Format("Error", formatString, args));
+ }
+
+ ///
+ public void Error(string message, Exception exception)
+ {
+ TestContext.WriteLine(Format("Error", $"{message} {{0}}", exception));
+
+ if (exception is AggregateException ae)
+ {
+ ae.Handle(ex =>
+ {
+ TestContext.WriteLine(Format("Error", "Exception {0}", ex));
+ return true;
+ });
+ }
+ }
+
+ ///
+ public void DebugRequestResponse(LogEntryModel logEntryModel, bool isAdminRequest)
+ {
+ var message = _jsonConverter.Serialize(logEntryModel, _jsonConverterOptions);
+ TestContext.WriteLine(Format("DebugRequestResponse", "Admin[{0}] {1}", isAdminRequest, message));
+ }
+
+ private static string Format(string level, string formatString, params object[] args)
+ {
+ var message = args.Length > 0 ? string.Format(formatString, args) : formatString;
+ return $"{DateTime.UtcNow} [{level}] : {message}";
+ }
+}
\ No newline at end of file
diff --git a/src/WireMock.Net.NUnit/WireMock.Net.NUnit.csproj b/src/WireMock.Net.NUnit/WireMock.Net.NUnit.csproj
new file mode 100644
index 00000000..9c597e78
--- /dev/null
+++ b/src/WireMock.Net.NUnit/WireMock.Net.NUnit.csproj
@@ -0,0 +1,36 @@
+
+
+ Some extensions for NUnit
+ WireMock.Net.NUnit
+ Stef Heyenrath
+ net462;net6.0;net8.0
+ true
+ WireMock.Net.NUnit
+ WireMock.Net.NUnit
+ WireMock.Net.NUnit
+ tdd;wiremock;test;unittest;nunit
+ {2DBBD70D-8051-441F-92BB-3F9B8B4B4983}
+ true
+ $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb
+ true
+ true
+ true
+ true
+ ../WireMock.Net/WireMock.Net.snk
+ true
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file