Moq ReturnsAsync birçok parametre kullanarak
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
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. :)