Soenneker.TestHosts.Integration
4.0.155
Prefix Reserved
dotnet add package Soenneker.TestHosts.Integration --version 4.0.155
NuGet\Install-Package Soenneker.TestHosts.Integration -Version 4.0.155
<PackageReference Include="Soenneker.TestHosts.Integration" Version="4.0.155" />
<PackageVersion Include="Soenneker.TestHosts.Integration" Version="4.0.155" />
<PackageReference Include="Soenneker.TestHosts.Integration" />
paket add Soenneker.TestHosts.Integration --version 4.0.155
#r "nuget: Soenneker.TestHosts.Integration, 4.0.155"
#:package Soenneker.TestHosts.Integration@4.0.155
#addin nuget:?package=Soenneker.TestHosts.Integration&version=4.0.155
#tool nuget:?package=Soenneker.TestHosts.Integration&version=4.0.155
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.86)
- Soenneker.StartupFilters.IntegrationTests (>= 4.0.119)
- Soenneker.Utils.AutoBogus (>= 4.0.929)
- Soenneker.Utils.Test.AuthHandler (>= 4.0.325)
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.155 | 0 | 8/30/2026 |
| 4.0.154 | 0 | 8/30/2026 |
| 4.0.153 | 0 | 8/30/2026 |
| 4.0.152 | 0 | 8/30/2026 |
| 4.0.151 | 4 | 8/30/2026 |
| 4.0.150 | 38 | 8/30/2026 |
| 4.0.149 | 45 | 8/30/2026 |
| 4.0.148 | 39 | 8/29/2026 |
| 4.0.147 | 36 | 8/29/2026 |
| 4.0.145 | 78 | 8/27/2026 |
| 4.0.144 | 51 | 8/27/2026 |
| 4.0.143 | 74 | 8/26/2026 |
| 4.0.142 | 73 | 8/26/2026 |
| 4.0.141 | 87 | 8/26/2026 |
| 4.0.140 | 58 | 8/26/2026 |
| 4.0.139 | 64 | 8/26/2026 |
| 4.0.138 | 116 | 8/24/2026 |
| 4.0.137 | 103 | 8/22/2026 |
| 4.0.136 | 137 | 8/21/2026 |
| 4.0.135 | 151 | 8/20/2026 |