From 4c797c328f51294fae7d2918ec3bf41f5b35ebc8 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 20 Dec 2025 13:43:54 +0100 Subject: [PATCH] Add WireMock.Net.NUnit project (#1400) * Add WireMock.Net.NUnit project * 0.0.1-preview-01 * --v --- README.md | 1 + WireMock.Net Solution.sln | 9 ++- .../TestContextWireMockLogger.cs | 71 +++++++++++++++++++ .../WireMock.Net.NUnit.csproj | 36 ++++++++++ 4 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 src/WireMock.Net.NUnit/TestContextWireMockLogger.cs create mode 100644 src/WireMock.Net.NUnit/WireMock.Net.NUnit.csproj 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** | [![NuGet Badge WireMock.Net.xUnit](https://img.shields.io/nuget/v/WireMock.Net.xUnit)](https://www.nuget.org/packages/WireMock.Net.xUnit) | [![MyGet Badge WireMock.Net.xUnit](https://img.shields.io/myget/wiremock-net/vpre/WireMock.Net.xUnit?includePreReleases=true&label=MyGet)](https://www.myget.org/feed/wiremock-net/package/nuget/WireMock.Net.xUnit) |   **WireMock.Net.xUnit.v3** | [![NuGet Badge WireMock.Net.xUnit](https://img.shields.io/nuget/v/WireMock.Net.xUnit.v3)](https://www.nuget.org/packages/WireMock.Net.xUnit.v3) | [![MyGet Badge WireMock.Net.xUnit](https://img.shields.io/myget/wiremock-net/vpre/WireMock.Net.xUnit.v3?includePreReleases=true&label=MyGet)](https://www.myget.org/feed/wiremock-net/package/nuget/WireMock.Net.xUnit.v3) |   **WireMock.Net.TUnit** | [![NuGet Badge WireMock.Net.TUnit](https://img.shields.io/nuget/v/WireMock.Net.TUnit)](https://www.nuget.org/packages/WireMock.Net.TUnit) | [![MyGet Badge WireMock.Net.TUnit](https://img.shields.io/myget/wiremock-net/vpre/WireMock.Net.TUnit?includePreReleases=true&label=MyGet)](https://www.myget.org/feed/wiremock-net/package/nuget/WireMock.Net.TUnit) +|   **WireMock.Net.NUnit** | [![NuGet Badge WireMock.Net.NUnit](https://img.shields.io/nuget/v/WireMock.Net.NUnit)](https://www.nuget.org/packages/WireMock.Net.NUnit) | [![MyGet Badge WireMock.Net.TUnit](https://img.shields.io/myget/wiremock-net/vpre/WireMock.Net.NUnit?includePreReleases=true&label=MyGet)](https://www.myget.org/feed/wiremock-net/package/nuget/WireMock.Net.NUnit) | | | | |   **WireMock.Net.Extensions.Routing** | [![NuGet Badge WireMock.Net.Extensions.Routing](https://img.shields.io/nuget/v/WireMock.Net.Extensions.Routing)](https://www.nuget.org/packages/WireMock.Net.Extensions.Routing) | [![MyGet Badge WireMock.Net.Extensions.Routing](https://img.shields.io/myget/wiremock-net/vpre/WireMock.Net.Extensions.Routing?includePreReleases=true&label=MyGet)](https://www.myget.org/feed/wiremock-net/package/nuget/WireMock.Net.Extensions.Routing) |   **WireMock.Net.Matchers.CSharpCode** | [![NuGet Badge WireMock.Net.Matchers.CSharpCode](https://img.shields.io/nuget/v/WireMock.Net.Matchers.CSharpCode)](https://www.nuget.org/packages/WireMock.Net.Matchers.CSharpCode) | [![MyGet Badge WireMock.Net.Matchers.CSharpCode](https://img.shields.io/myget/wiremock-net/vpre/WireMock.Net.Matchers.CSharpCode?includePreReleases=true&label=MyGet)](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