Я пытаюсь выполнить модульное тестирование своей логики контроллера, это (приложение .Net core 2 mvc). У меня есть контроллер, который возвращает сведения об элементе, если у пользователя есть конкретное требование, и я хочу выполнить модульное тестирование с использованием XUnit.
Вот контроллер:
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var controlException = await _context.ControlException.FirstOrDefaultAsync(m => m.Id == id);
if (controlException == null)
{
return NotFound();
}
if (User.HasClaim("control Claim", "control Claim"))
{
return View(controlException);
}
else
{
return RedirectToAction("AccessDenied", "Account");
}
}
Мой код модульного теста: (GetContextWithData()
вернуть тестовую базу данных InMemory)
[Fact]
public async Task VerifyDetailsViewType()
{
using (var context = GetContextWithData())
using (var _controller = new ControlExceptionsController(context))
{
var userStore = new Mock<IUserStore<ApplicationUser>>();
var userManager = new UserManager<ApplicationUser>(
userStore.Object, null, null, null, null, null, null, null, null);
var cp = new Mock<ClaimsPrincipal>();
cp.Setup(m => m.HasClaim(It.IsAny<string>(), It.IsAny<string>()))
.Returns(true);
cp.Setup(m => m.Identity).Returns(identityMock.Object);
_controller.ControllerContext.HttpContext = new DefaultHttpContext();
_controller.ControllerContext.HttpContext.Request.Headers["Referer"] = "http://www.test.nl";
var result = await _controller.Details(888);
Assert.IsType<ViewResult>(result);
}
}
Мой тест не удался, потому что результат - «RedirectToAction
», а не «ViewResult
».
Я знаю, потому что у пользователя нет претензии, поэтому вопрос в том, как я могу назначить претензию пользователю, другими словами, как я могу издеваться над Identity
и претензиями и управлять этим.
User
контекста._controller.ControllerContext.HttpContext.User = cp.Object;
- person Nkosi   schedule 07.12.2017