c# - 编写单元测试
问题描述
我需要帮忙。我需要对此源代码编写一些单元测试。我试图写它,但我没有成功。
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 步是决定你的对象应该做什么样的事情。这些东西中的每一个都成为你的测试用例。有几个明显的候选人:
[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 个方法才能执行“操作”,那么您的设计耦合太紧密了。
祝你好运。
推荐阅读
- python - Boto3 ec2 describe_images 太慢了
- android - 是否可以让数据绑定为变量生成不可为空的访问器?
- amazon-web-services - 调用 API 网关跨账户时出错
- pandas - 在我老死之前尝试用 dataframe.to_hdf 加载 hdf5 表
- flutter - 停用和处置之间的区别?
- java - 到数据库日期的 SUM 天数
- javascript - 无法从页面底部向上滚动
- python - 在 beautifulsoup 元素的开头删除空白
- javascript - 不明白为什么这段代码在一种情况下有效,但在另一种情况下无效
- javascript - Angular 7 类型“void”不可分配给类型“ObservableInput<{}>”