2012-01-26 61 views
0

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

一切都好,只是调用该视图的测试方法仍然成功。我很难弄清楚如何在单元测试中失败这个代码块。

这里是不好的显示模板:

@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

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

所以如果你想测试你的视图,你不再进行单元测试。您正在进行集成测试,您将HTTP请求发送到部署在临时服务器上的站点,并验证返回的HTML是否符合您的要求。在这种情况下,如果您在视图中输入了错字或其他内容,那么当您使用HTTP请求击中特定控制器操作时返回的实际HTML将显然与您所期望的不同。

+0

哦,当然。显然,我还没有完全了解MVC的一些巫术......所以你需要一个预编译工具来进行单元测试视图。 – 2012-01-27 17:49:19

+0

不重要,但我不认为这是一个集成测试。虽然我需要实例化一个控制器来测试视图,但它是一个理想化的控制器 - 从哲学角度看,它是测试夹具的一部分,而不是测试的目标。但那不是在那里也不在那里...... – 2012-01-27 17:51:14

相关问题