2017-02-06 4 views
1

я следующий метод в моем классе NewsDataServiceнастроить издевались метод EF Service

public IEnumerable<NewsModel> GetImportantNews() 
{ 
    var result = this.newsfeedRepository.GetAll(
     x => x.IsImportant == true, 
     x => new NewsModel() 
     { 
      Creator = x.User.UserName, 
      AvatarPictureUrl = x.User.AvatarPictureUrl, 
      Content = x.Content, 
      CreatedOn = x.CreatedOn 
     }) 
     .OrderByDescending(x => x.CreatedOn); 

    return result; 
} 

Мой вопрос ... Как настроить метод издевались службы (GetImportantNews), так, что она возвращает Список Латвийский компании по пошиву из бумаги и картона - NewsModel?

Моя идея что-то вроде этого, но она пока не работает, потому что она всегда возвращает полный список.

var expectedResult = new List<Newsfeed>() 
{ 
    new Newsfeed() 
    { 
     IsImportant = false, 
    }, 
    new Newsfeed() 
    { 
     IsImportant = true 
    } 
}; 
mockedNewsfeedRepository 
    .Setup(x => x.GetAll(
     It.IsAny<Expression<Func<Newsfeed, bool>>>(), 
     It.IsAny<Expression<Func<Newsfeed, NewsModel>>>() 
    )).Returns(expectedResult); 

В принципе, я хочу, чтобы мой «ожидаемый результат» был отфильтрован логикой в ​​методе.

ответ

2

У вас есть доступ к аргументам вызова при возврате значения. Примените аргументы предиката и проекционного выражения к поддельному источнику данных, используя linq, как в приведенном ниже примере.

mockedNewsfeedRepository 
    .Setup(x => x.GetAll(
     It.IsAny<Expression<Func<Newsfeed, bool>>>(), 
     It.IsAny<Expression<Func<Newsfeed, NewsModel>>>() 
    )) 
    // access invocation arguments when returning a value 
    .Returns((Expression<Func<Newsfeed, bool>> predicate, Expression<Func<Newsfeed, NewsModel>> projection) => 
     expectedResult.Where(predicate.Compile()).Select(projection.Compile()) 
    ); 

Источник: Moq Quickstart

+0

Благодаря миллиона Нкози. Это сработало отлично! –

Смежные вопросы