【问题标题】:Moq ReturnsAsync using many parametersMoq ReturnsAsync 使用许多参数
【发布时间】:2020-11-20 23:42:34
【问题描述】:

我已经成功使用了 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;
    });

【问题讨论】:

标签: c# .net moq


【解决方案1】:

我发现问题的根源是这个......

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 仅允许您在 lambda 表达式的签名中使用最多 15 个参数。

但是,我的 ReturnsAsync 委托方法中只需要一个 IEnumerable,所以我很好......我错了,我认为我必须为在“设置”中模拟的方法中的每个参数指定一个参数“打电话……既然我发现你不需要那样做,我可以走了。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 2015-02-02
    • 2012-09-22
    • 1970-01-01
    • 2011-06-24
    • 2012-11-09
    • 1970-01-01
    相关资源
    最近更新 更多