Skip to content

Commit b832741

Browse files
authored
Use latest xUnit, MSTest + move to MTP (#924)
* Use latest xUnit, MSTest + move to MTP * Add no progress and detailed output * Fix test * Fix dotnet test call for maui
1 parent 74f15b1 commit b832741

30 files changed

+164
-146
lines changed

.github/workflows/pr-validation-maui.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,4 @@ jobs:
3939
run: dotnet build src/ClientApp/ClientApp.csproj
4040

4141
- name: Test
42-
run: dotnet test tests/ClientApp.UnitTests/ClientApp.UnitTests.csproj
42+
run: dotnet test --project tests/ClientApp.UnitTests/ClientApp.UnitTests.csproj --no-progress --output detailed

.github/workflows/pr-validation.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@ jobs:
2626
- name: Build
2727
run: dotnet build eShop.Web.slnf
2828
- name: Test
29-
run: dotnet test eShop.Web.slnf
29+
run: dotnet test --solution eShop.Web.slnf --no-build --no-progress --output detailed

Directory.Packages.props

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@
4545
<PackageVersion Include="Microsoft.Extensions.Identity.Stores" Version="10.0.0" />
4646
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.0.0" />
4747
<PackageVersion Include="Microsoft.OpenApi" Version="2.3.2" />
48-
<PackageVersion Include="MSTest.TestFramework" Version="3.10.4" />
49-
<PackageVersion Include="MSTest.TestAdapter" Version="3.10.4" />
48+
<PackageVersion Include="MSTest" Version="4.0.2" />
5049
<!-- Version together with EF -->
5150
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.0" />
5251
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.0" />
@@ -76,8 +75,6 @@
7675
<PackageVersion Include="Duende.IdentityServer.EntityFramework" Version="7.3.2" />
7776
<PackageVersion Include="Duende.IdentityServer.EntityFramework.Storage" Version="7.3.2" />
7877
<PackageVersion Include="Duende.IdentityServer.Storage" Version="7.3.2" />
79-
<!-- VS Test -->
80-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
8178
<!-- Scaffolding -->
8279
<PackageVersion Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.0-rc.1.23461.3" />
8380
<!-- Grpc -->
@@ -91,8 +88,7 @@
9188
<PackageVersion Include="Google.Protobuf" Version="3.33.0" />
9289
<PackageVersion Include="Microsoft.Web.LibraryManager.Build" Version="3.0.71" />
9390
<PackageVersion Include="System.Reflection.TypeExtensions" Version="4.7.0" />
94-
<PackageVersion Include="xunit" Version="2.9.3" />
95-
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.4" />
91+
<PackageVersion Include="xunit.v3.mtp-v2" Version="3.2.1" />
9692
<PackageVersion Include="IdentityModel" Version="7.0.0" />
9793
<PackageVersion Include="Scalar.AspNetCore" Version="2.8.6" />
9894
<!-- Before license change -->

global.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
{
22
"sdk": {
3-
"version": "10.0.100-rc.1.25451.107",
3+
"version": "10.0.100",
44
"rollForward": "latestFeature",
55
"allowPrerelease": true
6+
},
7+
"test": {
8+
"runner": "Microsoft.Testing.Platform"
9+
},
10+
"msbuild-sdks": {
11+
"MSTest.Sdk": "4.0.2"
612
}
713
}

tests/Basket.UnitTests/Basket.UnitTests.csproj

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="MSTest.Sdk">
22

33
<PropertyGroup>
44
<TargetFramework>net10.0</TargetFramework>
55
<GenerateErrorForMissingTargetingPacks>false</GenerateErrorForMissingTargetingPacks>
66
<IsPublishable>false</IsPublishable>
77
<IsPackable>false</IsPackable>
8+
<OutputType>Exe</OutputType>
89
</PropertyGroup>
910

1011
<ItemGroup>
1112
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" />
1213
<PackageReference Include="Microsoft.Extensions.Identity.Stores" />
13-
<PackageReference Include="Microsoft.NET.Test.Sdk" />
14-
<PackageReference Include="MSTest.TestAdapter" />
15-
<PackageReference Include="MSTest.TestFramework" />
1614
<PackageReference Include="NSubstitute" />
1715
<PackageReference Include="NSubstitute.Analyzers.CSharp">
1816
<PrivateAssets>all</PrivateAssets>

tests/Basket.UnitTests/BasketServiceTests.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,20 @@ namespace eShop.Basket.UnitTests;
1111
[TestClass]
1212
public class BasketServiceTests
1313
{
14+
public TestContext TestContext { get; set; }
15+
1416
[TestMethod]
1517
public async Task GetBasketReturnsEmptyForNoUser()
1618
{
1719
var mockRepository = Substitute.For<IBasketRepository>();
1820
var service = new BasketService(mockRepository, NullLogger<BasketService>.Instance);
19-
var serverCallContext = TestServerCallContext.Create();
21+
var serverCallContext = TestServerCallContext.Create(cancellationToken: TestContext.CancellationToken);
2022
serverCallContext.SetUserState("__HttpContext", new DefaultHttpContext());
2123

2224
var response = await service.GetBasket(new GetBasketRequest(), serverCallContext);
2325

2426
Assert.IsInstanceOfType<CustomerBasketResponse>(response);
25-
Assert.AreEqual(response.Items.Count(), 0);
27+
Assert.IsEmpty(response.Items);
2628
}
2729

2830
[TestMethod]
@@ -32,15 +34,15 @@ public async Task GetBasketReturnsItemsForValidUserId()
3234
List<BasketItem> items = [new BasketItem { Id = "some-id" }];
3335
mockRepository.GetBasketAsync("1").Returns(Task.FromResult(new CustomerBasket { BuyerId = "1", Items = items }));
3436
var service = new BasketService(mockRepository, NullLogger<BasketService>.Instance);
35-
var serverCallContext = TestServerCallContext.Create();
37+
var serverCallContext = TestServerCallContext.Create(cancellationToken: TestContext.CancellationToken);
3638
var httpContext = new DefaultHttpContext();
3739
httpContext.User = new ClaimsPrincipal(new ClaimsIdentity([new Claim("sub", "1")]));
3840
serverCallContext.SetUserState("__HttpContext", httpContext);
3941

4042
var response = await service.GetBasket(new GetBasketRequest(), serverCallContext);
4143

4244
Assert.IsInstanceOfType<CustomerBasketResponse>(response);
43-
Assert.AreEqual(response.Items.Count(), 1);
45+
Assert.HasCount(1, response.Items);
4446
}
4547

4648
[TestMethod]
@@ -50,13 +52,13 @@ public async Task GetBasketReturnsEmptyForInvalidUserId()
5052
List<BasketItem> items = [new BasketItem { Id = "some-id" }];
5153
mockRepository.GetBasketAsync("1").Returns(Task.FromResult(new CustomerBasket { BuyerId = "1", Items = items }));
5254
var service = new BasketService(mockRepository, NullLogger<BasketService>.Instance);
53-
var serverCallContext = TestServerCallContext.Create();
55+
var serverCallContext = TestServerCallContext.Create(cancellationToken: TestContext.CancellationToken);
5456
var httpContext = new DefaultHttpContext();
5557
serverCallContext.SetUserState("__HttpContext", httpContext);
5658

5759
var response = await service.GetBasket(new GetBasketRequest(), serverCallContext);
5860

5961
Assert.IsInstanceOfType<CustomerBasketResponse>(response);
60-
Assert.AreEqual(response.Items.Count(), 0);
62+
Assert.IsEmpty(response.Items);
6163
}
6264
}
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1-
global using System.Collections.Generic;
1+
global using System;
2+
global using System.Collections.Generic;
3+
global using System.Threading;
24
global using System.Threading.Tasks;
35
global using Microsoft.AspNetCore.Http;
46
global using Microsoft.AspNetCore.Mvc;
57
global using NSubstitute;
68
global using Microsoft.VisualStudio.TestTools.UnitTesting;
9+
10+
[assembly: Parallelize(Workers = 0, Scope = ExecutionScope.MethodLevel)]

