/// <summary>
        /// Tests whether the action result is <see cref="ViewResult"/> with the provided view name.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldReturnTestBuilder">Instance of <see cref="IShouldReturnTestBuilder{TActionResult}"/> type.</param>
        /// <param name="viewName">Expected view name.</param>
        /// <returns>Test builder of <see cref="IViewTestBuilder"/> type.</returns>
        public static IViewTestBuilder View <TActionResult>(
            this IShouldReturnTestBuilder <TActionResult> shouldReturnTestBuilder,
            string viewName)
        {
            var actualShouldReturnTestBuilder = (ShouldReturnTestBuilder <TActionResult>)shouldReturnTestBuilder;

            var viewType       = "view";
            var viewResult     = actualShouldReturnTestBuilder.GetReturnObject <ViewResult>();
            var actualViewName = viewResult.ViewName;

            if (viewName != actualViewName)
            {
                ViewFeaturesThrow.NewViewResultAssertionException(
                    actualShouldReturnTestBuilder,
                    viewType,
                    viewName,
                    actualViewName);
            }

            return(new ViewTestBuilder <ViewResult>(actualShouldReturnTestBuilder.TestContext, viewType));
        }
        /// <summary>
        /// Tests whether the action result is <see cref="ViewComponentResult"/> with the provided view component type.
        /// </summary>
        /// <typeparam name="TActionResult">Type of action result type.</typeparam>
        /// <param name="shouldReturnTestBuilder">Instance of <see cref="IShouldReturnTestBuilder{TActionResult}"/> type.</param>
        /// <param name="viewComponentType">Expected view component type.</param>
        /// <returns>Test builder of <see cref="IViewComponentTestBuilder"/> type.</returns>
        public static IViewComponentTestBuilder ViewComponent <TActionResult>(
            this IShouldReturnTestBuilder <TActionResult> shouldReturnTestBuilder,
            Type viewComponentType)
        {
            var actualShouldReturnTestBuilder = (ShouldReturnTestBuilder <TActionResult>)shouldReturnTestBuilder;

            var viewComponentResult     = actualShouldReturnTestBuilder.GetReturnObject <ViewComponentResult>();
            var actualViewComponentType = viewComponentResult.ViewComponentType;

            if (viewComponentType != actualViewComponentType)
            {
                ViewFeaturesThrow.NewViewResultAssertionException(
                    actualShouldReturnTestBuilder,
                    "view component",
                    viewComponentType.ToFriendlyTypeName(),
                    actualViewComponentType.ToFriendlyTypeName());
            }

            actualShouldReturnTestBuilder.TestContext.ActionResult = viewComponentResult;
            return(new ViewComponentTestBuilder(actualShouldReturnTestBuilder.TestContext));
        }