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?

26
demandé sur Daniel Medina 2015-07-21 01:28:26

2 réponses

ReturnsAsync n'a pas de version lambda contrairement à Returns.

Corrigé: utiliser ReturnsTask.FromResult

.Returns((WhitelistType type, string value) =>
     {
         return Task.FromResult(
           (from  item in whitelist
               where item.Type == type && item.Value == value
               select item).FirstOrDefault()
           );
  });
47
répondu Alexei Levenkov 2017-10-26 04:40:32

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

0
répondu Paul Siersma 2018-09-25 14:21:05