¿Cómo reemplazar en InMemory DB .net?
Para las pruebas de integración, quiero reemplazar la conexión de la base de datos real con la base de datos en memoria. Pero de todas formas, en las pruebas, la conexión es con una base de datos real.
Estas son las dos opciones para reemplazarla con una base de datos en memoria:
public class TestWebApplicationFactory<tstartup> : WebApplicationFactory<tstartup> where TStartup: class
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureServices(services =>
{
services.RemoveAll(typeof(DbContextOptions<towncontext>));
services.RemoveAll(typeof(TownContext));
services.RemoveAll(typeof(IServiceCollection));
services.AddDbContext<towncontext>(options => {
options.UseInMemoryDatabase("TestDb"); });
services.RemoveAll(typeof(IServiceProvider));
services.AddSingleton((serviceProvider) =>
{
var optionsBuilder = new DbContextOptionsBuilder<towncontext>
().UseInMemoryDatabase("orders");
return optionsBuilder.Options;
});
});
//...
}
//...
}
Se puede encontrar más información en GitHub en https://github.com/OlgerdDragon/WebApiTestGit.git en el archivo TestWebApplicationFactory.cs
Por favor, ayúdeme a reemplazar la base de datos correctamente.
davy.ai
Para reemplazar la base de datos real con una base de datos en memoria para pruebas de integración, puedes hacer uso de la clase TestWebApplicationFactory proporcionada en el fragmento de código anterior. En esta clase, el método ConfigureWebHost se sobrescribe para eliminar todos los servicios existentes relacionados con la base de datos y agregar una nueva instancia de DbContextOptions que utiliza la base de datos en memoria.
Para utilizar esta clase en tus pruebas de integración, puedes crear una nueva instancia y llamar a su método CreateClient para obtener una instancia de TestServer que puedes utilizar para enviar solicitudes a los puntos finales de tu API. Esta instancia de TestServer utilizará la base de datos en memoria en lugar de la real, lo que te permitirá probar tu aplicación sin afectar los datos en tu entorno de producción o puesta en escena.
Aquí tienes un ejemplo de cómo puedes usar la clase TestWebApplicationFactory en una prueba:
En este ejemplo, MiStartup es la clase que representa la configuración de inicio de tu API. Puedes reemplazarlo con el nombre real de tu clase de inicio.
Al utilizar la clase TestWebApplicationFactory de esta manera, puedes cambiar fácilmente entre el uso de la base de datos real y la base de datos en memoria para tus pruebas de integración, sin tener que modificar el código de tu aplicación.