Pruebas: Entity Framework por falsificación de contexto

Me estoy comiendo en este momento. Es como Entity Framework no es comprobable. He leído un montón de mensajes y subprocesos donde usan la unidad de trabajo o moq o el patrón de repo.

Estoy en una fase en la que no puedo cambiar gran parte de mi arquitectura de mi aplicación. La aplicación funciona completamente en este momento, pero para estar seguro de que necesito tener una alta cobertura de código, entonces la prueba es.

Para las pruebas, estoy usando el método de 'contexto falso' donde puedo usar el falso para burlarse y el real para la conexión a la base de datos.

Utilicé esto como un ejemplo.http://romiller.com/2010/09/07/ef-ctp4-tips-tricks-testing-with-fake-dbcontext/

Allí, puede ver que el contexto se divide y se utiliza como una interfaz. Me gusta:

    public interface IEmployeeContext
    {
        IDbSet Department Departments { get; }
        IDbSet Employee Employees { get; }
        int SaveChanges();
    }

    public class EmployeeContext : DbContext, IEmployeeContext
    {
        public IDbSet Department Departments { get; set; }
        public IDbSet Employee Employees { get; set; }
    }

    public class FakeEmployeeContext : IEmployeeContext
    {
        public FakeEmployeeContext()
        {
            this.Departments = new FakeDepartmentSet();
            this.Employees = new FakeEmployeeSet();
        }

        public IDbSet Department Departments { get; private set; }

        public IDbSet Employee Employees { get; private set; }

        public int SaveChanges()
        { 
         return 0; 
        }
    }

    }

Así que prueba y todo funciona. Lo único que parece que no puedo hacer es probar un controlador con .State en él donde verifico si ha cambiado Like: EntityState.Modified

Debido a que utiliza una interfaz, necesito agregarla al contexto de la interfaz. Y crea uno nuevo. O me estoy perdiendo algo ? Es probable que no sea la intención que cree el método completo en ese contexto. ¿Cómo puedo lograr que esto funcione?

Respuestas a la pregunta(3)

Su respuesta a la pregunta