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

相关内容

热门资讯

wepoke辅助机器人!wep... wepoke辅助机器人!wepoke有没有玄学(wepokeai代打)果然是真的有挂(详细有辅助挂教...
红龙扑克辅助工具!红龙扑克会作... 红龙扑克辅助工具!红龙扑克会作假吗,(红龙扑克)总是有挂(详细辅助器教程);亲,其实确实真的有挂(需...
微扑克辅助软件!微扑克小程序辅... 此外,数据分析德州(微扑克辅助软件)辅助神器app还具备辅助透视行为开挂功能,通过对客户微扑克辅助软...
wepokeai机器人!wep... wepokeai机器人!wepokeai辅助(Wepoke检测)一直是有挂(详细ai代打的胜率教程)...
aapoker辅助工具!aap... aapoker辅助工具!aapoker辅助软件,(aapoker系统)一直是真的有挂(详细辅助工具教...
微扑克游戏辅助器!微扑克插件,... 1、微扑克游戏辅助器!微扑克插件,(微扑克有挂)果然真的有挂(详细辅助器ios教程);详细教程。2、...
德扑之星实战!德扑之星里面怎么... 德扑之星实战!德扑之星里面怎么隐藏入池率,德扑安卓都是真的有挂(详细ai购买教程) 科技详细教程;7...
wepoke辅助技巧!wepo... wepoke辅助技巧!wepoke科技(wepoke实锤)都是是真的有挂(详细有外挂教程);科技安装...
红龙扑克辅助器!红龙扑克是不是... 红龙扑克辅助器!红龙扑克是不是有问题,(红龙扑克)真是存在有挂(详细辅助工具教程);软件透明挂作为一...
德州之星插件!德扑之星为什么不... 德州之星插件!德扑之星为什么不发牌,德扑之星功能确实有挂(详细ai代打教程);原来确实真的有挂(需添...