tests/Basket.UnitTests/Helpers/TestServerCallContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Grpc.Core;
1+
using Grpc.Core;
22

33
namespace eShop.Basket.UnitTests.Helpers;
44

tests/Catalog.FunctionalTests/Catalog.FunctionalTests.csproj

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,15 @@
44
<TargetFramework>net10.0</TargetFramework>
55
<IsPublishable>false</IsPublishable>
66
<IsPackable>false</IsPackable>
7+
<OutputType>Exe</OutputType>
78
</PropertyGroup>
89

910
<ItemGroup>
1011
<PackageReference Include="Asp.Versioning.Http.Client" />
1112
<PackageReference Include="Aspire.Hosting.PostgreSQL" />
1213
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" />
1314
<PackageReference Include="Microsoft.AspNetCore.TestHost" />
14-
<PackageReference Include="Microsoft.NET.Test.Sdk" />
15-
<PackageReference Include="xunit.runner.visualstudio">
16-
<PrivateAssets>all</PrivateAssets>
17-
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
18-
</PackageReference>
19-
<PackageReference Include="xunit" />
15+
<PackageReference Include="xunit.v3.mtp-v2" />
2016
</ItemGroup>
2117

2218
<ItemGroup>

tests/Catalog.FunctionalTests/CatalogApiFixture.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
using System.Reflection;
2+
3+
using Aspire.Hosting;
4+
using Aspire.Hosting.ApplicationModel;
5+
26
using Microsoft.AspNetCore.Mvc.Testing;
37

48
namespace eShop.Catalog.FunctionalTests;
@@ -46,7 +50,7 @@ protected override IHost CreateHost(IHostBuilder builder)
4650
}
4751
}
4852

49-
public async Task InitializeAsync()
53+
public async ValueTask InitializeAsync()
5054
{
5155
await _app.StartAsync();
5256
_postgresConnectionString = await Postgres.Resource.GetConnectionStringAsync();

0 commit comments

Comments
 (0)