C# Moq 设置 Linq 函数

C# Moq SetUp Linq Function

我要回顾某人的代码并添加一些单元测试。我希望有人可以帮助我为 Linq 创建最小起订量设置?

我的查询类似于

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

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

我是否必须分别设置它们中的每一个,还是采用更好的方法?

更好的方法是将查询和条件放在存储库本身的方法中。然后,您可以模拟该方法,完全不用担心它。

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

存储库class

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

请注意,您可能不需要 GetAll 方法,如果您使用 Entity Framework Where 没有它仍然会得到正确的结果。

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

如果你不能创建一个新的存储库方法,你可以自己模拟 GetAll,这样你就可以测试订单和查询,因为你可以控制它 returns (所以你可以 return 什么都没有,没有匹配的,不同的日期等)。