这是我写的测试:
[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" }
);
网址的变化,正如预期的那样,对吗? 但是测试仍然通过。由于我在测试中硬编码了网址的样子,我的理解是测试应该失败,对吗?
我错过了什么吗?
我已经清理了项目并使用新路线重建了它,但测试仍然通过。
我真的好奇这个,谢谢!
答案 0 :(得分:2)
单元测试应该消除依赖性。在这种情况下,ASP.NET的路由是你的依赖 - 你不应该把它作为一个。我不确定PageLinks
中发生了什么,但是如果它只是接受该模型类并生成HTML,那么我说如果测试通过它就能正常工作。
答案 1 :(得分:2)
这是我通常不打扰单元测试的事情。我发现手动测试,或者类似于编码UI测试的东西在这种情况下更好 - 发送用户以确定用户界面是否正常工作。
答案 2 :(得分:2)
你遗失了Assert.That(...)
绕过你的最后一行吗?