12.6.4 Probando con SQLite

Debido a que la base de datos en memoria no es una base de datos relacional, podemos probar con una base de datos en memoria como SQLite, la cual es muy sencilla de crear y utilizar.

Para SQLite agregamos un Agrega el siguiente paquete Nuget al proyecto CaducaRest Microsoft.EntityFrameworkCore.Sqlite

Install-Package Microsoft.EntityFrameworkCore.Sqlite 

En nuestro archivo Startup.cs cambia el código para agregar un case a la sección donde configuramos la base de datos para que si el environment es IntegrationTest utilice la base de datos de SQLite

SqliteConnectionStringBuilder y como Datasource le agregamos :memory; de esta forma la creara solamente en memoria.

Pasamos la cadena de conexión y por último agregamos el contexto como UseSqlite

public void ConfigureServices(IServiceCollection services)
{
    switch (CurrentEnvironment.EnvironmentName)
    {
        case "Testing":
            //Conexión en Memoria
            services.AddDbContext<CaducaContext>(opt => 
                  opt.UseInMemoryDatabase("Caduca")
                  .ConfigureWarnings(x => x.Ignore
                     (InMemoryEventId.TransactionIgnoredWarning)));
              break;
        case "IntegrationTesting":
            var connection = new SqliteConnection
                      ("DataSource=:memory:");
            connection.Open();
             services.AddDbContext<CaducaContext>(opt => 
                           opt.UseSqlite(connection));

            break;
        default:
            //Conexión MySQL
            services.AddDbContext<CaducaContext>(options => 
                   options.UseMySql(Configuration
                     .GetConnectionString("DefaultConnection")));
            //Conexión SQL Server
            //services.AddDbContext<CaducaContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SQLServerConnection")));
            //Conexión SQL Server Azure
            //services.AddDbContext<CaducaContext>(options => options.UseSqlServer(Configuration.GetConnectionString("AzureSQLConnection")));
            break;
    }
}

Cambiamos también en nuestra clase CaducaContext en el constructor, la instrucción Database.EnsureCreated, el cual crea la base de datos de SQLite en caso de que no exista.

public CaducaContext(DbContextOptions<CaducaContext> options) 
                                                 : base(options)
{
    Database.EnsureCreated();
}

Cambiamos en nuestro proyecto CaducaRest.IntegrationTest nuestra clase Servicios.cs para que utilice el ambiente IntegrationTesting.

public static void Inicializa()
{
    //Creamos un servidor de pruebas utilizando un ambiente
    //de testing
    var builder = new WebHostBuilder().UseEnvironment("IntegrationTesting")

Puedes volver a correr tus pruebas, y agregar en Azure para que después de ejecutar las pruebas unitarias también ejecute las pruebas de integración.

azure.pipelines
- task: VSTest@2
  inputs:
    testSelector: 'testAssemblies'
    testAssemblyVer2: |
      **\CaducaRest.IntegrationTest.dll
      !**\*TestAdapter.dll
      !**\obj\**
    searchFolder: '$(System.DefaultWorkingDirectory)'

Last updated