Vytváření testů pomocí .NET Aspire
Testování je důležitou součástí vývoje vysoce kvalitního softwaru. Testování vám pomůže najít a opravit chyby, zlepšit výkon a zajistit, aby váš kód splňoval požadavky a očekávání uživatelů. Testování vám také pomůže automatizovat proces nasazení a zabránit regresím v budoucnu. .NET Aspire poskytuje nástroje a knihovny pro zjednodušení vývoje, testování a nasazení distribuovaných aplikací.
V této lekci se naučíte testovat projekty .NET Aspire pomocí xUnit, což je oblíbená testovací architektura pro .NET. Naučíte se vytvářet různé typy testů, jako jsou integrační testy a funkční testy a jak je spustit pomocí rozhraní příkazového řádku .NET nebo sady Visual Studio.
Vytvoření testovacího projektu
Nejjednodušší způsob, jak vytvořit projekt testu .NET Aspire, je použít šablonu testovacího projektu. Pomocí příkazu můžete dotnet new
vytvořit standardní projekt knihovny tříd a pak přidat odkazy na knihovny testování .NET Aspire a balíčky xUnit.
dotnet new aspire-xunit
Prozkoumání testovacího projektu
Následující ukázkový testovací projekt byl vytvořen jako součást šablony aplikace .NET Aspire Starter. Pokud ho neznáte, přečtěte si článek Rychlý start: Sestavení prvního projektu .NET Aspire. Projekt testu .NET Aspire přebírá závislost odkazu na projekt na hostitele cílové aplikace. Zvažte projekt šablony:
<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>
Předchozí soubor projektu je poměrně standardní. PackageReference
Existuje balíček NuGet Aspire.Hosting.Testing, který obsahuje požadované typy pro zápis testů pro projekty .NET Aspire.
Projekt testu šablony obsahuje WebTests
třídu s jedním testem. Test ověří následující scénář:
- Hostitel aplikace se úspěšně vytvořil a spustil.
- Prostředek
webfrontend
je dostupný a spuštěný. - Požadavek HTTP je možné provést pro
webfrontend
prostředek a vrátit úspěšnou odpověď (HTTP 200 OK).
Vezměte v úvahu následující testovací třídu:
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);
}
}
Předchozí kód:
- Spoléhá na
DistributedApplicationTestingBuilder
asynchronní vytvoření hostitele aplikace.- Jedná se
appHost
o instanciIDistributedApplicationTestingBuilder
, která představuje hostitele aplikace. - Instance
appHost
má svou kolekci služeb nakonfigurovanou standardní obslužnou rutinu odolnosti HTTP. Další informace najdete v tématu Vytváření odolných aplikací HTTP: Klíčové vývojové vzory.
- Jedná se
- Má
appHost
svouBuildAsync
metodu vyvolá, která vrátíDistributedApplication
instanci jakoapp
.- Má
app
svého poskytovatele služeb získat ResourceNotificationService instanci. - Spustí se
app
asynchronně.
- Má
- Vytvoří se
HttpClient
prowebfrontend
prostředek volánímapp.CreateHttpClient
. - Slouží
resourceNotificationService
k čekání nawebfrontend
dostupnost a spuštění prostředku. - V kořenovém
webfrontend
adresáři prostředku se vytvoří jednoduchý požadavek HTTP GET. - Test tvrdí, že stavový kód odpovědi je
OK
.