Я пытаюсь написать модульные тесты для моего контроллера, который использует диспетчер пользователей и диспетчер ролей.
У меня есть операции, связанные с созданием пользователей, созданием ролей, добавлением и удалением пользователей в роли и из ролей..
Я передаю usermanager, signInManager как зависимости через конструктор контроллера.
private readonly IHostingEnvironment hostingEnvironment;
public IHostingEnvironment HostingEnvironment => hostingEnvironment;
public AdminController(IHostingEnvironment environment, SignInManager<IdentityUser> signInManager, ILogger<LoginModel> logger, RoleManager<IdentityRole> roleManager, UserManager<IdentityUser> userManager)
{
_signInManager = signInManager;
_logger = logger;
_roleManager = roleManager;
_userManager = userManager;
hostingEnvironment = environment;
}
Мне нужно проверить, успешно ли пользователи добавляются в роли, удаляются из ролей и т. Д..
Я не хочу тестировать сами сервисы, но только операции.
Я отделил операции следующим образом, чтобы зафиксировать любые исключения.
public async Task<bool> AddUserToRole(IdentityUser user, string role)
{
try
{
var addUserToRole = await _userManager.AddToRoleAsync(user, role);
if (addUserToRole.Succeeded)
{
return true;
}
else
{
return false;
}
}
catch(Exception e)
{
throw new Exception("OperationFailed");
}
return false;
}
Точно так же яЯ развязал все операции с участием userManager и вызвал вышеуказанные функции в действии контроллера.
Для тестирования я сделал следующее:
[TestFixture]
public class AdminControllerTest
{
protected TestContext db;
protected Context _db;
protected SignInManager<IdentityUser> signInManager;
protected ILogger<LoginModel> logger;
protected RoleManager<IdentityRole> roleManager;
protected UserManager<IdentityUser> userManager;
protected IHostingEnvironment hostingEnvironment;
[TestCase]
public void Verify_AdminController_Is_Decorated_With_Authorize_Attribute()
{
var userEmail = _db.AspNetUsers.Select(x => x.Email).FirstOrDefault();
var user =await userManager.FindByEmailAsync(userEmail);
var userRole = "Supervisor";
AdminController adminController = new AdminController(hostingEnvironment, signInManager, logger, roleManager, userManager);
var actionResult = adminController.AddUserToRole(user, userRole).Result;
Assert.IsTrue(actionResult);
}
Выше не работает.
- Я верю, что это потому, что;userManager в DevProject и Test Project - это разные экземпляры.
Я пытался издеваться над сервисами, используя Moq.Но если я запускаю службы, я не могу передать их экземпляру контроллера.
Если я высмеиваю сам контроллер;Я не могу использовать его действия;Возвращает Null;
Я не совсем понимаю концепцию насмешки.
Каков наилучший способ решения вышеуказанной проблемы.Я использую Asp.Net Core 2.1 и Nunit 3.0
Спасибо:)