【问题标题】:Unit testing to check if a partial view compiles单元测试以检查部分视图是否编译
【发布时间】:2015-07-17 14:04:25
【问题描述】:

我有以下方法需要渲染一个视图(这个视图实际上并不存在)

public class HomeController : Controller
{
    public ActionResult GetTestPage()
    {
        return PartialView("~/Views/admin/TestPage.cshtml");
    }
}

我在一个单独的类中有以下测试方法。

[TestClass()]
public class HomeControllerTests : Controller
{
    [TestMethod()]
    public void GetTestPageTest()
    {
        HomeController hc = new HomeController();
        ActionResult actual = null;
        try
        {
            actual = hc.GetTestPage();
        }
        catch (Exception e)
        {
            System.Diagnostics.Debug.WriteLine("Exception Caught, Test Fail: " + e.ToString());
            Assert.Fail();
        }
        Assert.IsNotNull(actual);
    }
}

目前这个测试通过了,但它不应该。我知道我可以通过在.csproj 文件中将我的<MvcBuildView> 标记设置为true 来破坏构建。

但是,我想要一个单元测试(使用 VS 2012 中的 MS 测试环境)来测试视图是否编译/存在/发送回响应。

最好的方法是什么?

谢谢!

【问题讨论】:

  • "目前这个测试通过了,但它不应该" 为什么不呢?你为什么认为它会失败?
  • 因为视图文件不存在。现在,我认为正在比较对象的“类型”而不是实际视图。我编辑了上面的测试方法。 我更希望通过单元测试来确定视图没有编译。我知道我的测试方法可能远非正确。
  • 你应该可以用RazorEngine渲染视图

标签: c# .net unit-testing visual-studio-2012 razor


【解决方案1】:

测试没有失败,因为控制器的PartialView 方法只是返回一个PartialViewResult 类型的对象,其中包含您在ViewName 属性中提供的视图名称。当 MVC 引擎看到这个对象时,他会说 “好的,现在我应该渲染它指向的视图”,然后 然后如果文件崩溃了不存在。这当然不会发生在单元测试中。

您的测试的一个选项可能是物理检查文件是否存在(您当然需要进行一些路径操作以将相对 ~/... 视图路径转换为项目中的相对或绝对路径)。不知道你还有什么可以做的。

【讨论】:

  • 是的,我正在考虑这样做。我只是希望有某种方法可以从视图中获得独特的响应。但我认为只有模拟渲染(我想避免)才能做到这一点
  • 另一个(有点骇人听闻的)变体是覆盖控制器的PartialView 方法(可能在基类中),以便在调试模式下检查文件的存在,并且异常是如果文件不存在则抛出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多