Вы делаете распространенную ошибку при тестировании фреймворка. Все, что вам нужно сделать, это убедиться, что AdminService.DeleteUser
вызывает UserManager.DeleteAsync
. Пошло ли это к фактическому удалению пользователя из базы данных, это 1) не забота службы и 2) подробности реализации как ASP. NET Core Identity, так и EF Core, оба из которых имеют свои собственные обширные наборы тестов, чтобы убедиться, что это происходит.
Таким образом, вы можете просто использовать библиотеку, такую как Moq, чтобы создать макет UserManager<TUser>
, а затем сделать что-то вроде:
userManagerMock.Verify(x => x.DeleteAsync(user), Times.Once());
Это стоит упоминание здесь, что это также служит, чтобы указать на небольшую ошибку в этом виде дизайна. У вас есть зависимость от ASP. NET Core Identity, независимо от того, поместите ли вы вокруг него оболочку AdminService
. Если ваш сервис не делает что-то особенное, кроме проксирования здесь UserManager
(например, координация нескольких действий, например, удаление пользователя, инициирует уведомление или что-то в этом роде), то ваш сервис не имеет смысла, и вы должны просто использовать UserManager
напрямую. Разработчики постоянно совершают такую ошибку; абстракция ради абстракции только вредит вашему коду. Это добавляет дополнительные проблемы обслуживания, проблемы тестирования и скрывает, что на самом деле делает код.