3

ViewComponent 개체에서 HttpContextUser은 읽기 전용 속성입니다.단위 테스트 방법 ViewComponent.Invoke()?

이러한 부품을 단위 테스트하는 방법은 무엇입니까?

MSTest Freamwork를 사용하고 있습니다.

추시 속성

소스 코드에 따라 내 코드

  1. 쿠키
  2. 세션
  3. 사용자 (System.Security.Principal)

public ViewViewComponentResult Invoke() 
{ 
    var vm = new SummaryViewModel(); 
    if (User.Identity is ClaimsIdentity identity && identity.IsAuthenticated) 
    { 
     vm.IsAuthenticated = true; 
     vm.UserName = identity.Claims.FirstOrDefault(c => c.Type == "UserName").Value; 
     vm.PhotoUrl = identity.Claims.FirstOrDefault(c => c.Type == "FacePicture").Value; 
    } 
    return View(vm); 
} 

[TestMethod] 
public void UserSummaryVcTest() 
{ 
    var component = new UserSummaryViewComponent(); 
    var model = component.Invoke().ViewData.Model as SummaryViewModel; 
    Assert.AreEqual("UserName", model.UserName); 
} 
+2

지금까지 시도한 것을 게시하십시오. 그리고 당신이 직면 한 문제 – csharpcoder

답변

2

에 사용됩니다 ViewComponent은을 사용합니다.은 읽기 전용 속성을 노출하고 HttpContext에 액세스합니다. 이것이 원하는 값을 조롱하는 진입 점입니다.

[TestMethod] 
public void UserSummaryVcTest() { 

    // Arrange 
    var httpContext = new DefaultHttpContext(); //You can also Mock this 
    //...then set user and other required properties on the httpContext as needed 

    var viewContext = new ViewContext(); 
    viewContext.HttpContext = httpContext; 
    var viewComponentContext = new ViewComponentContext(); 
    viewComponentContext.ViewContext = viewContext; 

    var viewComponent = new UserSummaryViewComponent(); 
    viewComponent.ViewComponentContext = viewComponentContext; 

    //Act 
    var model = viewComponent.Invoke().ViewData.Model as SummaryViewModel; 

    //Assert 
    Assert.AreEqual("UserName", model.UserName); 
}