Я пытаюсь понять, как добавить модульное тестирование в мой проект. Я подумал, что лучше всего начать с пустого проекта и решить его с самого начала, а не добавлять его в мой основной проект. Как только я пойму процесс, который, как я понимаю, я могу начать рефакторинг своего проекта для добавления тестирования.
веб-приложение
Итак, я создал веб-приложение и добавил к нему личность пользователя по умолчанию.
Это дало мне старт, похожий на это
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
Затем я создал простой контроллер и передал usermanager в конструктор.
[Route("api/[controller]")]
[ApiController]
public class SweetController : ControllerBase
{
private readonly UserManager<IdentityUser> _userManager;
public SweetController(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}
public async Task<int> NumberOfGummyBearsForUser(string userId)
{
var user = await _userManager.FindByIdAsync(userId);
var userHasASweetTooth = await _userManager.IsInRoleAsync(user, "SweetTooth");
if (userHasASweetTooth)
{
return 100;
}
else
{
return 1;
}
}
}
Модульный тест
Первое, что я пытался сделать, - это посмеяться над этим менеджером пользователей, но он не работает.
public void Test1()
{
// Arrange
var mockUser = new Mock<UserManager<IdentityUser>>();
var userManager = new UserManager(mockRepo.Object); <-- error here see image below
var controller = new SweetController(userManager.Object);
// Act
var result = await controller.NumberOfGummyBearsForUser("123");
// Assert
Assert.Equal(100, result);
}
Ошибка выглядит следующим образом
Я думаю, что мне нужно пройти еще больше, чтобы создать этот объект usermanager, но я не уверен, что все учебники, которые я нашел, используют ApplicationUser, а не IdentityUser, поэтому я не знаю, как я могу насмехаться над этим объектом.