我要回过别人的代码并添加一些单元测试。我希望有人可以帮我为Linq创建一个Moq设置?
我的查询类似于
var someitem = _someRepo.GetAll().Where(x=> x.CustomerId == customerId)
.OrderByDescending(x=> x.DateAdded)
.Take(3)
.ToList();
我不确定如何设置多个条件(.Where(),. Take()等......)
我是否必须单独设置它们或者它们是更好的方式?
答案 0 :(得分:1)
更好的方法是在存储库本身的方法中获得查询和条件。然后,您可以模拟该方法而不必担心它。
例如(我正在对实体名称进行一些猜测等):
存储库类
public List<Customer> GetLatestThreeCustomers()
{
return Where(x=> x.CustomerId == customerId)
.OrderByDescending(x=> x.DateAdded)
.Take(3)
.ToList();
}
注意,您可能不需要GetAll
方法,如果您使用的是实体框架Where
,如果没有它,仍会获得正确的结果。
然后,只需在测试类中模拟GetLatestThreeCustomers
方法。
如果你不能创建一个新的存储库方法,你可以自己模拟GetAll
,然后让你测试顺序和查询,因为你可以控制它返回的内容(所以你什么都不返回,没有匹配,不同的日期等)。