Moq ReturnsAsync() avec paramètres
je suis en train de se moquer d'un référentiel de la méthode comme ça
public async Task<WhitelistItem> GetByTypeValue(WhitelistType type, string value)
à l'aide de Moq ReturnsAsync, comme ceci:
static List<WhitelistItem> whitelist = new List<WhitelistItem>();
var whitelistRepositoryMock = new Mock<IWhitelistRepository>();
whitelistRepositoryMock.Setup(w => w.GetByTypeValue(It.IsAny<WhitelistType>(), It.IsAny<string>()))
.ReturnsAsync((WhitelistType type, string value) =>
{
return (from item in whitelist
where item.Type == type && item.Value == value
select item).FirstOrDefault();
});
mais j'obtiens cette erreur dans la ligne "... ReturnsAsync ((WhitelistType type...):
ne peut pas convertir l'expression lambda en Type ' Model.WhitelistItem ' parce que il n'est pas un délégué de type
WhitelistType est un Enum comme ça:
public enum WhitelistType
{
UserName,
PostalCode
}
j'ai cherché par heures et n'ai trouvé aucune réponse pour mon problème.
des indices?
2 réponses
ReturnsAsync
n'a pas de version lambda contrairement à Returns
.
Corrigé: utiliser Returns
Task.FromResult
.Returns((WhitelistType type, string value) =>
{
return Task.FromResult(
(from item in whitelist
where item.Type == type && item.Value == value
select item).FirstOrDefault()
);
});
la réponse acceptée est périmée. Vous pouvez maintenant utiliser ReturnsAsync
avec lambdas, exactement comme dans l'exemple de code de la question. Pas besoin d'utiliser Task.FromResult()
plus. Vous avez juste besoin pour spécifier les types d'arguments lambda delegate. Autrement, vous obtiendrez le même message d'erreur:
impossible de convertir l'expression lambda en Type ' Model.WhitelistItem ' parce que ce n'est pas un délégué type