Moq ReturnsAsync en utilisant de nombreux paramètres
J'utilise la ReturnsAsync
fonction de Moq avec succès depuis un moment, mais j'ai rencontré un problème avec ce qui suit. Je retourne toujours simplement null pendant que j'ajoute les paramètres à mon expression lambda ... cette fois, quand je les ai tous ajoutés, j'obtiens le redouté "Impossible de convertir l'expression lambda en type ..." Y a-t-il quelque chose d'évident que j'ai obtenu? faux? La Setup
méthode se résout parfaitement bien ... mais pasReturnsAsync
Y a-t-il une limite au nombre de paramètres qui peuvent être définis? J'ai essayé et j'ai remarqué que ça crape après le 15ème paramètre ...
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;
});
Réponses
Ce que j'ai découvert est la racine de mon problème, c'est ceci ...
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 at max vous permettra uniquement d'utiliser jusqu'à 15 paramètres dans la signature de votre expression lambda.
Cependant, je n'avais besoin que de celui IEnumerable dans ma méthode de délégué ReturnsAsync, donc je vais bien ... Je me suis trompé en ce que je pensais que je devais spécifier un paramètre pour tout le monde dans la méthode simulée dans l'appel "Setup". .. maintenant que j'ai trouvé que vous n'avez pas besoin de faire ça, je suis prêt à partir. :)