public static void Setup(TestServiceProvider services, Action <CardOverflowDb> setupDb) { if (!services.IsProviderInitialized) { services.AddBlazoredToast(); services.AddScoped <NavigationManager, MockNavigationManager>(); services.AddBootstrapCss(); services.AddTransient <IValidator <FollowCommandViewModel>, FollowCommandViewModelValidator>(); services.AddSingleton <DbExecutor>(); services.AddSingleton <TimeProvider>(); services.AddSingleton <Scheduler>(); services.AddSingleton <RandomProvider>(); services.AddDbContextPool <CardOverflowDb>(x => x.UseInMemoryDatabase(Guid.NewGuid().ToString())); services.AddSingleton <Func <Task <NpgsqlConnection> > >(_ => async() => { var conn = new NpgsqlConnection("Host=localhost;Database=CardOverflow;Username=postgres;"); await conn.OpenAsync(); return(conn); }); } using var databaseContext = services.GetService <CardOverflowDb>(); databaseContext.Database.EnsureDeleted(); databaseContext.Database.EnsureCreated(); setupDb(databaseContext); databaseContext.SaveChanges(); foreach (var entity in databaseContext.ChangeTracker.Entries()) { entity.State = EntityState.Detached; } }