2015-07-20 11 views
15

Tôi đang cố gắng để thử phương pháp của một kho lưu trữ như thếMoq ReturnsAsync() với các thông số

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

sử dụng Moq ReturnsAsync, như thế này:

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

nhưng tôi nhận được lỗi này trong dòng "... ReturnsAsync ((Loại WhitelistType ...):

Không thể chuyển đổi biểu thức lambda thành loại 'Model.WhitelistItem' vì nó không phải là một loại đại biểu

WhitelistType là một Enum như thế:

public enum WhitelistType 
    { 
     UserName, 
     PostalCode 
    } 

Tôi đã tìm kiếm bằng giờ và không tìm thấy bất kỳ câu trả lời cho vấn đề của tôi.

Bất kỳ manh mối nào?

Trả lời

32

ReturnsAsync không có phiên bản lambda khác với Returns một.

Fix: sử dụng Returns với 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

vẻ như bạn cần phải xác định loại cho các đối số lambda đại biểu (loại WhitelistType, chuỗi giá trị) – BozoJoe

+0

là nó có thể quay trở lại tham số truyền vào phương pháp như một loại trả về không đồng bộ, ví dụ như trong ---> Tác vụ ra? (ví dụ như vậy) – Choco

+0

@Choco không chắc bạn đang cố làm gì - hãy xem xét hỏi nó như một câu hỏi thay vào đó và hiển thị mã thực tế (có thể bạn đang tìm kiếm 'return Task.FromResult (value)') ... –

Các vấn đề liên quan