2015-07-20 13 views
15

che sto cercando di prendere in giro il metodo di un repository come quellaMoq ReturnsAsync() con parametri

public async Task<WhitelistItem> GetByTypeValue(WhitelistType type, string value) 

utilizzando Moq ReturnsAsync, in questo modo:

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(); 
            }); 

ma sto ottenendo questo errore nel line" ... ReturnsAsync ((tipo WhitelistType ...):

Impossibile convertire espressione lambda al tipo 'Model.WhitelistItem' perché esso non è un tipo delegato

WhitelistType è un Enum del genere:

public enum WhitelistType 
    { 
     UserName, 
     PostalCode 
    } 

Ho cercato per ore e non ho trovato alcuna risposta al mio problema.

Eventuali indizi?

risposta

32

ReturnsAsync non ha versione lambda a differenza di Returns.

Fix: utilizzare Returns con Task.FromResult

.Returns((WhitelistType type, string value) => 
    { 
     return Task.FromResult(
      (from item in whitelist 
       where item.Type == type && item.Value == value 
       select item).FirstOrDefault() 
      ); 
    }); 
+2

sembra è necessario specificare il tipo per gli argomenti lambda delegato (tipo WhitelistType, valore stringa) – BozoJoe

+0

è possibile restituire il parametro passato al metodo come un tipo di ritorno asincrono, quindi istanza in ---> Task out? (stessa istanza tu) – Choco

+0

@Choco non sei sicuro di cosa stai provando a fare - considera la domanda come una domanda invece e mostra il codice reale (forse stai cercando 'return Task.FromResult (value)') ... –