寻求列表类的null替代方案:单元测试简化空列表模拟
解决方案
当然有合适的方案啦!你完全不需要手动创建空List实例,直接用框架提供的空序列工具就能搞定,还更高效。
两种推荐写法:
1. 使用 Enumerable.Empty<T>().AsQueryable()
Enumerable.Empty<MyClass>() 会返回一个只读的空泛型序列,本身是IEnumerable<MyClass>类型,调用AsQueryable()后就能转换成你需要的IQueryable<MyClass>,完美匹配GetAll<MyClass>()的返回类型,而且这个空序列是框架复用的单例,不会每次都分配新内存。
修改后的代码:
A.CallTo(() => _dataContext.GetAll<MyClass>()).Returns(Enumerable.Empty<MyClass>().AsQueryable());
2. 更直接的 Queryable.Empty<T>()(.NET Core 3.0+/NET 5+)
如果你用的是较新的.NET版本,可以直接用Queryable.Empty<MyClass>(),它会直接返回IQueryable<MyClass>类型的空序列,省去了调用AsQueryable()的步骤:
A.CallTo(() => _dataContext.GetAll<MyClass>()).Returns(Queryable.Empty<MyClass>());
这两种方式都满足你的需求:既避免了创建不必要的空列表,又保证返回的不是null,完全符合GetAll方法“返回为空或非空序列”的约定。
内容的提问来源于stack exchange,提问作者Kieran
相关产品推荐
相关产品推荐

