Skip to content

Commit 86bf9f8

Browse files
committed
Migrate to xunit.v3
1 parent 1d3f361 commit 86bf9f8

30 files changed

+87
-70
lines changed

Directory.Packages.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
<PackageVersion Include="bunit.generators" Version="2.0.24-preview" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
3838
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
3939
<PackageVersion Include="coverlet.msbuild" Version="6.0.2" />
40-
<PackageVersion Include="xunit" Version="2.9.1" />
41-
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
40+
<PackageVersion Include="xunit.v3" Version="0.4.0-pre.20" />
41+
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.0-pre.35" />
4242
</ItemGroup>
43-
</Project>
43+
</Project>

tests/Directory.Build.props

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,21 @@
55
<NuGetAuditLevel>critical</NuGetAuditLevel>
66
<InterceptorsPreviewNamespaces>$(InterceptorsPreviewNamespaces);Bunit</InterceptorsPreviewNamespaces>
77
</PropertyGroup>
8+
9+
<ItemGroup Condition="$(MSBuildProjectName) != 'LinkDotNet.Blog.TestUtilities'">
10+
<PackageReference Include="Microsoft.NET.Test.Sdk" />
11+
<PackageReference Include="xunit.v3" />
12+
<PackageReference Include="xunit.runner.visualstudio">
13+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
14+
<PrivateAssets>all</PrivateAssets>
15+
</PackageReference>
16+
</ItemGroup>
817

918
<ItemGroup>
1019
<PackageReference Include="bunit.generators" />
1120
<PackageReference Include="bunit" />
1221
<PackageReference Include="Shouldly" />
13-
<PackageReference Include="Microsoft.NET.Test.Sdk" />
1422
<PackageReference Include="NSubstitute" />
15-
<PackageReference Include="xunit" />
16-
<PackageReference Include="xunit.runner.visualstudio">
17-
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
18-
<PrivateAssets>all</PrivateAssets>
19-
</PackageReference>
2023
<PackageReference Include="coverlet.collector">
2124
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2225
<PrivateAssets>all</PrivateAssets>
@@ -26,11 +29,14 @@
2629
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2730
</PackageReference>
2831
</ItemGroup>
32+
33+
<ItemGroup Condition="$(MSBuildProjectName) != 'LinkDotNet.Blog.TestUtilities'">
34+
<Using Include="Xunit" />
35+
</ItemGroup>
2936

3037
<ItemGroup Label="Implicit usings">
3138
<Using Include="Shouldly" />
3239
<Using Include="NSubstitute" />
33-
<Using Include="Xunit" />
3440
<Using Include="Bunit" />
3541
<Using Include="Bunit.TestDoubles" />
3642
</ItemGroup>

tests/LinkDotNet.Blog.IntegrationTests/Infrastructure/Persistence/RavenDb/BlogPostRepositoryTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Raven.Client.Documents;
88
using Raven.Embedded;
99
using Raven.TestDriver;
10+
using TestContext = Xunit.TestContext;
1011

1112
namespace LinkDotNet.Blog.IntegrationTests.Infrastructure.Persistence.RavenDb;
1213

@@ -149,7 +150,7 @@ public async Task ShouldDelete()
149150
await sut.DeleteAsync(blogPost.Id);
150151

151152
using var session = store.OpenAsyncSession();
152-
(await session.Query<BlogPost>().AnyAsync(b => b.Id == blogPost.Id)).ShouldBeFalse();
153+
(await session.Query<BlogPost>().AnyAsync(b => b.Id == blogPost.Id, TestContext.Current.CancellationToken)).ShouldBeFalse();
153154
}
154155

155156
public override void Dispose()

tests/LinkDotNet.Blog.IntegrationTests/Infrastructure/Persistence/Sql/BlogPostRepositoryTests.cs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using LinkDotNet.Blog.TestUtilities;
66
using Microsoft.EntityFrameworkCore;
77
using Microsoft.Extensions.Caching.Memory;
8+
using TestContext = Xunit.TestContext;
89

