Я пытаюсь выполнить тестирование этого метода контроллера, который выходит из коробки в текущих проектах MVC.Интерфейсы для издевательств ConfirmEmailAsync и другие методы UserManager в MVC5
[AllowAnonymous]
public async Task<ActionResult> ConfirmEmail(string userId, string code)
{
if (userId == null || code == null)
{
return View("Error");
}
var result = await UserManager.ConfirmEmailAsync(userId, code);
return View(result.Succeeded ? "ConfirmEmail" : "Error");
}
AccountController имеет конструктор, который будет принимать ApplicationUserManager и ApplicationSignInManager в качестве параметров и свойств сопоставления с частными сеттеров использовать для тестирования. Тем не менее, я не могу понять, как высмеять метод ConfirmEmailAsync.
Вы можете издеваться различные интерфейсы в пространстве имен идентичности:
var store = new Mock<IUserStore<ApplicationUser>>();
store.As<IUserEmailStore<ApplicationUser>>()
.Setup(x => x.FindByIdAsync("username1"))
.ReturnsAsync((ApplicationUser)null);
var mockManager = new ApplicationUserManager(store.Object);
AccountController ac = new AccountController(mockManager, null, GetMockRepository().Object, GetMockLogger().Object);
Но я не могу найти или выяснить, какой интерфейс мне нужно для того, чтобы создать макет из ConfirmEmailAsync.
Как это сделать? И для справки, есть ли хороший способ узнать, какие интерфейсы эти методы включены, чтобы имитировать и проверить их?
Я обошел это, абстрагировав большую часть функциональности идентичности в своем собственном проекте, чтобы я мог легко тестировать его и повторно использовать абстракцию в других проектах. Я начал с этой статьи http://timschreiber.com/2015/01/14/persistence-ignorant-asp-net-identity-with-patterns-part-1/, а затем настроил ее в соответствии с моими потребностями – Nkosi