Estoy abstrayendo mi DbContext en un intento de abordar Separate of Concerns y hacer que mi código sea comprobable por unidad. Para hacer eso, he creado la siguiente interfaz.En caso de que el proyecto de prueba unitaria tenga referencia a dll de EF cuando se abstraiga el contexto
Esta interfaz a continuación se aloja en la Asamblea llamada AllInterfaces. Este proyecto tiene una referencia a EF dll debido a IDbSet en la declaración a continuación.
public interface ISalesContext : IDisposable
{
IDbSet<Customer> Customers { get; }
IDbSet<Order> Orders { get; }
IDbSet<Product> Products { get; }
}
También creé un conjunto de db falso de la siguiente manera.
public class FakeDataSet<T> : IDbSet<T> where T: class, new()
{
.......
}
Por lo tanto, para mi objeto Cliente, este conjunto de datos falso se muestra a continuación.
public class FakeCustomerDbSet : FakeDbSet<Customer>
{
..............
}
Luego creé mi contexto falso de la siguiente manera.
public class FakeSalesContext : ISalesContext
{
public FakeSalesContext()
{
Customers = new FakeCustomerDbSet();
}
public IDbSet<Customer> Customers { get; set; }
public IDbSet<Order> Orders{ get; private set; }
public IDbSet<Product> Products { get; private set; }
public void Dispose()
{
}
}
Todas las clases anteriores (FakeDataSet, FakeCustomerDbSet y FakeSalesContext) relacionados con los objetos falsos viven en una asamblea AllFakes. Tuve que agregar una referencia a EF dll ya que la interfaz IDbSet también se menciona en estas clases falsas.
Luego tengo mi proyecto de prueba de unidad donde estoy usando objetos falsos para realizar pruebas unitarias.
ISalesContext Context = new FakeSalesContext();
Context.Customers.Add(new Customer() { Id = 1, LastName = "Karen" });
El problema es que esta prueba de unidad requiere que agregue referencia a Entity framework dll. Si elimino la referencia de EF, obtengo el siguiente error de compilación.
El tipo 'System.Data.Entity.IDbSet`1' se define en un conjunto que no se hace referencia. Debe agregar una referencia al ensamblado 'EntityFramework, Version = 4.4.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089'.
Si elimino la referencia EF dll del ensamblaje AllFakes, aparece un error de seguimiento.
El tipo o espacio de nombres 'IDbSet' no se pudo encontrar (está usted falta una directiva using o una referencia de ensamblado?)
¿Tiene sentido para agregar una referencia a EF DLL para todas estas asambleas? Para mí, como he abstraído mi contexto db, no debería ser necesario aquí. ¿Alguna sugerencia sobre cómo lograr eso?