C#Moq SetUp Linq功能

时间:2016-05-16 10:41:55

标签: c# linq moq

我要回过别人的代码并添加一些单元测试。我希望有人可以帮我为Linq创建一个Moq设置?

我的查询类似于

var someitem = _someRepo.GetAll().Where(x=> x.CustomerId == customerId)
                                 .OrderByDescending(x=> x.DateAdded)
                                 .Take(3)
                                 .ToList();

我不确定如何设置多个条件(.Where(),. Take()等......)

我是否必须单独设置它们或者它们是更好的方式?

1 个答案:

答案 0 :(得分:1)

更好的方法是在存储库本身的方法中获得查询和条件。然后,您可以模拟该方法而不必担心它。

例如(我正在对实体名称进行一些猜测等):

存储库类

public List<Customer> GetLatestThreeCustomers()
{
    return Where(x=> x.CustomerId == customerId)
                             .OrderByDescending(x=> x.DateAdded)
                             .Take(3)
                             .ToList();
}

注意,您可能不需要GetAll方法,如果您使用的是实体框架Where,如果没有它,仍会获得正确的结果。

然后,只需在测试类中模拟GetLatestThreeCustomers方法。

如果你不能创建一个新的存储库方法,你可以自己模拟GetAll,然后让你测试顺序和查询,因为你可以控制它返回的内容(所以你什么都不返回,没有匹配,不同的日期等)。