910
namespace LinkDotNet.Blog.IntegrationTests.Infrastructure.Persistence.Sql;
1011

@@ -14,8 +15,8 @@ public sealed class BlogPostRepositoryTests : SqlDatabaseTestBase<BlogPost>
1415
public async Task ShouldLoadBlogPost()
1516
{
1617
var blogPost = BlogPost.Create("Title", "Subtitle", "Content", "url", true, tags: new[] { "Tag 1", "Tag 2" });
17-
await DbContext.BlogPosts.AddAsync(blogPost);
18-
await DbContext.SaveChangesAsync();
18+
await DbContext.BlogPosts.AddAsync(blogPost, TestContext.Current.CancellationToken);
19+
await DbContext.SaveChangesAsync(TestContext.Current.CancellationToken);
1920

2021
var blogPostFromRepo = await Repository.GetByIdAsync(blogPost.Id);
2122

@@ -38,7 +39,10 @@ public async Task ShouldSaveBlogPost()
3839

3940
await Repository.StoreAsync(blogPost);
4041

41-
var blogPostFromContext = await DbContext.BlogPosts.AsNoTracking().SingleOrDefaultAsync(s => s.Id == blogPost.Id);
42+
var blogPostFromContext = await DbContext
43+
.BlogPosts
44+
.AsNoTracking()
45+
.SingleOrDefaultAsync(s => s.Id == blogPost.Id, TestContext.Current.CancellationToken);
4246
blogPostFromContext.ShouldNotBeNull();
4347
blogPostFromContext.Title.ShouldBe("Title");
4448
blogPostFromContext.ShortDescription.ShouldBe("Subtitle");
@@ -55,8 +59,8 @@ public async Task ShouldSaveBlogPost()
5559
public async Task ShouldGetAllBlogPosts()
5660
{
5761
var blogPost = BlogPost.Create("Title", "Subtitle", "Content", "url", true, tags: new[] { "Tag 1", "Tag 2" });
58-
await DbContext.BlogPosts.AddAsync(blogPost);
59-
await DbContext.SaveChangesAsync();
62+
await DbContext.BlogPosts.AddAsync(blogPost, TestContext.Current.CancellationToken);
63+
await DbContext.SaveChangesAsync(TestContext.Current.CancellationToken);
6064

6165
var blogPostsFromRepo = await Repository.GetAllAsync();
6266

@@ -78,15 +82,15 @@ public async Task ShouldGetAllBlogPosts()
7882
public async Task ShouldBeUpdateable()
7983
{
8084
var blogPost = new BlogPostBuilder().Build();
81-
await DbContext.BlogPosts.AddAsync(blogPost);
82-
await DbContext.SaveChangesAsync();
85+
await DbContext.BlogPosts.AddAsync(blogPost, TestContext.Current.CancellationToken);
86+
await DbContext.SaveChangesAsync(TestContext.Current.CancellationToken);
8387
var blogPostFromDb = await Repository.GetByIdAsync(blogPost.Id);
8488
var updater = new BlogPostBuilder().WithTitle("New Title").Build();
8589
blogPostFromDb!.Update(updater);
8690

8791
await Repository.StoreAsync(blogPostFromDb);
8892

89-
var blogPostAfterSave = await DbContext.BlogPosts.AsNoTracking().SingleAsync(b => b.Id == blogPostFromDb.Id);
93+
var blogPostAfterSave = await DbContext.BlogPosts.AsNoTracking().SingleAsync(b => b.Id == blogPostFromDb.Id, TestContext.Current.CancellationToken);
9094
blogPostAfterSave.Title.ShouldBe("New Title");
9195
}
9296

@@ -119,7 +123,7 @@ public async Task ShouldDelete()
119123

120124
await Repository.DeleteAsync(blogPost.Id);
121125

122-
(await DbContext.BlogPosts.AsNoTracking().AnyAsync(b => b.Id == blogPost.Id)).ShouldBeFalse();
126+
(await DbContext.BlogPosts.AsNoTracking().AnyAsync(b => b.Id == blogPost.Id, TestContext.Current.CancellationToken)).ShouldBeFalse();
123127
}
124128

125129
[Fact]

tests/LinkDotNet.Blog.IntegrationTests/LinkDotNet.Blog.IntegrationTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFramework>net9.0</TargetFramework>
5+
<OutputType>Exe</OutputType>
56
<Nullable>enable</Nullable>
67
<IsPackable>false</IsPackable>
78
</PropertyGroup>

tests/LinkDotNet.Blog.IntegrationTests/SmokeTests.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using LinkDotNet.Blog.Infrastructure.Persistence;
44
using LinkDotNet.Blog.Web;
55
using Microsoft.AspNetCore.Mvc.Testing;
6+
using TestContext = Xunit.TestContext;
67

78
namespace LinkDotNet.Blog.IntegrationTests;
89

@@ -23,7 +24,7 @@ public async Task ShouldBootUpApplication()
2324
{
2425
using var client = factory.CreateClient();
2526

26-
var result = await client.GetAsync("/");
27+
var result = await client.GetAsync("/", cancellationToken: TestContext.Current.CancellationToken);
2728

2829
result.IsSuccessStatusCode.ShouldBeTrue();
2930
}
@@ -38,7 +39,7 @@ public async Task ShouldBootUpWithSqlDatabase()
3839
});
3940
using var client = sqlFactory.CreateClient();
4041

