【发布时间】:2011-03-15 22:07:16
【问题描述】:
这是我的测试:
[TestFixture]
public class DisplayingPageLinks
{
[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" + 1;
//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 href=""Page2"">2</a><a href=""Page3"">3</a>");
}
}
PageLinks 扩展方法如下:
public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfo pagingInfo, Func<int,string> pageUrl)
{
StringBuilder result = new StringBuilder();
for (int i = 1; i < pagingInfo.TotalPages; i++)
{
TagBuilder tag = new TagBuilder("a");
tag.MergeAttribute("href", pageUrl(i));
tag.InnerHtml = i.ToString();
if (i == pagingInfo.CurrentPage)
{
tag.AddCssClass("selected");
}
result.Append(tag.ToString());
}
return MvcHtmlString.Create(result.ToString());
}
最后是运行测试的结果:
SportsStore.UnitTests.DisplayingPageLinks.Can_Generate_Links_To_Other_Pages: 预期字符串长度为 63,但为 59。 字符串在索引 24 处有所不同。
预期:“123”但是是:“12”
----------------------------------^
错误不会复制它在 GUI 中的显示方式 - 抱歉。
您能否就 NUnit 为什么说它收到我不希望它给出的东西给我一些建议。
根据我在 PageLinks 扩展方法中阅读的内容,似乎应该正确形成标记。
有什么建议吗?我是 TDD 新手,真的很想在这里学习。 :)
编辑:
看来罪魁祸首就是这个。我的测试使用的是: Func pageUrl = i => "页面" + 1;
而不是
Func pageUrl = i => "页面" + i;
但是现在出现了另一个错误。 :(
在 PagingInfo 类中计算页面数量时似乎有问题:
public class PagingInfo
{
public int TotalItems { get; set; }
public int ItemsPerPage { get; set; }
public int CurrentPage { get; set; }
public int TotalPages
{
get { return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage); }
}
}
似乎错误源于返回 2 页而不是 3 页这一事实。
这个计算有问题吗?
【问题讨论】:
标签: c# unit-testing tdd nunit