Ich versuche, die Methode eines Projektarchivs so zu verspotten
public async Task<WhitelistItem> GetByTypeValue(WhitelistType type, string value)
verwenden Sie Moq ReturnsAsync wie folgt:
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();
});
aber ich erhalte diesen Fehler in der Zeile "... ReturnsAsync ((WhitelistType type ...):
Lambda-Ausdruck kann nicht in Typ 'Model.WhitelistItem' konvertiert werden, da es sich nicht um einen Delegattyp handelt
WhitelistType ist so eine Aufzählung:
public enum WhitelistType
{
UserName,
PostalCode
}
Ich habe stundenlang gesucht und keine Antwort auf mein Problem gefunden.
Irgendwelche Hinweise?
Sie können ReturnsAsync
mit Lambdas genau wie im Codebeispiel der Frage verwenden. Task.FromResult()
muss nicht mehr verwendet werden. Sie müssen lediglich die Typen der Lambda-Delegatenargumente angeben . Ansonsten erhalten Sie die gleiche Fehlermeldung:
Lambda-Ausdruck kann nicht in Typ 'Model.WhitelistItem' konvertiert werden, da es sich nicht um einen Delegattyp handelt
Das folgende Beispiel funktioniert mit der neuesten Version von Moq:
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();
});
Sie müssen Returns
mit Task.FromResult
Verwenden:
.Returns((WhitelistType type, string value) =>
{
return Task.FromResult(
(from item in whitelist
where item.Type == type && item.Value == value
select item).FirstOrDefault()
);
});