Soenneker.TestHosts.Integration
4.0.160
Prefix Reserved
See the version list below for details.
dotnet add package Soenneker.TestHosts.Integration --version 4.0.160
NuGet\Install-Package Soenneker.TestHosts.Integration -Version 4.0.160
<PackageReference Include="Soenneker.TestHosts.Integration" Version="4.0.160" />
<PackageVersion Include="Soenneker.TestHosts.Integration" Version="4.0.160" />
<PackageReference Include="Soenneker.TestHosts.Integration" />
paket add Soenneker.TestHosts.Integration --version 4.0.160
#r "nuget: Soenneker.TestHosts.Integration, 4.0.160"
#:package Soenneker.TestHosts.Integration@4.0.160
#addin nuget:?package=Soenneker.TestHosts.Integration&version=4.0.160
#tool nuget:?package=Soenneker.TestHosts.Integration&version=4.0.160
Soenneker.TestHosts.Integration
A TUnit-compatible host for lazily creating and sharing configured ASP.NET Core WebApplicationFactory instances.
Installation
dotnet add package Soenneker.TestHosts.Integration
Define the shared host
using Soenneker.TestHosts.Integration;
public sealed class Host : IntegrationTestHost
{
public override Task InitializeAsync()
{
RegisterFactory<Api.Program>("Api");
return base.InitializeAsync();
}
}
Call RegisterFactory<TEntryPoint> before requesting that type. Registration is lazy: the application is not built until the factory's Value is first used. Registering the same entry-point type again has no effect.
Use it from TUnit
using TUnit.Core;
[ClassDataSource<Host>(Shared = SharedType.PerTestSession)]
public sealed class HealthTests
{
private readonly Host _host;
public HealthTests(Host host)
{
_host = host;
}
[Test]
public async Task Health_is_available()
{
var factory = _host.GetFactory<Api.Program>().Value;
using HttpClient client = factory.CreateClient();
using HttpResponseMessage response = await client.GetAsync("/health");
await Assert.That(response.IsSuccessStatusCode).IsTrue();
}
}
TUnit initializes the host's Bogus Faker and AutoFaker and disposes every factory that was actually created. The host itself owns those factories; tests should dispose clients and responses, not the shared factory.
Test-host configuration
For each registered project name, the host requires an appsettings.json at the path returned by IntegrationTestHost.GetAppSettingsPath(projectName). That path is <parent of AppContext.BaseDirectory>/<projectName>/appsettings.json; missing files fail factory creation.
Each factory also installs the test authentication scheme, JWT utilities, loopback-address middleware, and a Serilog sink for the active TUnit context. The loopback rewrite is test-only and should not be copied into production startup.
GetFactory<TEntryPoint>() returns the registered Lazy<WebApplicationFactory<TEntryPoint>> and throws when that entry point was never registered.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.AspNetCore.Mvc.Testing (>= 10.0.11)
- Serilog.AspNetCore (>= 10.0.0)
- Serilog.Sinks.Async (>= 2.1.0)
- Soenneker.Enums.DeployEnvironment (>= 4.0.236)
- Soenneker.Serilog.Sinks.TUnit (>= 4.0.89)
- Soenneker.StartupFilters.IntegrationTests (>= 4.0.121)
- Soenneker.Utils.AutoBogus (>= 4.0.939)
- Soenneker.Utils.Test.AuthHandler (>= 4.0.335)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Soenneker.TestHosts.Integration:
| Package | Downloads |
|---|---|
|
Soenneker.Tests.Integration
A TUnit base class for integration tests that use a shared WebApplicationFactory host. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.0.163 | 0 | 9/1/2026 |
| 4.0.162 | 0 | 9/1/2026 |
| 4.0.161 | 35 | 9/1/2026 |
| 4.0.160 | 46 | 8/31/2026 |
| 4.0.159 | 54 | 8/31/2026 |
| 4.0.158 | 40 | 8/31/2026 |
| 4.0.157 | 43 | 8/31/2026 |
| 4.0.156 | 43 | 8/31/2026 |
| 4.0.155 | 78 | 8/30/2026 |
| 4.0.154 | 42 | 8/30/2026 |
| 4.0.153 | 49 | 8/30/2026 |
| 4.0.152 | 74 | 8/30/2026 |
| 4.0.151 | 45 | 8/30/2026 |
| 4.0.150 | 51 | 8/30/2026 |
| 4.0.149 | 65 | 8/30/2026 |
| 4.0.148 | 48 | 8/29/2026 |
| 4.0.147 | 44 | 8/29/2026 |
| 4.0.145 | 94 | 8/27/2026 |
| 4.0.144 | 62 | 8/27/2026 |
| 4.0.143 | 83 | 8/26/2026 |