我需要帮助。我需要在此源代码上编写一些单元测试。我尝试编写它,但是没有成功。
public class PagedCollection<T> : ReadOnlyCollection<T>,
IPagedCollection<T>
{
public int CurrentPage { get; }
public int TotalPages { get; }
public int PageSize { get; }
public int TotalCount { get; }
public bool HasPrevious => CurrentPage > 1;
public bool HasNext => CurrentPage < TotalPages;
public PagedCollection(ICollection<T> items, int count, int pageNumber, int pageSize) : base(items.ToList())
{
EnsureArg.IsGte(count, 0, nameof(count));
EnsureArg.IsGt(pageNumber, 0, nameof(pageNumber));
EnsureArg.IsGt(pageSize, 0, nameof(pageSize));
TotalCount = count;
CurrentPage = pageNumber;
PageSize = pageSize;
TotalPages = (int)Math.Ceiling(count / (double)pageSize);
}
}
}
有人可以帮助我吗?
答案 0 :(得分:0)
第0步是确定对象应执行的操作。所有这些都成为您的测试案例。有几个显而易见的候选人:
[Test]
public void RejectIfCountIsZero()
{
ICollection<string> collection = new[] { "Hello", "World" };
ArgumentOutOfRangeException e = Assert.Throws<ArgumentOutOfRangeException>(() => { new PagedCollection<string>(collection, 0, 1, 1); });
Assert.That(e.ParamName, Is.EqualTo("count"));
}
等用于其他验证
您可以测试总页面逻辑
[Test]
public void RoundsUpTotalPagesIfNotDivisible()
{
ICollection<string> collection = new[] { "Hello", "World" };
PagedCollection<string> pagedCollection = new PagedCollection<string>(collection, 100, 3, 9);
Assert.That(pagedCollection.TotalPages, Is.EqualTo(12));
}
然后对可分为计数的情况执行一项操作。 为您的HasPrevious和HasNext属性添加一个,期望值分别为true和false。 当然,应该由构造函数初始化的属性也会被初始化。
只需测试您将来不需要破坏的东西(并删除不需要的任何代码)即可。遵循模式“安排”,“行为”,“声明”。使每个测试独立于其他测试。有人在每个测试中说一个断言,但对此我稍微放松了一些。绝对要避免通过过程集的测试用例。如果您发现自己需要在“安排”中调用15个方法,然后才能执行“操作”,则说明您的设计太紧密了。
祝你好运。