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