Начал изучать юнит-тесты. Возникла проблема. Имеется контроллер, конструктор которого принимает контекст базы данных
public AccountController(UserContext userContext)
{
this.userContext = userContext;
}
Контекст
public class UserContext:DbContext
{
public DbSet<User> Users { get; set; }
public UserContext(DbContextOptions<UserContext> options) : base(options)
{
}
}
Каким образом контекст можно передать при инициализации нового объекта?
AccountController controller = new AccountController();
В контексте юнит-тестов вам лучше передать в конструктор тестируемого контроллера не настоящий контекст, а его тестовую реализацию.
В вашем случае можно выделить из UserContext интерфейс IUserContext и создать его моковую реализацию для тестирования корректной работы контроллера.
public AccountController(IUserContext userContext)
{
this.userContext = userContext;
}
Тестовая реализация контекста нужна потому, что он является зависимостью по отношению к тестируемой системе AccountController. Изменения в этой зависимости могут повлиять на результаты тестов. Так как речь про юнит-тест (не путать с интеграционным) то это недопустимо.
Похожий вопросы на английском SO: Mocking EF DbContext with Moq
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости