Я не могу пройти проверку MVC на ошибку - PullRequest
0 голосов
/ 27 января 2012

Я использую шаблонные помощники в проекте 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 Ответ

1 голос
/ 27 января 2012

Я думаю, вы, возможно, неправильно поняли, как работают модульные тесты на контроллере.Они никогда не попадают в поле зрения на самом деле.Поэтому независимо от того, сколько ошибок вы допустили, по вашему мнению, когда вы вызываете действие контроллера в модульном тесте, все, что происходит, - это выполнение тела этого действия.И это все.Он никогда не перейдет к представлению.

Поэтому, если вы хотите проверить свои представления, вы больше не выполняете модульные тесты.Вы проводите интеграционные тесты, где отправляете HTTP-запрос на свой сайт, который развернут на промежуточном сервере, и проверяете, соответствует ли возвращаемый HTML вашим требованиям.В этом случае, если вы произвели опечатку или что-то в вашем представлении, фактический HTML-код, возвращаемый при нажатии определенного действия контроллера с помощью HTTP-запроса, очевидно, будет отличаться от того, что вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...