C# 以lambda表达式作为输入参数的xUnit模拟方法

C# 以lambda表达式作为输入参数的xUnit模拟方法,c#,unit-testing,asp.net-core,mocking,xunit,C#,Unit Testing,Asp.net Core,Mocking,Xunit,我有一个这样的方法: public Task<IEnumerable<VwSubscriptionProductsPf>> GetVwSubscriptionProductsBy( Expression<Func<VwSubscriptionProductsPf, object>> lambda) { var result = GetList(lambda); return result; } 现在我想用xUnit模拟方法

我有一个这样的方法:

public Task<IEnumerable<VwSubscriptionProductsPf>> GetVwSubscriptionProductsBy(
    Expression<Func<VwSubscriptionProductsPf, object>> lambda)
{
    var result = GetList(lambda);
    return result;
}
现在我想用xUnit模拟方法的返回

var products = new List<VwSubscriptionProductsPf> 
    { new VwSubscriptionProductsPf { SubscriptionId = 1, Name = "Product 1" }};

_uow.Setup(x => x.VwSubscriptionProductsRepository
    .GetVwSubscriptionProductsBy(s => s.SubscriptionId == 1))
    .Returns(Task.FromResult(products.AsEnumerable()));
var产品=新列表
{new VwSubscriptionProductsPf{SubscriptionId=1,Name=“Product 1”};
_uow.Setup(x=>x.VwSubscriptionProductsRepository
.GetVwSubscriptionProductsBy(s=>s.SubscriptionId==1))
.Returns(Task.FromResult(products.AsEnumerable());
你能告诉我我错过了什么吗


问题是
GetVwSubscriptionProductsBy
返回一个空的
IEnumerable
,我正在等待
IEnumerable
,其中一个元素是我手动创建的。

我找到了答案,该方法可以这样模拟:

var products = await _uow.VwSubscriptionProductsRepository
                   .GetVwSubscriptionProductsBy(s => s.SubscriptionId == subscription.Id);
_uow.Setup(x => x.VwSubscriptionProductsRepository.GetVwSubscriptionProductsBy(It.IsAny<Expression<Func<VwSubscriptionProductsPf, object>>>()))
    .Returns(Task.FromResult(products.AsEnumerable()));
\u uow.Setup(x=>x.VwSubscriptionProductsRepository.GetVwSubscriptionProductsBy(It.IsAny()))
.Returns(Task.FromResult(products.AsEnumerable());

什么是
GetList
方法?有什么问题吗?@PavelAnikhouski这是我自己实现的方法,我不认为它会影响结果,因为我在模仿getvwSubscriptionProductsmethod@JohnathanBarclay问题是模拟对象不包含my return对象,因为它返回一个包含0个元素的IEnumerable