c# - 使用 IQueryable 的单元测试代码

标签 c# linq entity-framework unit-testing

我被要求为某些功能编写一些单元测试,但坦率地说,我不太确定这样做的必要性或有用性对于这段特定的代码。 我绝不会质疑一般单元测试的必要性或有用性。

有问题的代码非常简单,并且被大量使用。基本上它是 .Skip() 和 .Take() 扩展方法的包装器。在我看来,整个方法的合法性值得怀疑。

代码基本上是这样的:

public IQueryable<T> Page(IQueryable<T> query, int page, int size)
{
    if(query == null) throw new ArgumentNullException("query");
    if(page < 0) throw new ArgumentOutOfRangeException("page"); 
    if(page < 0) throw new ArgumentOutOfRangeException("size"); 

    return query.Skip(page * size).Take(size);
}

当然我可以对预期的异常进行单元测试,但还有什么?很可能是我没捕获重点,这是怎么回事?

最佳答案

您可以通过调用AsQueryable 提交一个静态集合。

List<T> dummyData = new List<T>();
//Add data
var result = Page(dummyData.AsQueryable(), 0, 10);
//Perform assertions on result.

如果您实际上只是想测试您的分页是否正常工作。

关于c# - 使用 IQueryable 的单元测试代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13686286/

相关文章:

c# - 每月最后一天加一天

c# - 将一个 View 数据上下文绑定(bind)到主窗口数据上下文

c# - LinQ 聚合错误 - 序列不包含任何元素

c# - 如何在 Entity Framework 4 中切换 SQL 和 SQL CE?或者如何以编程方式更改 edmx 文件中的 "Schema Namespace"

c# - 使用 foreach() 从集合中删除多个实体?

c# - 通过 Internet 传输大文件的可靠且快速的方法

c# - ASP.NET MVC 将 ViewResult 作为 html 文件返回

c# - 不能使用三元运算符给 Linq 表达式赋值

c# - 为什么要预先加载实体?

c# - Entity Framework 抛出无法在表中插入标识列的显式值