C# 使用MOQ的模拟异步Get方法
如何消除此错误消息:C# 使用MOQ的模拟异步Get方法,c#,.net,async-await,moq,C#,.net,Async Await,Moq,如何消除此错误消息: Error 5 Cannot implicitly convert type 'System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<TGB.Business.DTO.SchoolyearDTO>>' to 'System.Collections.Generic.IEnumerable<TGB.Business.DTO.SchoolyearDTO>'.
Error 5 Cannot implicitly convert type 'System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<TGB.Business.DTO.SchoolyearDTO>>' to 'System.Collections.Generic.IEnumerable<TGB.Business.DTO.SchoolyearDTO>'. An explicit conversion exists (are you missing a cast?)
错误5无法将类型“System.Threading.Tasks.Task”隐式转换为“System.Collections.Generic.IEnumerable”。存在显式转换(是否缺少强制转换?)
我以为我的任务。FromResult会解决这个问题,但没有
mockService.Setup<IEnumerable<SchoolyearDTO>>(c => c.GetSchoolyears()).Returns(
Task.FromResult(Enumerable.Empty<SchoolyearDTO>()));
public async Task<IEnumerable<SchoolyearDTO>> GetSchoolyearsAsync()
{
var schoolyears = await ...
}
mockService.Setup(c=>c.GetSchoolyears())。返回(
Task.FromResult(Enumerable.Empty());
公共异步任务GetSchoolyearsAsync()
{
var schoolyears=等待。。。
}
GetSchoolyearsAsync
是一种异步方法,因此它返回一个任务
,而不仅仅是一个IEnumerable
。您需要在SetupGet
mockService.SetupGet<Task<IEnumerable<SchoolyearDTO>>>(c => c.GetSchoolyears()).
Returns(Task.FromResult(Enumerable.Empty<SchoolyearDTO>()));
mockService.SetupGet(c=>c.GetSchoolyears()。
返回(Task.FromResult(Enumerable.Empty());
您正在将任务返回给不接受任务的对象。您需要更改模拟或方法。不接受吗?但是我的GetSchoolyears正在等待任务?请查看我的答案以获得解释。现在我得到了错误:非虚拟(在VB中可重写)成员上的设置无效:c=>c.GetSchoolyearsAsync()从何时开始我必须使用MOQ使我的方法虚拟?@Elisa你确定GetSchoolyearsAsync和GetSchoolyears是同一个方法吗?我做了重命名。。。是的,只有xxxAsync存在!好的,我必须使用虚拟的原因是因为MOQ不能模拟除接口成员以外的非虚拟成员。这是我第一次使用无接口lol。。。所以我走进了那个。。。