Inheritance: Microsoft.AspNetCore.Mvc.Controller
        public void ModelAs_GivenExpectedValue_ShouldPass()
        {
#if NETCOREAPP1_0
            var result = new TestController().PartialViewSimpleModel();
#else
            ActionResult result = new PartialViewResult
            {
                ViewData = new ViewDataDictionary("hello")
            };
#endif
            result.Should().BePartialViewResult().ModelAs<string>().Should().Be("hello");
        }
        public void WithTempData_GivenExpectedValue_ShouldPass()
        {
#if NETCOREAPP1_0
            var result = new TestController().ViewWithOneTempData();
#else
            ActionResult result = new ViewResult
            {
                TempData = new TempDataDictionary { { "key1", "value1" } }
            };
#endif

            result.Should().BeViewResult().WithTempData("key1", "value1");
        }
        public void ModelAs_GivenUnexpectedValue_ShouldFail()
        {
#if NETCOREAPP1_0
            var result = new TestController().PartialViewSimpleModel();
#else
            ActionResult result = new PartialViewResult
            {
                ViewData = new ViewDataDictionary("hello")
            };
#endif
            Action a = () => result.Should().BePartialViewResult().ModelAs<string>().Should().Be("xyx");
            a.ShouldThrow<Exception>();
        }
        public void ModelAs_GivenWrongType_ShouldFail()
        {
#if NETCOREAPP1_0
            var result = new TestController().ViewSimpleModel();
#else
            ActionResult result = new ViewResult
            {
                ViewData = new ViewDataDictionary("hello")
            };
#endif

            Action a = () => result.Should().BeViewResult().ModelAs<int>().Should().Be(2);
            a.ShouldThrow<Exception>();
        }
        public void WithViewData_GivenUnexpectedKey_ShouldFail()
        {
            var actualKey = "key1";
            var expectedKey = "xyz";

#if NETCOREAPP1_0
            var result = new TestController().ViewWithTwoViewData();
#else
            ActionResult result = new ViewResult
            {
                ViewData = new ViewDataDictionary { { actualKey, "value1" } }
            };
#endif
            var failureMessage = FailureMessageHelper.Format(FailureMessages.ViewResultBase_ViewData_ContainsKey, expectedKey, actualKey);

            Action a = () => result.Should().BeViewResult().WithViewData(expectedKey, "value1");

            a.ShouldThrow<Exception>()
                    .WithMessage(failureMessage);
        }
        public void WithViewData_GivenUnexpectedValue_ShouldFail()
        {
            var key = "key1";
            var actualValue = "value1";
            var expectedValue = "abc";
            var failureMessage = FailureMessageHelper.Format(FailureMessages.ViewResultBase_ViewData_HaveValue, key, expectedValue, actualValue);

#if NETCOREAPP1_0
            var result = new TestController().ViewWithOneViewData();
#else
            ActionResult result = new ViewResult
            {
                ViewData = new ViewDataDictionary { { key, actualValue } }
            };
#endif

            Action a = () => result.Should().BeViewResult().WithViewData(key, expectedValue);

            a.ShouldThrow<Exception>()
                    .WithMessage(failureMessage);
        }
        public void WithViewData_GivenTwoExpectedValues_ShouldPass()
        {
#if NETCOREAPP1_0
            var result = new TestController().ViewWithTwoViewData();
#else
            ActionResult result = new ViewResult
            {
                ViewData = new ViewDataDictionary
                {
                    { "key1", "value1" },
                    { "key2", "value2" },
                }
            };
#endif

            result.Should().BeViewResult()
                    .WithViewData("key1", "value1")
                    .WithViewData("key2", "value2");
        }
        public void WithTempData_GivenUnexpectedKey_ShouldFail()
        {
#if NETCOREAPP1_0
            var result = new TestController().ViewWithOneTempData();
#else
            ActionResult result = new ViewResult
            {
                TempData = new TempDataDictionary { { "key1", "value1" } }
            };
#endif

            Action a = () => result.Should().BeViewResult().WithTempData("xyz", "value1");
            a.ShouldThrow<Exception>();
        }