Skip to content

Commit 0a2ac83

Browse files
committed
Add WireMock.Net.TUnit project
1 parent 836976c commit 0a2ac83

File tree

7 files changed

+207
-4
lines changed

7 files changed

+207
-4
lines changed

.github/workflows/ci.yml

+6-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ jobs:
2020
- uses: actions/checkout@v4
2121

2222
- name: 'Execute Tests'
23-
run: dotnet test './test/WireMock.Net.Tests/WireMock.Net.Tests.csproj' -c Release --framework net8.0
23+
run: |
24+
dotnet test './test/WireMock.Net.Tests/WireMock.Net.Tests.csproj' -c Release --framework net8.0
25+
dotnet test './test/WireMock.Net.TUnitTests/WireMock.Net.TUnitTests.csproj' -c Release --framework net8.0
2426
2527
linux-build-and-run:
2628
name: Run Tests on Linux
@@ -33,7 +35,9 @@ jobs:
3335
- uses: actions/checkout@v4
3436

3537
- name: 'Execute Tests'
36-
run: dotnet test './test/WireMock.Net.Tests/WireMock.Net.Tests.csproj' -c Release --framework net8.0
38+
run: |
39+
dotnet test './test/WireMock.Net.Tests/WireMock.Net.Tests.csproj' -c Release --framework net8.0
40+
dotnet test './test/WireMock.Net.TUnitTests/WireMock.Net.TUnitTests.csproj' -c Release --framework net8.0
3741
3842
- name: Install .NET Aspire workload
3943
run: dotnet workload install aspire

WireMock.Net Solution.sln

