Autofac无法与.Include(...)一起使用的mocking。
创始人
2024-11-12 12:00:40
0

这个问题是因为使用了Autofac的Mocks自动解决依赖项功能,但是.Include(...)方法会跳过Mocks,并导致无法正确设置DbContext,从而引发错误。解决这个问题的方法是手动模拟实体集,并使用Moq框架模拟实体集的.Include(...)方法。以下是一个示例:

// 定义一个IQueryable集合的接口,用于后续的模拟。
public interface IQueryableSet : IDbSet, IQueryable where T : class
{
}

// 在测试类的构造函数中手动创建实体集对象并模拟.Include(...)方法。
[TestFixture]
public class MyTests
{
    private Mock> _mockSet;
    private Mock _mockContext;
    private MyRepository _repo;

    public MyTests()
    {
        var data = new List
        {
            new MyEntity { Id = 1, Name = "Entity 1" },
            new MyEntity { Id = 2, Name = "Entity 2" },
            new MyEntity { Id = 3, Name = "Entity 3" }
        }.AsQueryable();

        _mockSet = new Mock>();
        _mockSet.As>().Setup(m => m.Provider).Returns(data.Provider);
        _mockSet.As>().Setup(m => m.Expression).Returns(data.Expression);
        _mockSet.As>().Setup(m => m.ElementType).Returns(data.ElementType);
        _mockSet.As>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());

        _mockContext = new Mock();
        _mockContext.Setup(c => c.MyEntities).Returns(_mockSet.Object);

        _repo = new MyRepository(_mockContext.Object);
    }

    // 测试可以使用模拟集合,并测试.Include(...)方法可以正确地作用于模拟。
    [Test]
    public void MyTest()
    {
        var entities = _repo.GetEntitiesWithChildren();
        Assert.AreEqual(3, entities.Count());
        _mockSet.Verify(m => m.Include(It.IsAny()), Times.Once());
    }
}

相关内容

热门资讯

透视工具!wepoker透视脚... 透视工具!wepoker透视脚本免费使用视频(透视)约局吧辅助器下载(确实有辅助神器)-哔哩哔哩亲,...
透视存在!德普之星辅助器怎么用... 透视存在!德普之星辅助器怎么用(透视)网易游戏辅助工具(一直真的是有辅助平台)-哔哩哔哩网易游戏辅助...
透视神器!wejoker辅助脚... 透视神器!wejoker辅助脚本(透视)蜀山四川小程序破解版下载(总是存在有辅助辅助器)-哔哩哔哩1...
此事引发网友热议!wejoke... 此事引发网友热议!wejoker辅助软件(透视)苹果手机闲逸辅助器(确实有辅助软件)-哔哩哔哩1、玩...
一直以来!hhpoker真能买... 一直以来!hhpoker真能买到挂吗(透视)微友助手破解版(其实存在有辅助平台)-哔哩哔哩1、下载好...
近日!约局吧开挂神器是真的吗(... 近日!约局吧开挂神器是真的吗(透视)四川皮皮辅助(切实真的是有辅助修改器)-哔哩哔哩四川皮皮辅助能透...
昨日!wepoker辅助器怎么... 昨日!wepoker辅助器怎么弄(透视)胡易辅助软件(确实是真的辅助工具)-哔哩哔哩胡易辅助软件是不...
现有关情况通报如下!wepok... 现有关情况通报如下!wepoker破解工具(透视)边锋老友威海荣成辅助(好像真的是有辅助辅助器)-哔...
透视有挂!如何判断wpk辅助软... 透视有挂!如何判断wpk辅助软件的真假(透视)科乐填坑辅助器(一贯真的有辅助辅助器)-哔哩哔哩科乐填...
透视中牌率!wepoker怎么... 透视中牌率!wepoker怎么设置房间(透视)斗棋崇阳麻将辅助脚本(其实存在有辅助工具)-哔哩哔哩1...