Как выполнить юнит-тест ViewComponent.Invoke ()?

В объекте ViewComponent, HttpContext и User - свойства только для чтения.

Как выполнить модульное тестирование такого компонента?

Я использую MSTest Freamwork.

Следующие свойства используются в моем коде

  1. Cookie
  2. Session
  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);
} 
7 голосов | спросил HeroWong 8 32017vEurope/Moscow11bEurope/MoscowWed, 08 Nov 2017 10:37:13 +0300 2017, 10:37:13

1 ответ


0

Согласно исходному коду, ViewComponent опирается на ViewComponentContext.ViewContext для предоставления этих свойств только для чтения, которые, в свою очередь, обращаются к HttpContext. Это ваша точка входа для насмешки желаемых значений.

[TestMethod]
public void UserSummaryVcTest() {

    // Arrange
    var expected = "Username value";
    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(expected, model.UserName);
} 
ответил Nkosi 8 32017vEurope/Moscow11bEurope/MoscowWed, 08 Nov 2017 14:48:48 +0300 2017, 14:48:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132