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í:

    private Entities CreateContext()
    {
        //var connectionString = ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
        //var connection = Effort.EntityConnectionFactory.CreateTransient(connectionString);
        //return new Entities(connection as DbConnection);

        var connection = Effort.EntityConnectionFactory.CreatePersistent("name=Entities");
        var context = new Entities(connection);
        return context;
    }

    [TestMethod]
    public void Testing_Effort_Integration()
    {
        using (var context = CreateContext())
        {
            var entity = context.TableEntity.FirstOrDefault(i=> i.Id);
            Assert.IsNotNull(entity);
        }
    }

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

var connection  = Effort.EntityConnectionFactory.CreatePersistent("name=Entities");

{"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í:

var entity = context.TableEntity.FirstOrDefault(i=> i.Id);

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:

    [SetUp]
    public void Setup()
    {
        EffortProviderConfiguration.RegisterProvider();
    }

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é