Testowanie: Entity Framework przez fałszowanie kontekstu
W tej chwili zjadam się. To jest jak Entity Framework nie jest testowalny. Przeczytałem wiele postów i wątków, w których używają jednostki pracy lub moq lub wzorca repo.
Jestem w fazie, w której nie mogę zmienić wiele mojej architektury mojej aplikacji. Aplikacja w pełni działa w tej chwili, ale aby mieć pewność, że muszę mieć wysoki zasięg kodu, więc testowanie jest.
Do testowania używam metody „fałszywego kontekstu”, w której mogę użyć fałszywego do szyderstwa i prawdziwego do połączenia z bazą danych.
Użyłem tego jako przykładu.http://romiller.com/2010/09/07/ef-ctp4-tips-tricks-testing-with-fake-dbcontext/
Widać tam, że kontekst jest podzielony i używany jako interfejs. Lubić:
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;
}
}
}
Tak działa i wszystko działa. Jedyne, czego nie mogę zrobić, to przetestować kontroler za pomocą .State, w którym sprawdzam, czy został zmieniony. Like: EntityState.Modified
Ponieważ używa interfejsu, muszę dodać to do kontekstu interfejsu. I stwórz nowy. Czy coś mi brakuje? Prawdopodobnie nie mam zamiaru tworzyć całej metody w tym kontekście. Jak mogę to zrobić