Testando: Entity Framework falsificando contexto
Estou me comendo neste momento. É como se o Entity Framework não fosse testável. Eu li um monte de posts e tópicos onde eles usam unidade de trabalho ou moq ou o padrão de recompra.
Eu estou em uma fase que eu não posso mudar muito da minha arquitetura de meu aplicativo. O aplicativo funciona totalmente neste momento, mas para ter certeza de que preciso ter uma cobertura de código alta, é necessário testá-lo.
Para o teste, eu estou usando o método 'falso contexto' onde eu posso usar o falso para zombar e o real para conexão com o banco de dados.
Eu usei isso como um exemplo.http://romiller.com/2010/09/07/ef-ctp4-tips-tricks-testing-with-fake-dbcontext/
Lá, você pode ver que o contexto é dividido e usado como uma interface. Gostar:
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;
}
}
}
Então tesing e tudo funciona. A única coisa que eu não consigo fazer, é testar um controlador com .State nele, onde eu verifico se ele foi alterado Como: EntityState.Modified
Como isso usa uma interface, preciso adicioná-lo ao contexto da interface. E crie um novo. Ou eu estou esquecendo de alguma coisa ? Não é provável que eu crie o método inteiro nesse contexto. Como posso conseguir que isso funcione?