Prueba con el atributo Effort y TypeName


Pregunta

Me gustaría probar algo de código, y para lograrlo, necesitaría falsificar DbContext definido en DAL ( Entity Framework 6 - Code first ). La mayoría va bien, pero me encontré con un problema cuando la clase de modelo de datos está usando el atributo TypeName . Hice un esqueleto para demostrar el problema.

El modelo de datos:

[Table("Customer")]
public class Customer
{
    [Key]
    public int Id { get; set; }

    public string FirstName{ get; set; }

    public string LastName { get; set; }

    //this line causes the exception
    [Column(TypeName = "money")]
    public decimal Salary { get; set; }
}

La definicion de contexto

[Table("Customer")]
public class Customer
{
    [Key]
    public int Id { get; set; }

    public string FirstName{ get; set; }

    public string LastName { get; set; }

    //this line causes the exception
    [Column(TypeName = "money")]
    public decimal Salary { get; set; }
}

Y un método ficticio para generar un contexto falso con algunos datos:

[Table("Customer")]
public class Customer
{
    [Key]
    public int Id { get; set; }

    public string FirstName{ get; set; }

    public string LastName { get; set; }

    //this line causes the exception
    [Column(TypeName = "money")]
    public decimal Salary { get; set; }
}

El problema es el atributo TypeName . Cuando se comenta, pasan las pruebas. Pero si está habilitado, tengo un System.InvalidOperationException lanzado, diciendo

La sequencia no contiene elementos coincidentes

Para resumir, mis preguntas son:

  • ¿Hay alguna forma de utilizar Effort en las pruebas incluso si la clase del modelo de datos tiene atributos?
  • si no, ¿qué método alternativo debo utilizar para crear un DbContext falso?

Respuesta aceptada

Le aconsejaría que eche un vistazo a EntityTypeConfigurations y mueva sus asignaciones allí: http://www.entityframeworktutorial.net/code-first/entitytypeconfiguration-class.aspx

Le permitirá no tener en cuenta su base de datos actual utilizada y probar sus entidades / interfaces usándolas sin tener en cuenta Entity Framework.

También me parece que está haciendo pruebas de integración en lugar de pruebas de unidad. Para realizar la prueba unitaria, debe deshacerse del uso real de DbContext (su implementación actual está utilizando una implementación de EF concreta para DAL, pero en su lugar debe usar cierta abstracción).

Recomendaría que al menos envuelvas tu DbContext en una interfaz para que puedas burlarte de él / stub de una mejor manera:

public interface IDbContext {
      IDbSet<Customer> Customers { get; set; }
}




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