Как издеваться над UserManager с помощью GetUsersInRoleAsync в тестировании .Net Core?

#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);