我不能对错误的MVC视图测试失败

时间:2012-01-26 22:15:34

标签: asp.net-mvc-3 unit-testing

我在ASP.NET MVC 3项目中使用模板化助手。一个显示模板有一个拼写错误 - 一个意外的额外代码块 - 在返回该视图时导致编译器错误(“不要将@if放在代码块中”,你知道)。

一切都很好,除了调用该视图的测试方法仍然成功。我很难搞清楚如何在单元测试中使代码块失效。

这是错误的显示模板:

@model MemberSelectorViewModel
@{ 
    Layout = "~/Views/Shared/_DisplayFormItem.cshtml";
}
@section DataContent {
  @{  // <- this was the typo, and it... 
    @if (Model.idMember.HasValue)   // <- causes this to throw a compiler error
    { 
        @Html.ActionLink(Model.FullName, "Details", "Member", new { id = Model.idMember.Value }, null )
        @Html.HiddenFor(m=> m.idMember)
    }
  }
}

这是我认为应该失败的测试:

[TestMethod]
public void DetailsReturnsView()
{
    MemberJobController target = new MemberJobController(TestHarness.Context);
    memberjob mj = TestHarness.UnitOfWork.MemberJobRepository.FirstOrDefault(x => true);

    ActionResult result = target.Details(mj.idmemberjob);  // <- this should hit the compiler error, I would have thought 

    Assert.IsNotNull(result);

}

但是那个测试成功了。

我知道如何编写一个在模板化助手的“@ {@if()”拼写错误中失败的测试吗?

1 个答案:

答案 0 :(得分:1)

我认为你可能误解了单元测试如何在控制器上运行。他们从来没有真正看过这个观点因此,无论您在视图中执行了多少错误,当您在单元测试中调用控制器操作时,所发生的一切都是执行此操作的主体。就这样。它永远不会去视野。

因此,如果您想测试您的视图,则不再进行单元测试。您正在进行集成测试,其中您向站点发送HTTP请求,该站点部署在登台服务器上并验证返回的HTML是否符合您的要求。在这种情况下,如果您在视图中输入了拼写错误或某些内容,那么当您使用HTTP请求点击特定控制器操作时返回的实际HTML显然会与您预期的不同。