+14
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Aspire.TestApp
131131
EndProject
132132
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AspireApp1.AppHostOriginal", "examples-Aspire\AspireApp1.AppHostOriginal\AspireApp1.AppHostOriginal.csproj", "{C9210DA3-F390-4598-8512-349A473FE9C9}"
133133
EndProject
134+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WireMock.Net.TUnit", "src\WireMock.Net.TUnit\WireMock.Net.TUnit.csproj", "{91024A93-848F-4A02-AF53-5EBE5834E23C}"
135+
EndProject
136+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WireMock.Net.Aspire.TUnitTests", "test\WireMock.Net.Aspire.TUnitTests\WireMock.Net.Aspire.TUnitTests.csproj", "{FE7EEA55-2292-49C2-849E-D0750D16AF75}"
137+
EndProject
134138
Global
135139
GlobalSection(SolutionConfigurationPlatforms) = preSolution
136140
Debug|Any CPU = Debug|Any CPU
@@ -317,6 +321,14 @@ Global
317321
{C9210DA3-F390-4598-8512-349A473FE9C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
318322
{C9210DA3-F390-4598-8512-349A473FE9C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
319323
{C9210DA3-F390-4598-8512-349A473FE9C9}.Release|Any CPU.Build.0 = Release|Any CPU
324+
{91024A93-848F-4A02-AF53-5EBE5834E23C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
325+
{91024A93-848F-4A02-AF53-5EBE5834E23C}.Debug|Any CPU.Build.0 = Debug|Any CPU
326+
{91024A93-848F-4A02-AF53-5EBE5834E23C}.Release|Any CPU.ActiveCfg = Release|Any CPU
327+
{91024A93-848F-4A02-AF53-5EBE5834E23C}.Release|Any CPU.Build.0 = Release|Any CPU
328+
{FE7EEA55-2292-49C2-849E-D0750D16AF75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
329+
{FE7EEA55-2292-49C2-849E-D0750D16AF75}.Debug|Any CPU.Build.0 = Debug|Any CPU
330+
{FE7EEA55-2292-49C2-849E-D0750D16AF75}.Release|Any CPU.ActiveCfg = Release|Any CPU
331+
{FE7EEA55-2292-49C2-849E-D0750D16AF75}.Release|Any CPU.Build.0 = Release|Any CPU
320332
EndGlobalSection
321333
GlobalSection(SolutionProperties) = preSolution
322334
HideSolutionNode = FALSE
@@ -369,6 +381,8 @@ Global
369381
{CE602F57-FEF8-4559-A9E0-6200BE1BF398} = {0BB8B634-407A-4610-A91F-11586990767A}
370382
{F1B5999D-D22E-48A6-AB86-18A7876BD32E} = {0BB8B634-407A-4610-A91F-11586990767A}
371383
{C9210DA3-F390-4598-8512-349A473FE9C9} = {AD474543-0715-49F2-A284-936B060BF736}
384+
{91024A93-848F-4A02-AF53-5EBE5834E23C} = {8F890C6F-9ACC-438D-928A-AD61CDA862F2}
385+
{FE7EEA55-2292-49C2-849E-D0750D16AF75} = {0BB8B634-407A-4610-A91F-11586990767A}
372386
EndGlobalSection
373387
GlobalSection(ExtensibilityGlobals) = postSolution
374388
SolutionGuid = {DC539027-9852-430C-B19F-FD035D018458}

azure-pipelines-ci.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,14 @@ jobs:
5252
- task: CmdLine@2
5353
inputs:
5454
script: |
55-
dotnet-coverage collect "dotnet test ./test/WireMock.Net.Tests/WireMock.Net.Tests.csproj --configuration Debug --no-build --framework net8.0" -f xml -o "wiremock-coverage-1.xml"
55+
dotnet-coverage collect "dotnet test ./test/WireMock.Net.Tests/WireMock.Net.Tests.csproj --configuration Debug --no-build --framework net8.0" -f xml -o "wiremock-coverage-xunit.xml"
56+
dotnet-coverage collect "dotnet test ./test/WireMock.Net.TUnitTests/WireMock.Net.TUnitTests.csproj --configuration Debug --no-build --framework net8.0" -f xml -o "wiremock-coverage-tunit.xml"
5657
displayName: 'Execute WireMock.Net.Tests with Coverage'
5758

5859
- task: CmdLine@2
5960
inputs:
6061
script: |
61-
dotnet-coverage collect "dotnet test ./test/WireMock.Net.Aspire.Tests/WireMock.Net.Aspire.Tests.csproj --configuration Debug --no-build" -f xml -o "wiremock-coverage-2.xml"
62+
dotnet-coverage collect "dotnet test ./test/WireMock.Net.Aspire.Tests/WireMock.Net.Aspire.Tests.csproj --configuration Debug --no-build" -f xml -o "wiremock-coverage-aspire.xml"
6263
displayName: 'Execute WireMock.Net.Aspire.Tests with Coverage'
6364

6465
- task: CmdLine@2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// Copyright © WireMock.Net
2+
3+
using System;
4+
using Newtonsoft.Json;
5+
using Stef.Validation;
6+
using TUnit.Core.Logging;
7+
using WireMock.Admin.Requests;
8+
using WireMock.Logging;
9+
10+
namespace WireMock.Net.TUnit;
11+
12+
/// <summary>
13+
/// When using TUnit, this class enables to log the output from WireMock.Net to the <see cref="TUnitLogger"/>.
14+
/// </summary>
15+
// ReSharper disable once InconsistentNaming
16+
public sealed class TUnitWireMockLogger : IWireMockLogger
17+
{
18+
private readonly TUnitLogger _tUnitLogger;
19+
20+
/// <summary>
21+
/// Create a new instance on the <see cref="TUnitWireMockLogger"/>.
22+
/// </summary>
23+
/// <param name="tUnitLogger">Represents a class which can be used to provide test output.</param>
24+
public TUnitWireMockLogger(TUnitLogger tUnitLogger)
25+
{
26+
_tUnitLogger = Guard.NotNull(tUnitLogger);
27+
}
28+
29+
/// <inheritdoc />
30+
public void Debug(string formatString, params object[] args)
31+
{
32+
_tUnitLogger.LogDebug(Format("Debug", formatString, args));
33+
}
34+
35+
/// <inheritdoc />
36+
public void Info(string formatString, params object[] args)
37+
{
38+
_tUnitLogger.LogInformation(Format("Info", formatString, args));
39+
}
40+
41+
/// <inheritdoc />
42+
public void Warn(string formatString, params object[] args)
43+
{
44+
_tUnitLogger.LogWarning(Format("Warning", formatString, args));
45+
}
46+
47+
/// <inheritdoc />
48+
public void Error(string formatString, params object[] args)
49+
{
50+
_tUnitLogger.LogError(Format("Error", formatString, args));
51+
}
52+
53+
/// <inheritdoc />
54+
public void Error(string formatString, Exception exception)
55+
{
56+
_tUnitLogger.LogError(Format("Error", formatString, exception.Message), exception);
57+
58+
if (exception is AggregateException ae)
59+
{
60+
ae.Handle(ex =>
61+
{
62+
_tUnitLogger.LogError(Format("Error", "Exception {0}", ex.Message), exception);
63+
return true;
64+
});
65+
}
66+
}
67+
68+
/// <inheritdoc />
69+
public void DebugRequestResponse(LogEntryModel logEntryModel, bool isAdminRequest)
70+
{
71+
var message = JsonConvert.SerializeObject(logEntryModel, Formatting.Indented);
72+
_tUnitLogger.LogDebug(Format("DebugRequestResponse", "Admin[{0}] {1}", isAdminRequest, message));
73+
}
74+
75+
private static string Format(string level, string formatString, params object[] args)
76+
{
77+
Guard.NotNull(formatString);
78+
79+
var message = args.Length > 0 ? string.Format(formatString, args) : formatString;
80+
return $"{DateTime.UtcNow} [{level}] : {message}";
81+
}
82+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<Description>Some extensions for TUnit (ITestOutputHelper)</Description>
5+
<AssemblyTitle>WireMock.Net.TUnit</AssemblyTitle>
6+
<Authors>Stef Heyenrath</Authors>
7+
<TargetFrameworks>net8.0</TargetFrameworks>
8+
<GenerateDocumentationFile>true</GenerateDocumentationFile>
9+
<AssemblyName>WireMock.Net.TUnit</AssemblyName>
10+
<RootNamespace>WireMock.Net.Tunit</RootNamespace>
11+
<PackageId>WireMock.Net.TUnit</PackageId>
12+
<PackageTags>tdd;wiremock;test;unittest;TUnit</PackageTags>
13+
<ProjectGuid>{0DE0954F-8C00-4E8D-B94A-4361FC1CB34A}</ProjectGuid>
14+
<PublishRepositoryUrl>true</PublishRepositoryUrl>
15+
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
16+
<EmbedUntrackedSources>true</EmbedUntrackedSources>
17+
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
18+
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
19+
<SignAssembly>true</SignAssembly>
20+
<AssemblyOriginatorKeyFile>../WireMock.Net/WireMock.Net.snk</AssemblyOriginatorKeyFile>
21+
<PublicSign Condition=" '$(OS)' != 'Windows_NT' ">true</PublicSign>
22+
</PropertyGroup>
23+
24+
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
25+
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
26+
</PropertyGroup>
27+
28+
<ItemGroup>
29+
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
30+
<PackageReference Include="Stef.Validation" Version="0.1.1" />
31+
<PackageReference Include="TUnit" Version="0.1.793" />
32+
</ItemGroup>
33+
34+
<ItemGroup>
35+
<ProjectReference Include="..\WireMock.Net.Abstractions\WireMock.Net.Abstractions.csproj" />
36+
</ItemGroup>
37+
38+
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Copyright © WireMock.Net
2+
3+
using WireMock.Logging;
4+
using WireMock.Net.TUnit;
5+
using WireMock.RequestBuilders;
6+
using WireMock.ResponseBuilders;
7+
using WireMock.Server;
8+
using WireMock.Settings;
9+
10+
namespace WireMock.Net.Aspire.TUnitTests;
11+
12+
// ReSharper disable once InconsistentNaming
13+
public class TUnitTests
14+
{
15+
private IWireMockLogger _logger = null!;
16+
17+
[Before(Test)]
18+
public void BeforeTest(TestContext context)
19+
{
20+
_logger = new TUnitWireMockLogger(context.GetDefaultLogger());
21+
}
22+
23+
[Test]
24+
public async Task Test_TUnitWireMockLogger()
25+
{
26+
// Assign
27+
var path = $"/foo_{Guid.NewGuid()}";
28+
29+
using var server = WireMockServer.Start(new WireMockServerSettings
30+
{
31+
Logger = _logger
32+
});
33+
34+
server
35+
.Given(Request.Create()
36+
.WithPath(path)
37+
.UsingGet())
38+
.RespondWith(Response.Create().WithBody("TUnit"));
39+
40+
// Act
41+
var response = await new HttpClient().GetStringAsync($"{server.Url}{path}").ConfigureAwait(false);
42+
43+
// Assert
44+
await Assert.That(response).IsEqualTo("TUnit");
45+
}
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<PackageReference Include="TUnit" Version="0.1.793" />
11+
</ItemGroup>
12+
13+
<ItemGroup>
14+
<ProjectReference Include="..\..\src\WireMock.Net.TUnit\WireMock.Net.TUnit.csproj" />
15+
<ProjectReference Include="..\..\src\WireMock.Net\WireMock.Net.csproj" />
16+
</ItemGroup>
17+
18+
</Project>

0 commit comments

Comments
 (0)