Тестирование: Entity Framework путем фальсификации контекста
Я кушаю себя в этот момент. Как будто Entity Framework не тестируется. Я прочитал много постов и тем, где они используют единицу работы или moq или шаблон репо.
Я нахожусь в фазе, когда я не могу изменить свою архитектуру своего приложения. Приложение полностью работает на данный момент, но, чтобы быть уверенным, мне нужно иметь высокий охват кода, так что тестирование это.
Для тестирования я использую метод «поддельный контекст», где я могу использовать поддельный для насмешки, а реальный - для подключения к базе данных.
Я использовал это в качестве примера.http://romiller.com/2010/09/07/ef-ctp4-tips-tricks-testing-with-fake-dbcontext/
Там вы можете увидеть, что контекст разделен и используется как интерфейс. Подобно:
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;
}
}
}
Так что тестирую и все работает. Единственное, что я не могу сделать, это протестировать контроллер с .State в нем, где я проверяю, изменился ли он, например: EntityState.Modified
Поскольку для этого используется интерфейс, мне нужно добавить его в контекст интерфейса. И создать новый. Или я что-то упустил? Скорее всего, я не собираюсь создавать весь метод в этом контексте. Как я могу заставить это работать