# 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 encuentran en memoria solo están 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 de 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.

```
Install-Package Microsoft.EntityFrameworkCore.InMemory 
```

Crea una nueva carpeta llamada **Datos** luego crea un clase **DatosIniciales**&#x20;

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.&#x20;

{% tabs %}
{% tab title="InicializaDatos.cs" %}

```csharp
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 = "Analgésicos"},
        };
        foreach (Categoria registro in categorias)
        {
            contexto.Categoria.Add(registro);
        }
    }
}          
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://abi.gitbook.io/net-core/8.-pruebas-unitarias/8.3-agregando-una-base-de-datos-en-memoria-para-nuestras-pruebas-unitarias.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
