2017-02-06 15 views
1

私はセットアップ嘲笑EFサービスメソッド

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

私NewsDataServiceクラスに以下のメソッドを持っている私の質問は...それはA返すように私のセットアップ嘲笑サービス法(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); 

基本的に、私の "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

おかげで百万Nkosi。 これは完璧に機能しました! –

関連する問題