【发布时间】:2024-05-04 21:15:02
【问题描述】:
我有一个这样的方法:
public IEnumerable<string> GetCompaniesCities()
{
return CompanyRepository.All()
.OrderBy(c => c.City)
.Select(c => c.City.ToUpper())
.Distinct().ToList();
}
如何测试(使用最小起订量)OrderBy (c => c.City) 被调用?还有Select(c => c.City.ToUpper() 和Distinct()?
我来了
对非虚拟(在 VB 中可覆盖)成员的验证无效:x => x.All().OrderBy(c => c.City)
注意:这是单元测试,不是集成测试,所以我不会去数据库
【问题讨论】:
-
不要像这样测试内部,而是测试方法是否返回它应该返回的内容以及它是否按正确的顺序。
-
问题是它是单元测试,不是集成测试,所以我不会去db
-
这不是避免集成测试的方法。您应该改为模拟存储库并在其中注入您的内存数据(查看依赖注入和框架,如 unity 和 ninject)。
-
根据您的数据库设置,您可能希望在进行 ToUpper 转换后进行 OrderBy。如果您的数据库区分大小写,则如果您混合了大小写城市,则城市将无法正确排序。
标签: c# linq unit-testing moq