Unidad de esfuerzo prueba Entity framework 6.1.3 DB-first

c# effort entity-framework unit-testing

Pregunta

Estoy experimentando problemas al usar el marco de Esfuerzo (versión 1.1.4) para probar en unidades mi DB-layer.

Tengo una capa de base de datos utilizando Entity framework 6.1.3 y el modelo se crea utilizando el enfoque de base de datos primero, por lo que hay un archivo *.edmx que describe el modelo.

He creado una clase parcial para exponer un constructor adicional utilizado por las pruebas unitarias con un esfuerzo como este:

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

La prueba unitaria simple se ve así:

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

Cuando ejecuto la prueba de la unidad, se lanza una excepción para la línea:

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

{"El proveedor no devolvió una instancia de ProviderManifest."} Mensaje de InnerException: {"No se pudo determinar la versión de almacenamiento; se requiere una conexión de almacenamiento válida o una sugerencia de versión."}

Otras publicaciones que he encontrado sugieren cambiar el atributo ProviderManifestToken en el archivo *.edmx de "2012" a "2008". Esto parece resolver el problema pero, en cambio, me da otra excepción cuando intento usar el contexto por primera vez aquí:

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

NotSupportedException No se puede determinar el nombre del proveedor para la fábrica del proveedor del tipo 'System.Data.EntityClient.EntityProviderFactory'. Asegúrese de que el proveedor ADO.NET esté instalado o registrado en la configuración de la aplicación.

¿Alguien sabe cómo resolver este problema para poder usar el enfoque de Esfuerzo con la entidad 6.1.3 DB-first?

He podido utilizar Effort (versión 1.1.4) con éxito para realizar pruebas unitarias de las capas DB creadas en EF 4 y EF 5 con DB-first. Por eso creo que la versión EF puede ser de interés ...

Respuesta aceptada

¡Un colega mío encontró la solución a mi problema!

Aparentemente estaba usando el paquete nuget "Effort" en lugar del paquete nuget "Effort.EF6". Después de desinstalar e instalar el otro también tuve que actualizar mi App.Config con las etiquetas:

  <system.data>
    <DbProviderFactories>
      <add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory,Effort" />  
    </DbProviderFactories>
  </system.data>

  <entityFramework>
    <providers>
      <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices, Effort" />
    </providers>
  </entityFramework>

Y también incluí una llamada en SetUp para mis pruebas de unidad para registrar el proveedor de esfuerzo:

  <system.data>
    <DbProviderFactories>
      <add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory,Effort" />  
    </DbProviderFactories>
  </system.data>

  <entityFramework>
    <providers>
      <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices, Effort" />
    </providers>
  </entityFramework>

Esto solucionó el problema para mi. ¡Ojalá pueda ayudar a otros!




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é