多くのパラメータを使用したMoqReturnsAsync

Nov 21 2020

私はReturnsAsyncMoqの関数を少し使用して成功しましたが、次の問題にぶつかりました。ラムダ式にパラメーターを追加している間は常にnullを返します...今回、パラメーターをすべて追加すると、「ラムダ式を型に変換できません...」という恐ろしいものが表示されます。違う?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;
    });

回答

1 Toffer Nov 24 2020 at 02:08

私が発見したのは私の問題の根源はこれです...

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を使用すると、ラムダ式のシグネチャで最大15個のパラメーターのみを使用できます。

ただし、ReturnsAsyncデリゲートメソッド内に必要なIEnumerableは1つだけだったので、問題ありません...「Setup」呼び出しでモックアップされるメソッドのeveryoneパラメーターにパラメーターを指定する必要があると思ったのは間違いでした。 ..あなたがそれをする必要がないことがわかったので、私は行ってもいいです。:)