我是否误解了单元测试?

时间:2011-03-16 00:46:25

标签: c# unit-testing asp.net-mvc-3 nunit routes

这是我写的测试:

[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" }
);

网址的变化,正如预期的那样,对吗? 但是测试仍然通过。由于我在测试中硬编码了网址的样子,我的理解是测试应该失败,对吗?

我错过了什么吗?

我已经清理了项目并使用新路线重建了它,但测试仍然通过。

我真的好奇这个,谢谢!

3 个答案:

答案 0 :(得分:2)

单元测试应该消除依赖性。在这种情况下,ASP.NET的路由是你的依赖 - 你不应该把它作为一个。我不确定PageLinks中发生了什么,但是如果它只是接受该模型类并生成HTML,那么我说如果测试通过它就能正常工作。

答案 1 :(得分:2)

这是我通常不打扰单元测试的事情。我发现手动测试,或者类似于编码UI测试的东西在这种情况下更好 - 发送用户以确定用户界面是否正常工作。

答案 2 :(得分:2)

你遗失了Assert.That(...)绕过你的最后一行吗?