单元测试 mock EF 中DbContext 和DbSet Include

本文介绍了在单元测试中如何模拟Entity Framework的DbContext和DbSet对象,特别是处理Include方法的情况。文章通过代码示例展示了如何创建虚拟DbSet,并解决在不使用virtual关键字时遇到的模拟问题。同时,提到了测试中应将EFService与数据库访问层分离以提高测试的独立性,并提供了相关参考资料链接。
摘要由CSDN通过智能技术生成

现在EF越来越流行了,很多时候业务成都是直接访问DbContext 和DbSet来操作数据的。 那么我们测试的时候如何来mock这2个对象了?现在时间很晚了, 就直接贴code吧

首先看看的我们DbContext的类吧:

 public class BloggerEntities : DbContext
    {
        public BloggerEntities()
            : base("BloggerEntities")
        {
            Configuration.ProxyCreationEnabled = false;
        }

        public virtual DbSet<Blog> Blogs { get; set; }
        public virtual DbSet<Article> Articles { get; set; }

       

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new ArticleConfiguration());
            modelBuilder.Configurations.Add(new BlogConfiguration());
        }
    }

public virtual DbSet<Blog> Blogs { get; set; }
public virtual DbSet<Article> Articles { get; set; }

注意了,我一般DbSet属性是没有添加virtual, 结果上面的 mockedContext.Setup(lambdaExpression).Returns(method.Invoke(null, new[] { listForFakeTable }));这句一直报错,搞了我2个小时都没有搞定。不能mock 实例方法。

单元测试code:

 static void Main(string[] args)
        {
            var context = EntityFrameworkMockHelper.GetMockContext<BloggerEntities>().Object;
            context.Articles.Add(new Article
            {
                Author = "Gavin",
                BlogID = 1,
                Contents = "test",
                ID = 2,
                Title = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值