41-
var result = await client.GetAsync("/");
42+
var result = await client.GetAsync("/", cancellationToken: TestContext.Current.CancellationToken);
4243

4344
result.IsSuccessStatusCode.ShouldBeTrue();
4445
}
@@ -48,7 +49,7 @@ public async Task ShouldAllowDotsForTagSearch()
4849
{
4950
using var client = factory.CreateClient();
5051

51-
var result = await client.GetAsync("/searchByTag/.NET5");
52+
var result = await client.GetAsync("/searchByTag/.NET5", cancellationToken: TestContext.Current.CancellationToken);
5253

5354
result.IsSuccessStatusCode.ShouldBeTrue();
5455
}
@@ -58,7 +59,7 @@ public async Task ShouldAllowDotsForFreeTextSearch()
5859
{
5960
using var client = factory.CreateClient();
6061

61-
var result = await client.GetAsync("/search/.NET5");
62+
var result = await client.GetAsync("/search/.NET5", cancellationToken: TestContext.Current.CancellationToken);
6263

6364
result.IsSuccessStatusCode.ShouldBeTrue();
6465
}
@@ -71,11 +72,11 @@ public async Task RssFeedShouldBeRateLimited()
7172

7273
for (var i = 0; i < numberOfRequests - 1; i++)
7374
{
74-
var result = await client.GetAsync("/feed.rss");
75+
var result = await client.GetAsync("/feed.rss", cancellationToken: TestContext.Current.CancellationToken);
7576
result.IsSuccessStatusCode.ShouldBeTrue();
7677
}
7778

78-
var lastResult = await client.GetAsync("/feed.rss");
79+
var lastResult = await client.GetAsync("/feed.rss", cancellationToken: TestContext.Current.CancellationToken);
7980
lastResult.IsSuccessStatusCode.ShouldBeFalse();
8081
}
8182

tests/LinkDotNet.Blog.IntegrationTests/SqlDatabaseTestBase.cs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
namespace LinkDotNet.Blog.IntegrationTests;
1212

