10.3 Agregando una base de datos en memoria para nuestras pruebas unitarias

Así como .Net te permite cambiar de base de datos a SQL Server, MySQL por medio de paquetes Nuget, también te permite crear una base de datos en memoria.

De esta manera puedes configurar tus pruebas para que usen tu base de datos en memoria y probar de manera fácil con datos fijos ya establecidos. También te permitiría generar un demo de tu aplicación, para que los usuarios prueben tu sistema o como capacitación y puedes reiniciar el servicio cada semana, de esta forma sus datos se enceuntran en memoria solo estan disponibles mientras no reinicies tu aplicación.

La base de datos en memoria tiene algunas desventajas:

  1. No revisa llaves foráneas, por lo tanto puedes crear registros detalles sin que exista su tabla maestra.

  2. No soporta transacciones.

Para pruebas unitarias esto no es necesario ya que estas funciones deben probarse como pruebas de integración.

Para esto agrega el siguiente paquete Nuget a tu proyecto CaducaRest, utiliza la versión 2.2.6 ya que de momento las pruebas unitarias automáticas con pipelines para bitbucket solo permite la versión 2.2 de .NetCore

Install-Package Microsoft.EntityFrameworkCore.InMemory -Version 2.2.6

Crea una nueva carpeta llamada Datos luego crea un clase DatosIniciales

En esta clase puedes crear los inserts que necesites para tus pruebas automáticas. Por ejemplo vamos a crear una prueba unitaria para validar que no registren 2 categorías con el mismo nombre.

Primero obtienes el Proveedor de la base de datos si es diferente de la base de datos en memoria no realizas ningún insert

Con la instrucción contexto.Database.EnsureCreated te aseguras que la base de datos haya sido creada.

Luego puedes crear todos los datos en memoria que necesitas.

InicializaDatos.cs
InicializaDatos.cs
public class InicializaDatos
{
public static void Inicializar(CaducaContext contexto)
{
//Si no es base de datos en memoria no se agrega nada
if (contexto.Database.ProviderName
!= "Microsoft.EntityFrameworkCore.InMemory")
return;
//Te aseguras que la base de datos haya sido creada
contexto.Database.EnsureCreated();
var categorias = new Categoria[]
{
/*01*/ new Categoria { Clave = 1, Nombre = "Análgesicos"},
};
foreach (Categoria registro in categorias)
{
contexto.Categoria.Add(registro);
}
}
}