Я не совсем уверен, о чем вы говорите, но вы не должны настраивать подобные вещи в тестовом проекте, во-первых.Вместо этого вы должны создать класс, подобный TestStartup
, и наследовать от класса Startup
SUT.В классе Startup
SUT вы должны выделить такие вещи, как настройки вашей БД и тому подобное, в виртуальные частные методы, которые затем можно переопределить на TestStartup
.Например, вы можете создать метод вроде:
private virtual void ConfigureDatabase(IServiceCollection services)
{
services.AddDbContext<MyContext>(o =>
o.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
Затем в вашем TestStartup
вы добавите что-то вроде:
private override void ConfigureDatabase(IServiceCollection services)
{
var databaseName = Guid.NewGuid().ToString();
services.AddDbContext<MyContext>(o =>
o.UseInMemoryDatabase(databaseName));
}
Затем при настройке фабрики длятестируя, вы говорите использовать TestStartup
:
var client = factory.WithWebHostBuilder(b => b.UseStartup<TestStartup>()).CreateClient();
Или вы можете создать свой собственный WebApplicationFactory
и установить его там:
public class CustomWebApplicationFactory<TStartup> : WebApplicationFactory<RazorPagesProject.Startup>
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.UseStartup<TestStartup>();
}
}
Просто помнитечто параметр общего типа TStartup
предназначен для получения сборки точки входа, поэтому вы все равно должны поместить туда Startup
.
Суть в том, что вам не нужно повторять весь ваш запускконфигурации, а затем не забудьте сохранить синхронизацию.Ваш тестовый клиент будет использовать ту же конфигурацию запуска, которую используют ваши настоящие приложения, за исключением нескольких сохраненных замен, таких как использование базы данных в памяти.