Autofac模拟测试不能与.Include(...)一起使用。
创始人
2024-11-12 11:30:28
0

在测试中手动创建模拟对象来避免与.Include(...)一起使用时的问题。

示例代码:

假设我们有一个DataAccessService类,它具有以下方法:

public class DataAccessService : IDataAccessService
{
    private readonly DbContext _dbContext;
    
    public DataAccessService(DbContext dbContext)
    {
        _dbContext = dbContext;
    }
    
    public IList GetCustomers()
    {
        return _dbContext.Customers.Include(c => c.Orders).ToList();
    }
}

如果我们使用AutoFac来自动注入DbContext到DataAccessService,我们可能会写出以下代码:

[Test]
public void When_Getting_Customers_Then_Returns_Customers_With_Orders()
{
    var builder = new ContainerBuilder();
    builder.RegisterType().As();
    builder.RegisterType().As();
    
    var container = builder.Build();
    var service = container.Resolve();
    var customers = service.GetCustomers();
    
    Assert.IsTrue(customers.Any());
    Assert.IsTrue(customers.First().Orders.Any());
}

但是,由于.Include(...)方法的使用,这种方法将失败。因此,我们需要手动创建模拟DbContext来避免这种问题:

[Test]
public void When_Getting_Customers_Then_Returns_Customers_With_Orders()
{
    var builder = new ContainerBuilder();
    builder.RegisterType().As();
    
    var mockDbContext = new Mock();
    mockDbContext.Setup(m => m.Customers).Returns(MockData.Customers);
    mockDbContext.Setup(m => m.Orders).Returns(MockData.Orders);
    var service = new DataAccessService(mockDbContext.Object);
    
    var customers = service.GetCustomers();
    
    Assert.IsTrue(customers.Any());
    Assert.IsTrue(customers.First().Orders.Any());
}

在这个示例中,我们手动创建一个模拟DbContext,在其中设置返回用于测试的模拟数据,并将其注入到DataAccessService中。这种方法避免了使用.Include(...)方法时的问题。

相关内容

热门资讯

推出新举措!pokerworl... 推出新举措!pokerworld辅助器,情怀宜春挂,秘籍教程(有挂规律)1、情怀宜春挂免费脚本咨询教...
连日来!如何下载德普之星辅助软... 连日来!如何下载德普之星辅助软件,皮皮四川麻辣,方针教程(确实有挂);连日来!如何下载德普之星辅助软...
此事备受玩家关注!拱趴大菠萝自... 此事备受玩家关注!拱趴大菠萝自动计算机器人,雀友会广东潮汕苹果脚本,操作教程(有挂猫腻);1.雀友会...
针对!hhpoker视频巡查真... 针对!hhpoker视频巡查真的假的,牵手互动游戏辅助,手筋教程(有挂教程)1、牵手互动游戏辅助透视...
代打辅助挂!菠萝德州透视脚本,... 代打辅助挂!菠萝德州透视脚本,小逸碰胡辅助器,绝活儿教程(的确有挂)1、上手简单,内置详细流程视频教...
2026版复盘!aapoker... 2026版复盘!aapoker怎么提高中牌率,微乐辅助靠谱麻,诀窍教程(证实有挂)一、微乐辅助靠谱麻...
2026版技巧!wepoker... 2026版技巧!wepoker正确养号方法,微乐家乡小程序辅助,教材教程(有挂教学)1、微乐家乡小程...
受玩家影响!德州私人局怎么透视... 受玩家影响!德州私人局怎么透视,wepoker修改工具,手筋教程(有挂神器)1、任何wepoker修...
2026版规律!wepoker... 2026版规律!wepoker手机助手,随意玩第三方辅助,练习教程(的确有挂)1.随意玩第三方辅助 ...
出乎意料的是!wpk安卓下载辅... 出乎意料的是!wpk安卓下载辅助,开挂科技软件免费,技法教程(有挂秘诀)开挂科技软件免费透视方法中分...