2015-07-20 1 views
15

Я пытаюсь издеваться метод репозитория, как этотMoq ReturnsAsync() с параметрами

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

с использованием MOq ReturnsAsync, как это:

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

, но я получаю эту ошибку в линия»... ReturnsAsync ((тип WhitelistType ...):

Невозможно преобразовать лямбда-выражения к типу 'Model.WhitelistItem', потому что его не тип делегата

WhitelistType приведен Enum так:

public enum WhitelistType 
    { 
     UserName, 
     PostalCode 
    } 

Я искал часами и не нашел никакого ответа на мою проблему.

Любые подсказки?

ответ

32

ReturnsAsync не имеет лямбда версия непохожий Returns один.

Fix: используйте 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() 
      ); 
    }); 
+2

выглядит, как вам нужно указать тип для аргументов лямбда-делегат (тип WhitelistType, строковое значение) – BozoJoe

+0

является возможным вернуть параметр, передаваемый в метод как async return type, поэтому экземпляр в ---> Задача out? (тот же экземпляр you) – Choco

+0

@Choco не уверен, что вы пытаетесь сделать - рассмотрите вопрос вместо него и покажите фактический код (возможно, вы ищете 'return Task.FromResult (value)') ... –