Skapa tester med .NET Aspire
Testning är en viktig del av utvecklingen av programvara av hög kvalitet. Testning kan hjälpa dig att hitta och åtgärda buggar, förbättra prestanda och se till att koden uppfyller användarnas krav och förväntningar. Testning kan också hjälpa dig att automatisera distributionsprocessen och förhindra regressioner i framtiden. .NET Aspire tillhandahåller verktyg och bibliotek för att förenkla utveckling, testning och distribution av distribuerade program.
I den här lektionen får du lära dig hur du testar .NET Aspire-projekt med hjälp av xUnit, ett populärt testramverk för .NET. Du lär dig hur du skapar olika typer av tester, till exempel integreringstester och funktionella tester, och hur du kör dem med hjälp av .NET Aspire CLI eller Visual Studio.
Skapa ett testprojekt
Det enklaste sättet att skapa ett .NET Aspire-testprojekt är att använda testprojektmallen. Du kan använda dotnet new
kommandot för att skapa ett standardklassbiblioteksprojekt och sedan lägga till referenserna till .NET Aspire-testbiblioteken och xUnit-paketen.
dotnet new aspire-xunit
Utforska testprojektet
Följande exempeltestprojekt skapades som en del av .NET Aspire Starter-programmallen . Om du inte känner till det kan du läsa Snabbstart: Skapa ditt första .NET Aspire-projekt. .NET Aspire-testprojektet har ett projektreferensberoende på målappens värd. Överväg mallprojektet:
<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>
Den föregående projektfilen är ganska standard. NuGet-paketet PackageReference
Aspire.Hosting.Testing innehåller de typer som krävs för att skriva tester för .NET Aspire-projekt.
Malltestprojektet innehåller en WebTests
klass med ett enda test. Testet verifierar följande scenario:
- Appvärden har skapats och startats.
- Resursen
webfrontend
är tillgänglig och körs. - En HTTP-begäran kan göras till resursen
webfrontend
och returnerar ett lyckat svar (HTTP 200 OK).
Överväg följande testklass:
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);
}
}
Koden ovan:
- Förlitar sig på
DistributedApplicationTestingBuilder
att asynkront skapa appvärden.appHost
är en instans avIDistributedApplicationTestingBuilder
som representerar appvärden.- Instansen
appHost
har sin tjänstsamling konfigurerad med standardhanteraren för HTTP-motståndskraft. Mer information finns i Skapa motståndskraftiga HTTP-appar: Viktiga utvecklingsmönster.
- Har
appHost
sinBuildAsync
-metod anropad, som returnerar instansenapp
DistributedApplication
som .- Har
app
sin tjänstleverantör hämta instansen ResourceNotificationService . app
Startas asynkront.
- Har
- En
HttpClient
skapas för resursenwebfrontend
genom att anropaapp.CreateHttpClient
. resourceNotificationService
Används för att vänta tills resursenwebfrontend
är tillgänglig och körs.- En enkel HTTP GET-begäran görs till resursens
webfrontend
rot. - Testet hävdar att svarsstatuskoden är
OK
.