13-
public abstract class SqlDatabaseTestBase<TEntity> : IAsyncLifetime, IAsyncDisposable
13+
public abstract class SqlDatabaseTestBase<TEntity> : IAsyncDisposable
1414
where TEntity : Entity
1515
{
1616
protected SqlDatabaseTestBase()
@@ -30,17 +30,7 @@ protected SqlDatabaseTestBase()
3030
protected BlogDbContext DbContext { get; }
3131

3232
protected IDbContextFactory<BlogDbContext> DbContextFactory { get; }
33-
34-
public Task InitializeAsync()
35-
{
36-
return Task.CompletedTask;
37-
}
38-
39-
async Task IAsyncLifetime.DisposeAsync()
40-
{
41-
await DisposeAsync();
42-
}
43-
33+
4434
public async ValueTask DisposeAsync()
4535
{
4636
GC.SuppressFinalize(this);

tests/LinkDotNet.Blog.IntegrationTests/Web/Features/AboutMe/Components/TalksTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using LinkDotNet.Blog.Web.Features.Components;
88
using Microsoft.EntityFrameworkCore;
99
using Microsoft.Extensions.DependencyInjection;
10+
using TestContext = Xunit.TestContext;
1011

1112
namespace LinkDotNet.Blog.IntegrationTests.Web.Features.AboutMe.Components;
1213

@@ -61,7 +62,7 @@ public async Task WhenUserClickDeleteButtonThenDeleted()
6162

6263
cut.WaitForState(() => !cut.HasComponent<TalkEntry>());
6364
cut.HasComponent<TalkEntry>().ShouldBeFalse();
64-
(await DbContext.Talks.AnyAsync()).ShouldBeFalse();
65+
(await DbContext.Talks.AnyAsync(cancellationToken: TestContext.Current.CancellationToken)).ShouldBeFalse();
6566
}
6667

6768
[Fact]

tests/LinkDotNet.Blog.IntegrationTests/Web/Features/Admin/BlogPostEditor/CreateNewBlogPostPageTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using Microsoft.EntityFrameworkCore;
1313
using Microsoft.Extensions.DependencyInjection;
1414
using NCronJob;
15+
using TestContext = Xunit.TestContext;
1516

1617
namespace LinkDotNet.Blog.IntegrationTests.Web.Features.Admin.BlogPostEditor;
1718

@@ -36,7 +37,7 @@ public async Task ShouldSaveBlogPostOnSave()
3637

3738
TriggerNewBlogPost(newBlogPost);
3839

39-
var blogPostFromDb = await DbContext.BlogPosts.SingleOrDefaultAsync(t => t.Title == "My Title");
40+
var blogPostFromDb = await DbContext.BlogPosts.SingleOrDefaultAsync(t => t.Title == "My Title", TestContext.Current.CancellationToken);
4041
blogPostFromDb.ShouldNotBeNull();
4142
blogPostFromDb.ShortDescription.ShouldBe("My short Description");
4243
toastService.Received(1).ShowInfo("Created BlogPost My Title", null);

tests/LinkDotNet.Blog.IntegrationTests/Web/Features/Admin/BlogPostEditor/UpdateBlogPostPageTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
using Microsoft.EntityFrameworkCore;
1515
using Microsoft.Extensions.DependencyInjection;
1616
using NCronJob;
17+
using TestContext = Xunit.TestContext;
1718

1819
namespace LinkDotNet.Blog.IntegrationTests.Web.Features.Admin.BlogPostEditor;
1920

@@ -40,7 +41,7 @@ public async Task ShouldSaveBlogPostOnSave()
4041

4142
TriggerUpdate(newBlogPost);
4243

43-
var blogPostFromDb = await DbContext.BlogPosts.SingleOrDefaultAsync(t => t.Id == blogPost.Id);
44+
var blogPostFromDb = await DbContext.BlogPosts.SingleOrDefaultAsync(t => t.Id == blogPost.Id, TestContext.Current.CancellationToken);
4445
blogPostFromDb.ShouldNotBeNull();
4546
blogPostFromDb.ShortDescription.ShouldBe("My new Description");
4647
toastService.Received(1).ShowInfo("Updated BlogPost Title", null);

0 commit comments

Comments
 (0)