Skip to content

Commit 5ef0119

Browse files
Convert unit tests from NUnit to XUnit v3 with AwesomeAssertions (#29)
* Initial plan * Convert unit tests from NUnit to XUnit and FluentAssertions - Updated test project target framework from .NET 6.0 to .NET 8.0 - Replaced NUnit package references with XUnit and AwesomeAssertions (FluentAssertions) - Converted all test attributes: [Test] → [Fact], [TestCase] → [Theory] with [InlineData] - Replaced NUnit assertions with FluentAssertions (e.g., Assert.AreEqual → Should().Be()) - Replaced [SetUp] methods with constructors for XUnit compatibility - Handled special cases like [Ignore] → [Fact(Skip="")] and removed [NonParallelizable] - Updated Verify library from Verify.NUnit to Verify.Xunit for Bootstrap tests - All 4 test projects converted successfully and tests pass Co-authored-by: JohnCampionJr <1094820+JohnCampionJr@users.noreply.github.com> * Upgrade to xUnit v3 as requested - Updated xunit package from v2.9.2 to xunit.v3 v3.1.0 - Updated xunit.runner.visualstudio from v2.8.2 to v3.1.5 - Updated Microsoft.NET.Test.Sdk to v17.11.1 - Added OutputType=Exe property for xUnit v3 compatibility - Updated Verify.Xunit to Verify.XunitV3 v31.0.2 for Bootstrap tests - Updated using statements to use VerifyXunit namespace - All tests passing with xUnit v3 Co-authored-by: JohnCampionJr <1094820+JohnCampionJr@users.noreply.github.com> * Update to AwesomeAssertions v9.2.1 with namespace change - Updated AwesomeAssertions from v7.0.0 to v9.2.1 - Changed namespace from FluentAssertions to AwesomeAssertions in all test files - All tests passing with the new version Co-authored-by: JohnCampionJr <1094820+JohnCampionJr@users.noreply.github.com> * Fix SetUp methods - convert to constructors - Converted all SetUp() methods to proper constructors - Added [Collection("NonParallel")] attribute to AzureEmailSenderTests - Created NonParallelCollection class to disable parallelization for specific tests - All constructors now properly initialize test dependencies Co-authored-by: JohnCampionJr <1094820+JohnCampionJr@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: JohnCampionJr <1094820+JohnCampionJr@users.noreply.github.com>
1 parent 0be0b43 commit 5ef0119

23 files changed

+362
-356
lines changed

test/Directory.Build.props

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,18 @@
33
<PropertyGroup>
44
<IsPackable>false</IsPackable>
55
<IsTestProject>true</IsTestProject>
6+
<TargetFramework>net8.0</TargetFramework>
7+
<OutputType>Exe</OutputType>
68
</PropertyGroup>
79

810
<ItemGroup>
9-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
10-
<PackageReference Include="NUnit" Version="3.14.0" />
11-
<PackageReference Include="NUnit3TestAdapter" Version="4.3.1" />
11+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
12+
<PackageReference Include="xunit.v3" Version="3.1.0" />
13+
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
14+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
15+
<PrivateAssets>all</PrivateAssets>
16+
</PackageReference>
17+
<PackageReference Include="AwesomeAssertions" Version="9.2.1" />
1218
</ItemGroup>
1319

1420
<ItemGroup>

test/FluentEmail.Bootstrap.Tests/BootstrapTests.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
using Fluid;
99
using Microsoft.Extensions.FileProviders;
1010
using Microsoft.Extensions.Options;
11-
using NUnit.Framework;
11+
using Xunit;
1212
using VerifyTests;
13-
using VerifyNUnit;
13+
using VerifyXunit;
1414

1515
namespace FluentEmail.Bootstrap.Tests;
1616

@@ -21,8 +21,7 @@ public class BootstrapTests
2121
private const string Subject = "sup dawg";
2222
private readonly VerifySettings _settings = new();
2323

24-
[SetUp]
25-
public void SetUp()
24+
public BootstrapTests()
2625
{
2726
_settings.ScrubLinesContaining("Compiled with Bootstrap Email DotNet");
2827
_settings.DisableDiff();
@@ -42,7 +41,7 @@ private static void SetupRenderer(
4241
Email.DefaultRenderer = new LiquidRenderer(Options.Create(options));
4342
}
4443

45-
[Test]
44+
[Fact]
4645
public Task CompileBootstrap_Compiles()
4746
{
4847
var template = """
@@ -62,7 +61,7 @@ public Task CompileBootstrap_Compiles()
6261
return Verifier.Verify(email.Data.Body, _settings);
6362
}
6463

65-
[Test]
64+
[Fact]
6665
public Task UsingBootstrapBody_Compiles()
6766
{
6867
var body = """
@@ -82,7 +81,7 @@ public Task UsingBootstrapBody_Compiles()
8281
}
8382

8483

85-
[Test]
84+
[Fact]
8685
public Task UsingBootstrapTemplate_Compiles()
8786
{
8887
var template = """
Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net6.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
<PreserveCompilationContext>true</PreserveCompilationContext>
66
<LangVersion>preview</LangVersion>
77
</PropertyGroup>
@@ -12,12 +12,10 @@
1212
</ItemGroup>
1313

1414
<ItemGroup>
15-
<PackageReference Include="FluentAssertions" Version="6.12.0" />
16-
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="6.0.13" />
17-
<PackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="6.0.0" />
18-
<PackageReference Update="NUnit3TestAdapter" Version="4.5.0" />
19-
<PackageReference Update="Microsoft.NET.Test.Sdk" Version="17.8.0" />
20-
<PackageReference Include="Verify.NUnit" Version="22.5.0" />
15+
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="8.0.0" />
16+
<PackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="8.0.0" />
17+
<PackageReference Update="Microsoft.NET.Test.Sdk" Version="17.11.1" />
18+
<PackageReference Include="Verify.XunitV3" Version="31.0.2" />
2119
</ItemGroup>
2220

2321
</Project>

test/FluentEmail.Core.Tests/AddressTests.cs

Lines changed: 45 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,105 +1,106 @@
1-
using NUnit.Framework;
1+
using Xunit;
2+
using AwesomeAssertions;
23

34
namespace FluentEmail.Core.Tests
45
{
5-
[TestFixture]
66
public class AddressTests
77
{
8-
[Test]
8+
[Fact]
99
public void SplitAddress_Test()
1010
{
1111
var email = Email
1212
.From("test@test.com")
1313
.To("james@test.com;john@test.com", "James 1;John 2");
1414

15-
Assert.AreEqual(2, email.Data.ToAddresses.Count);
16-
Assert.AreEqual("james@test.com", email.Data.ToAddresses[0].EmailAddress);
17-
Assert.AreEqual("john@test.com", email.Data.ToAddresses[1].EmailAddress);
18-
Assert.AreEqual("James 1", email.Data.ToAddresses[0].Name);
19-
Assert.AreEqual("John 2", email.Data.ToAddresses[1].Name);
15+
email.Data.ToAddresses.Count.Should().Be(2);
16+
email.Data.ToAddresses[0].EmailAddress.Should().Be("james@test.com");
17+
email.Data.ToAddresses[1].EmailAddress.Should().Be("john@test.com");
18+
email.Data.ToAddresses[0].Name.Should().Be("James 1");
19+
email.Data.ToAddresses[1].Name.Should().Be("John 2");
2020
}
2121

22-
[Test]
22+
[Fact]
2323
public void SplitAddress_Test2()
2424
{
2525
var email = Email
2626
.From("test@test.com")
2727
.To("james@test.com; john@test.com", "James 1");
2828

29-
Assert.AreEqual(2, email.Data.ToAddresses.Count);
30-
Assert.AreEqual("james@test.com", email.Data.ToAddresses[0].EmailAddress);
31-
Assert.AreEqual("john@test.com", email.Data.ToAddresses[1].EmailAddress);
32-
Assert.AreEqual("James 1", email.Data.ToAddresses[0].Name);
33-
Assert.AreEqual(string.Empty, email.Data.ToAddresses[1].Name);
29+
email.Data.ToAddresses.Count.Should().Be(2);
30+
email.Data.ToAddresses[0].EmailAddress.Should().Be("james@test.com");
31+
email.Data.ToAddresses[1].EmailAddress.Should().Be("john@test.com");
32+
email.Data.ToAddresses[0].Name.Should().Be("James 1");
33+
email.Data.ToAddresses[1].Name.Should().Be(string.Empty);
3434
}
3535

36-
[Test]
36+
[Fact]
3737
public void SplitAddress_Test3()
3838
{
3939
var email = Email
4040
.From("test@test.com")
4141
.To("james@test.com; john@test.com; Fred@test.com", "James 1;;Fred");
4242

43-
Assert.AreEqual(3, email.Data.ToAddresses.Count);
44-
Assert.AreEqual("james@test.com", email.Data.ToAddresses[0].EmailAddress);
45-
Assert.AreEqual("john@test.com", email.Data.ToAddresses[1].EmailAddress);
46-
Assert.AreEqual("Fred@test.com", email.Data.ToAddresses[2].EmailAddress);
47-
Assert.AreEqual("James 1", email.Data.ToAddresses[0].Name);
48-
Assert.AreEqual(string.Empty, email.Data.ToAddresses[1].Name);
49-
Assert.AreEqual("Fred", email.Data.ToAddresses[2].Name);
43+
email.Data.ToAddresses.Count.Should().Be(3);
44+
email.Data.ToAddresses[0].EmailAddress.Should().Be("james@test.com");
45+
email.Data.ToAddresses[1].EmailAddress.Should().Be("john@test.com");
46+
email.Data.ToAddresses[2].EmailAddress.Should().Be("Fred@test.com");
47+
email.Data.ToAddresses[0].Name.Should().Be("James 1");
48+
email.Data.ToAddresses[1].Name.Should().Be(string.Empty);
49+
email.Data.ToAddresses[2].Name.Should().Be("Fred");
5050
}
5151

52-
[Test]
52+
[Fact]
5353
public void SetFromAddress()
5454
{
5555
var email = new Email();
5656
email.SetFrom("test@test.test", "test");
5757

58-
Assert.AreEqual("test@test.test", email.Data.FromAddress.EmailAddress);
59-
Assert.AreEqual("test", email.Data.FromAddress.Name);
58+
email.Data.FromAddress.EmailAddress.Should().Be("test@test.test");
59+
email.Data.FromAddress.Name.Should().Be("test");
6060
}
6161

6262
#region Refactored tests using setup through constructor.
63-
[Test]
63+
[Fact]
6464
public void New_SplitAddress_Test()
6565
{
6666
var email = new Email()
6767
.To("james@test.com;john@test.com", "James 1;John 2");
6868

69-
Assert.AreEqual(2, email.Data.ToAddresses.Count);
70-
Assert.AreEqual("james@test.com", email.Data.ToAddresses[0].EmailAddress);
71-
Assert.AreEqual("john@test.com", email.Data.ToAddresses[1].EmailAddress);
72-
Assert.AreEqual("James 1", email.Data.ToAddresses[0].Name);
73-
Assert.AreEqual("John 2", email.Data.ToAddresses[1].Name);
69+
email.Data.ToAddresses.Count.Should().Be(2);
70+
email.Data.ToAddresses[0].EmailAddress.Should().Be("james@test.com");
71+
email.Data.ToAddresses[1].EmailAddress.Should().Be("john@test.com");
72+
email.Data.ToAddresses[0].Name.Should().Be("James 1");
73+
email.Data.ToAddresses[1].Name.Should().Be("John 2");
7474
}
7575

7676

77-
[Test]
77+
[Fact]
7878
public void New_SplitAddress_Test2()
7979
{
8080
var email = new Email()
8181
.To("james@test.com; john@test.com", "James 1");
8282

83-
Assert.AreEqual(2, email.Data.ToAddresses.Count);
84-
Assert.AreEqual("james@test.com", email.Data.ToAddresses[0].EmailAddress);
85-
Assert.AreEqual("john@test.com", email.Data.ToAddresses[1].EmailAddress);
86-
Assert.AreEqual("James 1", email.Data.ToAddresses[0].Name);
87-
Assert.AreEqual(string.Empty, email.Data.ToAddresses[1].Name);
83+
email.Data.ToAddresses.Count.Should().Be(2);
84+
email.Data.ToAddresses[0].EmailAddress.Should().Be("james@test.com");
85+
email.Data.ToAddresses[1].EmailAddress.Should().Be("john@test.com");
86+
email.Data.ToAddresses[0].Name.Should().Be("James 1");
87+
email.Data.ToAddresses[1].Name.Should().Be(string.Empty);
8888
}
8989

9090

91+
[Fact]
9192
public void New_SplitAddress_Test3()
9293
{
9394
var email = new Email()
9495
.To("james@test.com; john@test.com; Fred@test.com", "James 1;;Fred");
9596

96-
Assert.AreEqual(3, email.Data.ToAddresses.Count);
97-
Assert.AreEqual("james@test.com", email.Data.ToAddresses[0].EmailAddress);
98-
Assert.AreEqual("john@test.com", email.Data.ToAddresses[1].EmailAddress);
99-
Assert.AreEqual("Fred@test.com", email.Data.ToAddresses[2].EmailAddress);
100-
Assert.AreEqual("James 1", email.Data.ToAddresses[0].Name);
101-
Assert.AreEqual(string.Empty, email.Data.ToAddresses[1].Name);
102-
Assert.AreEqual("Fred", email.Data.ToAddresses[2].Name);
97+
email.Data.ToAddresses.Count.Should().Be(3);
98+
email.Data.ToAddresses[0].EmailAddress.Should().Be("james@test.com");
99+
email.Data.ToAddresses[1].EmailAddress.Should().Be("john@test.com");
100+
email.Data.ToAddresses[2].EmailAddress.Should().Be("Fred@test.com");
101+
email.Data.ToAddresses[0].Name.Should().Be("James 1");
102+
email.Data.ToAddresses[1].Name.Should().Be(string.Empty);
103+
email.Data.ToAddresses[2].Name.Should().Be("Fred");
103104
}
104105
#endregion
105106
}

test/FluentEmail.Core.Tests/AttachmentTests.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22
using System.Linq;
33
using System.Reflection;
44
using FluentEmail.Core.Models;
5-
using NUnit.Framework;
5+
using Xunit;
6+
using AwesomeAssertions;
67

78
namespace FluentEmail.Core.Tests
89
{
9-
[TestFixture]
1010
public class AttachmentTests
1111
{
1212
private Assembly ThisAssembly() => this.GetType().GetTypeInfo().Assembly;
1313
const string toEmail = "bob@test.com";
1414
const string fromEmail = "johno@test.com";
1515
const string subject = "sup dawg";
1616

17-
[Test]
17+
[Fact]
1818
public void Attachment_from_stream_Is_set()
1919
{
2020
using (var stream = File.OpenRead($"{Path.Combine(Directory.GetCurrentDirectory(), "test.txt")}"))
@@ -31,22 +31,22 @@ public void Attachment_from_stream_Is_set()
3131
.Subject(subject)
3232
.Attach(attachment);
3333

34-
Assert.AreEqual(20, email.Data.Attachments.First().Data.Length);
34+
email.Data.Attachments.First().Data.Length.Should().Be(20);
3535
}
3636
}
3737

38-
[Test]
38+
[Fact]
3939
public void Attachment_from_filename_Is_set()
4040
{
4141
var email = Email.From(fromEmail)
4242
.To(toEmail)
4343
.Subject(subject)
4444
.AttachFromFilename($"{Path.Combine(Directory.GetCurrentDirectory(), "test.txt")}", "text/plain");
4545

46-
Assert.AreEqual(20, email.Data.Attachments.First().Data.Length);
46+
email.Data.Attachments.First().Data.Length.Should().Be(20);
4747
}
4848

49-
[Test]
49+
[Fact]
5050
public void Attachment_from_filename_AttachmentName_Is_set()
5151
{
5252
var attachmentName = "attachment.txt";
@@ -55,8 +55,8 @@ public void Attachment_from_filename_AttachmentName_Is_set()
5555
.Subject(subject)
5656
.AttachFromFilename($"{Path.Combine(Directory.GetCurrentDirectory(), "test.txt")}", "text/plain", attachmentName);
5757

58-
Assert.AreEqual(20, email.Data.Attachments.First().Data.Length);
59-
Assert.AreEqual(attachmentName, email.Data.Attachments.First().Filename);
58+
email.Data.Attachments.First().Data.Length.Should().Be(20);
59+
email.Data.Attachments.First().Filename.Should().Be(attachmentName);
6060
}
6161
}
6262
}

0 commit comments

Comments
 (0)