Używam funkcji ReturnsAsync z MOQ z sukcesem przez sukces, ale wpadłem na problem z następującymi. Zawsze zwracam null podczas dodawania parametrów do mojego wyrażenia lambda ... Tym razem, kiedy dostałem je wszystkie dodane, dostaję straszną "Nie można konwertować wyrażenia Lambda do pisze ..." Czy jest coś oczywiste, że dostałem źle? Metoda Setup rozwiązuje doskonale ... po prostu nie ReturnsAsync

Czy istnieje ograniczenie liczby parametrów, które można zdefiniować? Próbowałem i zauważyłem, że kończy się po 15. parametrze ...

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;
    });
2
Toffer 21 listopad 2020, 02:42

1 odpowiedź

Najlepsza odpowiedź

To, co odkryłem, jest źródłem mojego problemu, jest to ...

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 w MAX pozwala tylko na użycie do 15 parametrów w podpisie wyrażenia Lambda.

Jednak potrzebowałem tylko jednego IeNumerable w mojej metodzie delegata Returnsasync, więc jestem dobry ... Pomyślałem, że myślałem, że myślałem, że muszę określić parametr dla każdego parametru w metodzie wyśmienionej w "Setup" Call. .. Teraz, gdy znalazłem, że nie musisz tego robić, dobrze mi się to zrobić. :)

1
Toffer 23 listopad 2020, 19:08