Moq ReturnsAsync birçok parametre kullanarak

Nov 21 2020

ReturnsAsyncMoq'un işlevini bir süredir başarıyla kullanıyorum , ancak aşağıdakilerle ilgili bir sorunla karşılaştım. Parametreleri lambda ifademe eklerken her zaman boş döndürürüm ... bu sefer hepsini eklediğimde, korkunç "Lambda ifadesini türe dönüştüremiyorum ..." yanlış? SetupYöntem giderir mükemmel para ... adil değilReturnsAsync

Kaç parametrenin tanımlanabileceği konusunda bir sınır var mı? Denedim ve 15. parametreden sonra çöktüğünü fark ettim ...

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;
    });

Yanıtlar

1 Toffer Nov 24 2020 at 02:08

Keşfettiğim şey, sorunumun kökü bu ...

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;

En fazla ReturnsAsync, lambda ifadenizin imzasında yalnızca 15'e kadar parametre kullanmanıza izin verir.

Bununla birlikte, ReturnsAsync temsilci yöntemimde yalnızca bir IEnumerable'a ihtiyacım vardı, bu yüzden iyiyim ... "Kurulum" çağrısında alay edilen yöntemdeki herkes parametresi için bir parametre belirtmem gerektiğini düşündüğümde yanılmışım. .. bunu yapmana gerek olmadığını anladığıma göre, gitmekte iyiyim. :)