유닛 컨트롤러 로직을 테스트하려고합니다. (.Net 코어 2 mvc 앱) 사용자는 구체적인 주장을하고 있으며, 나는 XUnit을 사용하여 단위 테스트를하고 싶다. 여기 .net core mvc 신원 확인 및 클레임 테스트 및 사용자의 소유권 주장 여부 테스트
는 컨트롤러 :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 테스트 데이터베이스) 결과가 "ViewResult
"RedirectToAction
"이고 때문이
[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);
}
}
내 테스트가 실패 ".
사용자가 소유권을 주장하지 않았기 때문에 내가 알기 때문에 질문을 어떻게 사용자에게 할당 할 수 있습니까? 즉, Identity
과 클레임을 조롱하고이를 어떻게 관리 할 수 있습니까?
테스트에서 컨트롤러 사용자는 어디에 할당합니까? 당신은 그것을 조롱하지만 당신이 그것을 사용자에게 할당하는 곳을 보지 못합니다. – Nkosi
내가 thr 사용자에게 소유권을 할당 한 경우 : userManager.AddClaimAsync (user, 새 클레임 ("컨트롤 클레임", "컨트롤 클레임")) 대기; 이 오류가 발생합니다. NotSupportedException : 저장소가 IUserClaimStore을 구현하지 않습니다. –
아니요, 주체를 컨텍스트의 '사용자'에게 할당합니다. '_controller.ControllerContext.HttpContext.User = cp.Object;' – Nkosi