1

我正在尝试对以下方法进行单元测试(repo 被模拟):

public List<StatusLevelDTO> FindAllTranslated(string locale)
{
    var statusLevels = Context.StatusLevels
        .IncludeFilter(sl => sl.Translations
            .Where(t => t.Locale.Name == locale))
        .Where(sl => !sl.Deleted)
        .ToList();
    return Mapper.Map<List<StatusLevelDTO>>(statusLevels);
}

它使用了一个名为 EntityFramework Plus 的第三方库,我相信它使用投影来过滤包含的实体。

现在,当我运行整个项目时,一切都很好,但是单元测试似乎忽略了这个方法并返回了所有内容。

有没有办法让IncludeFilter扩展方法简单地完成它的工作?

模拟配置:

public static DbSet<T> GetMockedDbSet<T>(List<T> sourceList) where T : class
    {
        var queryableList = sourceList.AsQueryable();
        var dbSetMock = new Mock<DbSet<T>>();
        dbSetMock.As<IQueryable<T>>().Setup(x => x.GetEnumerator()).Returns(() => queryableList.GetEnumerator());
        dbSetMock.As<IQueryable<T>>().Setup(m => m.Provider).Returns(queryableList.Provider);
        dbSetMock.As<IQueryable<T>>().Setup(m => m.Expression).Returns(queryableList.Expression);
        dbSetMock.As<IQueryable<T>>().Setup(m => m.ElementType).Returns(queryableList.ElementType);
        dbSetMock.Setup(d => d.Add(It.IsAny<T>())).Callback<T>(s => sourceList.Add(s));
        dbSetMock.Setup(d => d.Include(It.IsAny<string>())).Returns(dbSetMock.Object);
        return dbSetMock.Object;
    }

一个可能的重复项,例如Mocking Extension Methods with Moq并不能回答我的问题,因为我不是在问如何模拟/存根扩展方法。问题是:是否可以在不模拟/存根的情况下以某种方式调用其逻辑?

4

0 回答 0