C# 设置模拟EF服务方法

C# 设置模拟EF服务方法,c#,entity-framework,unit-testing,moq,C#,Entity Framework,Unit Testing,Moq,在NewsDataService类中有以下方法 public IEnumerable<NewsModel> GetImportantNews() { var result = this.newsfeedRepository.GetAll( x => x.IsImportant == true, x => new NewsModel() { Creator = x.User.UserName,

在NewsDataService类中有以下方法

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

基本上,我想要的是我的“expectedResult”被方法中的逻辑过滤。

当返回值时,您可以访问调用参数。使用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())
    );
mockedNewsfeedRepository
.Setup(x=>x.GetAll(
It.IsAny(),
It.IsAny()
))
//返回值时访问调用参数
.Returns((表达式谓词,表达式投影)=>
expectedResult.Where(predicate.Compile()).Select(projection.Compile())
);
资料来源:

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