asp.net-mvc - MVC 在测试方法中获取查看 HTML 输出

标签 asp.net-mvc asp.net-mvc-4

如何在我的测试方法中获取生成的 HTML( View )?

我有以下内容:

Controller :

public ActionResult Index()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";

    return View();
}

查看:

@{
    ViewBag.Title = "Home Page";
}

<h2>@ViewBag.Message</h2>
<p>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>

测试:

   [TestMethod]
    public void HomeControllerReturnsView()
    {
        // Arrange
        var controller = new HomeController();

        // Act
        var result = controller.Index() as ViewResult;

        using (StringWriter sw = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, "Home");
            ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
            viewResult.View.Render(viewContext, sw);

            var test = sw.GetStringBuilder().ToString();
        }
    }

仅供引用:当我在调试中运行此 Controller 时,controller.HttpContext 和controller.RouteData 为空。 谢谢

最佳答案

您可以使用RazorGenerator执行单元测试中的 View 。这是 blog post David Ebbo 在其中说明了这一点。

但这些不再是单元测试。它们是集成测试,您可以使用诸如 Watin 之类的工具。这可以让您对您的应用程序执行集成测试。

关于asp.net-mvc - MVC 在测试方法中获取查看 HTML 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12957164/

相关文章:

asp.net - asp.net web api 和 odata 的路由

jquery - 在 Visual Studio 2013 中使用 Jasmine + Karma 进行 AngularJS 测试

c# - 获取 knockout 模型中的 MVC Person 模型书籍列表(可观察数组)

asp.net-mvc - jQuery 中 $.getJSON() 和 $.ajax() 之间的区别

asp.net-mvc - 新的MVC项目

jquery - asp.net mvc 所见即所得编辑器/数据库图像上传/预览

asp.net-mvc-4 - Action Filter 不在 Web 应用程序中执行,而是在 Web Api 中执行

entity-framework - Entity Framework EntityType 'UserAccount' 没有定义键

asp.net - IIS Express localhost 对于第一个请求加载速度非常慢

javascript - 当用户访问页面时如何动态缩放整个 ASP.Net MVC 应用程序