使用可选参数模拟异步方法抛出表达式不是 属性 访问
Mocking async methods with optional parameters throws Expression is not a Property Access
我正在使用 Nuget 包 Moq (v4.13.1)
我试图模拟的 class/method 具有以下接口:
public interface IAgendaService
{
Task<IList<IMeeting>> GetRecentMeetingsMostRecentFirstAsync(
IWho who,
TimeSpan? timeSpan = null,
int? maxNumberOfMeetings = null);
}
在我的测试方法中,我有以下代码来定义模拟:
Mock<IAgendaService> service = new Mock<IAgendaService>(MockBehavior.Strict);
service.SetupGet(x =>
x.GetRecentMeetingsMostRecentFirstAsync(
It.IsAny<IWho>(),
It.IsAny<TimeSpan?>(),
It.IsAny<int?>()))
.Returns(Task.FromResult((IList<IMeeting>)new List<IMeeting>()));
当我 运行 测试时, service.SetupGet() 抛出以下异常:
测试方法Agenda.Web.Tests.Controllers.HomeController.IndexTests.TestIndex抛出异常:
System.ArgumentException:表达式不是 属性 访问:x => x.GetRecentMeetingsMostRecentFirstAsync(It.IsAny(), It.IsAny(), It.IsAny())
在 Moq.ExpressionExtensions.ToPropertyInfo(LambdaExpression 表达式)
在 Moq.Mock.SetupGet(Mock mock, LambdaExpression 表达式, Condition 条件)
在 Moq.Mock1.SetupGet[TProperty](Expression
1 表达式)
我做错了什么?
您似乎使用了错误的方法进行模拟设置。您应该使用 Setup
方法,因为 SetupGet
用于 属性 getter。尝试以下操作:
service.Setup(x =>
x.GetRecentMeetingsMostRecentFirstAsync(
It.IsAny<IWho>(),
It.IsAny<TimeSpan?>(),
It.IsAny<int?>()))
.Returns((IList<IMeeting>)new List<IMeeting>()));
也没有必要使用 Task.FromResult
因为它是一个模拟对象,所以没有任何异步发生。
我正在使用 Nuget 包 Moq (v4.13.1)
我试图模拟的 class/method 具有以下接口:
public interface IAgendaService
{
Task<IList<IMeeting>> GetRecentMeetingsMostRecentFirstAsync(
IWho who,
TimeSpan? timeSpan = null,
int? maxNumberOfMeetings = null);
}
在我的测试方法中,我有以下代码来定义模拟:
Mock<IAgendaService> service = new Mock<IAgendaService>(MockBehavior.Strict);
service.SetupGet(x =>
x.GetRecentMeetingsMostRecentFirstAsync(
It.IsAny<IWho>(),
It.IsAny<TimeSpan?>(),
It.IsAny<int?>()))
.Returns(Task.FromResult((IList<IMeeting>)new List<IMeeting>()));
当我 运行 测试时, service.SetupGet() 抛出以下异常:
测试方法Agenda.Web.Tests.Controllers.HomeController.IndexTests.TestIndex抛出异常:
System.ArgumentException:表达式不是 属性 访问:x => x.GetRecentMeetingsMostRecentFirstAsync(It.IsAny(), It.IsAny(), It.IsAny())
在 Moq.ExpressionExtensions.ToPropertyInfo(LambdaExpression 表达式)
在 Moq.Mock.SetupGet(Mock mock, LambdaExpression 表达式, Condition 条件)
在 Moq.Mock1.SetupGet[TProperty](Expression
1 表达式)
我做错了什么?
您似乎使用了错误的方法进行模拟设置。您应该使用 Setup
方法,因为 SetupGet
用于 属性 getter。尝试以下操作:
service.Setup(x =>
x.GetRecentMeetingsMostRecentFirstAsync(
It.IsAny<IWho>(),
It.IsAny<TimeSpan?>(),
It.IsAny<int?>()))
.Returns((IList<IMeeting>)new List<IMeeting>()));
也没有必要使用 Task.FromResult
因为它是一个模拟对象,所以没有任何异步发生。