Base de datos burlona usando Entity Framework y Dapper

c# dapper database entity-framework unit-testing

Pregunta

Estoy desarrollando un sistema en c # donde, por razones específicas, estamos utilizando Entity Framework y Dapper: en algunos métodos, usamos Dapper y en otros, usamos Entity Framework.

Necesitamos desarrollar ahora algunas pruebas unitarias. He estado leyendo algunos enfoques para burlar una base de datos a pruebas unitarias. Sin embargo, la mayoría de los enfoques parecen específicos para EF o Dapper.

¿Puede sugerir un buen enfoque donde pueda simular una base de datos, simultáneamente, para ejecutar pruebas unitarias que usan EF y Dapper?

Por ejemplo: en una prueba específica, obtendré datos usando Dapper, luego usaré estos datos para obtener otros datos usando EF.

Gracias de antemano.

Respuesta popular

Una opción que requiere una base de datos de prueba es usar dbsafe. https://github.com/dbsafe/dbsafe También tiene un paquete NuGet.

"Las pruebas pueden reutilizarse si la implementación o la tecnología utilizada por el DAL cambia".

dbsafe proporciona métodos para rellenar una base de datos, ejecutar comandos SQL y comparar datos esperados con datos reales.

Utiliza uno o más archivos de entrada xml con scripts y conjuntos de datos SQL.

<?xml version="1.0" encoding="utf-8" ?>
<dbTest>
  <scripts>
    <script name="delete-products">
      DELETE [dbo].[Product];
    </script>

    <script name="delete-categories">
      DELETE [dbo].[Category];
    </script>
  </scripts>

  <datasets>
    <dataset name="categories" setIdentityInsert="true" table="Category">
      <data>
        <row Id="1" Name="category-1" />
        <row Id="2" Name="category-2" />
        <row Id="3" Name="category-3" />
      </data>
    </dataset>

    <dataset name="suppliers" setIdentityInsert="true" table="Supplier">
      <data>
        <row Id="1" Name="supplier-1" ContactName="contact-name-1" ContactPhone="100-200-0001" ContactEmail="email-1@test.com" />
        <row Id="2" Name="supplier-2" ContactName="contact-name-2" ContactPhone="100-200-0002" ContactEmail="email-2@test.com" />
        <row Id="3" Name="supplier-3" ContactName="contact-name-3" ContactPhone="100-200-0003" ContactEmail="email-3@test.com" />
      </data>
    </dataset>  
  </datasets>
</dbTest>  

Los elementos son comandos SQL que se pueden ejecutar en cualquier momento durante la prueba. Ej. Limpiar tablas, seleccionar datos reales.

Los elementos contienen datos que se pueden usar para rellenar una tabla o como los datos esperados.

dbsafe admite pruebas de unidad de escritura utilizando el patrón AAA (Organizar, Actuar, Asertar).

Organizar inicializa los objetos y establece el valor de los datos que se pasan al método bajo prueba.

Método ExecuteScripts se puede utilizar para ejecutar scripts para eliminar registros antiguos. Método LoadTables se puede utilizar para llenar tablas.

Act invoca el método bajo prueba con los parámetros dispuestos.

Assert verifica que la acción del método bajo prueba se comporte como se espera.

Método AssertDatasetVsScript se puede usar para comparar datos esperados con datos reales en la base de datos.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué