Tests maken met .NET Aspire
Testen is een essentieel onderdeel van het ontwikkelen van hoogwaardige software. Testen kan u helpen fouten te vinden en op te lossen, prestaties te verbeteren en ervoor te zorgen dat uw code voldoet aan de vereisten en verwachtingen van uw gebruikers. Testen kan u ook helpen het implementatieproces te automatiseren en regressies in de toekomst te voorkomen. .NET Aspire biedt hulpprogramma's en bibliotheken om het ontwikkelen, testen en implementeren van gedistribueerde toepassingen te vereenvoudigen.
In deze les leert u hoe u .NET Aspire-projecten test met behulp van xUnit, een populair testframework voor .NET. U leert hoe u verschillende soorten tests maakt, zoals integratietests en functionele tests, en hoe u deze kunt uitvoeren met behulp van de .NET Aspire CLI of Visual Studio.
Een testproject maken
De eenvoudigste manier om een .NET Aspire-testproject te maken, is door de testprojectsjabloon te gebruiken. U kunt de dotnet new
opdracht gebruiken om een standaardklassebibliotheekproject te maken en vervolgens de verwijzingen toe te voegen aan de .NET Aspire-testbibliotheken en de xUnit-pakketten.
dotnet new aspire-xunit
Het testproject verkennen
Het volgende voorbeeldtestproject is gemaakt als onderdeel van de .NET Aspire Starter Application-sjabloon . Als u er niet bekend mee bent, raadpleegt u Quickstart: Uw eerste .NET Aspire-project bouwen. Het .NET Aspire-testproject maakt gebruik van een projectreferentieafhankelijkheid van de doel-app-host. Houd rekening met het sjabloonproject:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Aspire.Hosting.Testing" Version="8.1.0" />
<PackageReference Include="coverlet.collector" Version="6.0.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.0" />
<PackageReference Include="xunit" Version="2.9.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AspireApp.AppHost\AspireApp.AppHost.csproj" />
</ItemGroup>
<ItemGroup>
<Using Include="System.Net" />
<Using Include="Microsoft.Extensions.DependencyInjection" />
<Using Include="Aspire.Hosting.ApplicationModel" />
<Using Include="Aspire.Hosting.Testing" />
<Using Include="Xunit" />
</ItemGroup>
</Project>
Het voorgaande projectbestand is redelijk standaard. PackageReference
Het NuGet-pakket Aspire.Hosting.Testing bevat de vereiste typen voor het schrijven van tests voor .NET Aspire-projecten.
Het sjabloontestproject bevat een WebTests
klasse met één test. De test controleert het volgende scenario:
- De app-host is gemaakt en gestart.
- De
webfrontend
resource is beschikbaar en wordt uitgevoerd. - Een HTTP-aanvraag kan worden ingediend bij de
webfrontend
resource en retourneert een geslaagd antwoord (HTTP 200 OK).
Houd rekening met de volgende testklasse:
namespace AspireApp.Tests;
public class WebTests
{
[Fact]
public async Task GetWebResourceRootReturnsOkStatusCode()
{
// Arrange
var appHost = await DistributedApplicationTestingBuilder
.CreateAsync<Projects.AspireApp_AppHost>();
appHost.Services.ConfigureHttpClientDefaults(clientBuilder =>
{
clientBuilder.AddStandardResilienceHandler();
});
await using var app = await appHost.BuildAsync();
var resourceNotificationService = app.Services
.GetRequiredService<ResourceNotificationService>();
await app.StartAsync();
// Act
var httpClient = app.CreateHttpClient("webfrontend");
await resourceNotificationService.WaitForResourceAsync(
"webfrontend",
KnownResourceStates.Running
)
.WaitAsync(TimeSpan.FromSeconds(30));
var response = await httpClient.GetAsync("/");
// Assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}
}
Met de voorgaande code wordt:
- Is afhankelijk van het
DistributedApplicationTestingBuilder
asynchroon maken van de app-host.- Het
appHost
is een instantie vanIDistributedApplicationTestingBuilder
die de app-host vertegenwoordigt. - Het
appHost
exemplaar heeft de serviceverzameling geconfigureerd met de standaard HTTP-tolerantiehandler. Zie Tolerante HTTP-apps bouwen voor meer informatie: Belangrijke ontwikkelingspatronen.
- Het
- De
appHost
methode isBuildAsync
aangeroepen, waardoor hetDistributedApplication
exemplaar wordt geretourneerd als deapp
.- De
app
serviceprovider heeft het ResourceNotificationService exemplaar. - De
app
is asynchroon gestart.
- De
- Er
HttpClient
wordt een gemaakt voor dewebfrontend
resource door aan te roepenapp.CreateHttpClient
. - De
resourceNotificationService
resource wordt gebruikt om te wachten totdat dewebfrontend
resource beschikbaar is en wordt uitgevoerd. - Er wordt een eenvoudige HTTP GET-aanvraag gedaan in de hoofdmap van de
webfrontend
resource. - De test bevestigt dat de antwoordstatuscode is
OK
.