Я что-то неправильно понимаю в модульных тестах? - PullRequest
0 голосов
/ 16 марта 2011

Вот тест, который я написал:

[Test]
public void Can_Generate_Links_To_Other_Pages()
{
    //Arrange: We're going to extend the Html helper class.
    //It doesn't matter if the variable we use is null            
    HtmlHelper html = null;

    PagingInfo pagingInfo = new PagingInfo(){
        CurrentPage = 2,
        TotalItems = 28,
        ItemsPerPage = 10
    };

    Func<int, String> pageUrl = i => "Page" + i;

    //Act: Here's how it should format the links.
    MvcHtmlString result = html.PageLinks(pagingInfo, pageUrl);

    //Assert:
    result.ToString().ShouldEqual(@"<a href=""Page1"">1</a><a class=""selected"" href=""Page2"">2</a><a href=""Page3"">3</a>");
}

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

Я понимаю , почему этот тест работает, ведь мой маршрут в global.asax.cs:

routes.MapRoute(
    null,
    "Page{page}",
    new { controller = "Products", action = "List" }
);

Отлично - но теперь, если я изменю этот маршрут на:

routes.MapRoute(
    null,
    "page/{page}",
    new { controller = "Products", action = "List" }
);

Изменение URL, как и ожидалось, верно? Но тест по-прежнему проходит. Поскольку я жестко запрограммировал, как должен выглядеть URL в тесте, я понимаю, что тест не пройден, верно?

Я что-то упустил?

Я уже очистил проект и перестроил его, используя новый маршрут, но тест все еще проходит.

Мне действительно любопытно, спасибо!

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Это та вещь, которую я обычно не беспокою модульным тестированием. Я считаю, что ручное тестирование или что-то вроде теста закодированного пользовательского интерфейса лучше в таких вещах - отправить пользователя, чтобы определить, работает ли пользовательский интерфейс.

2 голосов
/ 16 марта 2011

Вы пропустили Assert.That(...) Обтекание последней строки?

2 голосов
/ 16 марта 2011

Модульные тесты должны устранить зависимости. Маршрутизация ASP.NET - ваша зависимость в этом случае - вы не должны делать это. Я не совсем уверен, что происходит в PageLinks, но если он просто берет этот класс модели и генерирует HTML, то я говорю, что он правильно выполняет свою работу, если тест пройден.

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