Moq Returns使用许多参数进行同步



我已经成功地使用了Moq中的ReturnsAsync函数一段时间了,但遇到了以下问题。当我向lambda表达式添加参数时,我总是返回null。。。这一次,当我把它们都加进去时,我得到了可怕的";无法将lambda表达式转换为类型"有什么明显的我错了吗?Setup方法能很好地解决。。。只是不是ReturnsAsync

可以定义的参数数量有限制吗?我试过了,注意到它在第15个参数之后就失效了。。。

var buildServiceMock = new Mock<IBuildService>();
buildServiceMock
.Setup(bsm => bsm.QueryBuildsAsync(
It.IsAny<BuildType>(),
It.IsAny<string>(),
It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(),
It.IsAny<string>(),
It.IsAny<BuildReason?>(),
It.IsAny<BuildStatus?>(),
It.IsAny<BuildResult?>(),
It.IsAny<IEnumerable<string>>(),
It.IsAny<IEnumerable<string>>(),
It.IsAny<int?>(),
It.IsAny<int?>(),
It.IsAny<QueryDeletedOption?>(),
It.IsAny<BuildQueryOrder?>(),
It.IsAny<string>(),
It.IsAny<IEnumerable<int>>(),
It.IsAny<string>(),
It.IsAny<CancellationToken>()))
.ReturnsAsync((
BuildType buildType,
string buildNumber,
DateTime? minDateTime,
DateTime? maxDateTime,
string requestedFor,
BuildReason? reasonFilter,
BuildStatus? statusFilter,
BuildResult? resultFilter,
IEnumerable<string> tags,
IEnumerable<string> properties,
int? top,
int? maxBuildsPerDefinition,
QueryDeletedOption? deletedFilter,
BuildQueryOrder? queryOrder,
string branchName,
IEnumerable<int> buildIds,
string label,
CancellationToken cancellationToken) =>
{
return null;
});

我发现问题的根源是。。。

public static IReturnsResult<TMock> ReturnsAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TMock, TResult>(this IReturns<TMock, ValueTask<TResult>> mock, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> valueFunction) where TMock : class;

ReturnsAsync在max时只允许在lambda表达式的签名中使用最多15个参数。

然而,我只需要ReturnsAsync委托方法中的一个IEnumerable,所以我很好。。。我错了,因为我认为我必须为"中模拟的方法中的每个参数指定一个参数;设置";呼叫既然我发现你不需要那样做,我很乐意去

最新更新