#unit-testing #asp.net-core #mocking #asp.net-identity #xunit.net
Вопрос:
Я пытаюсь высмеять UserManager для действия GetUsersInRoleAsync, но не тогда, когда я использую макет метода, он всегда возвращает нулевое значение
это тест кода
IList<ApplicationUser> users = new List<ApplicationUser>();
user = new ApplicationUser();
users.Add(user);
var mockUserManager = new Mock<UserManager<ApplicationUser>>();
var mockUserStore = new Mock<IUserStore<ApplicationUser>>().As<IUserRoleStore<ApplicationUser>>();
UserManager<ApplicationUser> userManager = new UserManager<ApplicationUser>(mockUserStore.Object,null, null, null, null, null, null, null, null);
var mockUserManager2 = new Mock<UserManager<ApplicationUser>>(mockUserStore.Object);
mockUserManager2.Setup(x => x.GetUsersInRoleAsync(It.IsAny<string>())).Returns(Task.FromResult(users));
AuthService service = new AuthService(userManager, MockIAspNetRolesRepository, _IConfigurationRoot, MockIAccountByPeopleRepository.Object, _mapper, _logger.Object, MockIModelJoins.Object, _ISendEmailsService.Object);
ResponseApi Result = await service.GetAllUsersAdmin();
Assert.Equal(Result.ResponseObject, users);
mockUserManager2.Verify(x => x.GetUsersInRoleAsync(It.IsAny<string>()));
когда я использую метод проверки, он возвращает
Expected invocation on the mock at least once, but was never performed: x => x.GetUsersInRoleAsync(It.IsAny<string>())
Performed invocations:
Mock<UserManager<ApplicationUser>:3> (x):
No invocations performed.
Не могли бы вы помочь мне с этим издевательством?
Комментарии:
1. В тесте используются отдельные экземпляры диспетчера пользователей.
Ответ №1:
Похоже, что вы не передали издевательский экземпляр UserManager
в свой AuthService
, который тестируется, поэтому, естественно, его метод не был вызван во время теста.
Эта строка в вашем коде
AuthService service = new AuthService(userManager, MockIAspNetRolesRepository, _IConfigurationRoot, MockIAccountByPeopleRepository.Object, _mapper, _logger.Object, MockIModelJoins.Object, _ISendEmailsService.Object);
следует изменить на
AuthService service = new AuthService(mockUserManager2.Object, MockIAspNetRolesRepository, _IConfigurationRoot, MockIAccountByPeopleRepository.Object, _mapper, _logger.Object, MockIModelJoins.Object, _ISendEmailsService.Object);