test: TestBuilder für einfache DI-Konfiguration in xUnit-Tests hinzufügen

- `TestBuilder`-Klasse erstellt, um die Einrichtung der Abhängigkeitsinjektion für Unit-Tests zu vereinfachen.
- `TestBuilder` so konfiguriert, dass Dienstregistrierungen und Datenbankkontext enthalten sind.
- `TestBuilder` in das Test-Framework integriert, um eine einfache Bereitstellung von Diensten und Controllern zu ermöglichen.
This commit is contained in:
Developer 02
2024-08-27 14:41:39 +02:00
parent c362cb30e1
commit 41900e8e06
5 changed files with 132 additions and 132 deletions

View File

@@ -0,0 +1,39 @@
using DAL;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using StaffDBServer.Controllers;
using StaffDBServer.SharedControllers;
namespace XUnitWebApi.Test
{
public class TestBuilder
{
private readonly ServiceCollection _services = new();
public ServiceCollection Services => !_lazyProvider.IsValueCreated
? _services
: throw new InvalidOperationException("Service provider has already been created.");
private readonly Lazy<IServiceProvider> _lazyProvider;
public IServiceProvider Provider => _lazyProvider.Value;
public TestBuilder()
{
Services.AddStaffDBRepositories();
Services.AddScoped<WebAppUserHelper>();
Services.AddDbContext<WebApiContext>(options =>
{
const int dbTimeoutInMin = 5;
options.UseSqlServer(
"Server=SDD-VMP04-SQL17\\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd;Encrypt=false;TrustServerCertificate=True;",
opts => opts.CommandTimeout((int)TimeSpan.FromMinutes(dbTimeoutInMin).TotalSeconds));
});
Services.AddSingleton<SubsidiaryController>();
_lazyProvider = new(Services.BuildServiceProvider);
}
public void ForceBuild() => _ = Provider;
}
}