千家信息网

如何对Entity Framework Core进行单元测试

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍如何对Entity Framework Core进行单元测试,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、引言我们先来讲解如何对EntityFramewor
千家信息网最后更新 2026年11月03日如何对Entity Framework Core进行单元测试

这篇文章主要介绍如何对Entity Framework Core进行单元测试,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、引言

我们先来讲解如何对EntityFrameworkCore进行单元测试,这里我们使用内存数据库进行测试。使用内存数据库需要安装Microsoft.EntityFrameworkCore.InMemory这个包。

二、创建测试项目

我们还是以上面文章中创建的项目为例,在解决方案中添加一个测试项目,这里选择使用xUnit作为测试项目:

创建完成后的项目结构如下图所示:

我们首先在EFCoreTest项目中安装Microsoft.EntityFrameworkCore和Microsoft.EntityFrameworkCore.InMemory这两个包,直接在NuGet里面安装即可,这里不在描述安装步骤。添加完成以后添加对实体的引用。

我们创建数据上下文,继承自DbContext:

/// /// 数据上下文,继承自DbContext/// public class EFCoreDbContext:DbContext{    ///     /// 通过DbContextOptions选项给父类构造传参    ///     ///     public EFCoreDbContext(DbContextOptions options):base(options)    {    }    // DbSet属性    public DbSet Blogs { get; set; }}

我们在创建一个方法,返回类型是DbContextOptions类型:

public static DbContextOptions CreateDbContextOptions(string databaseName){    var serviceProvider = new ServiceCollection().        AddEntityFrameworkInMemoryDatabase()        .BuildServiceProvider();    var builder = new DbContextOptionsBuilder();    builder.UseInMemoryDatabase(databaseName)        .UseInternalServiceProvider(serviceProvider);    return builder.Options;}

最后编写测试代码,整体代码如下:

using EFCore.Model;using Microsoft.EntityFrameworkCore;using Microsoft.Extensions.DependencyInjection;using System;using Xunit;namespace EFCoreTest{/// /// 数据上下文,继承自DbContext/// public class EFCoreDbContext:DbContext{    ///     /// 通过DbContextOptions选项给父类构造传参    ///     ///     public EFCoreDbContext(DbContextOptions options):base(options)    {    }    // DbSet属性    public DbSet Blogs { get; set; }}    public class UnitTest1    {        public static DbContextOptions CreateDbContextOptions(string databaseName)        {            var serviceProvider = new ServiceCollection().                AddEntityFrameworkInMemoryDatabase()                .BuildServiceProvider();            var builder = new DbContextOptionsBuilder();            builder.UseInMemoryDatabase(databaseName)                .UseInternalServiceProvider(serviceProvider);            return builder.Options;        }        ///         /// 测试方法,这里使用异步        ///         [Fact]        public async void Test1()        {           var options=  CreateDbContextOptions("batabase");            var context = new EFCoreDbContext(options);            // 添加数据            context.Blogs.Add(new Blog() { Name = "ef core" });            // 保存            context.SaveChanges();            // 查询数据            var blog = await context.Blogs.FirstOrDefaultAsync(p => p.Id == 1);            // 断言            Assert.NotNull(blog);        }    }}

在测试方法上面右键,选择"Live Unit Testing",这个是实时的,我们可以在输出窗口里面看到实时的信息:

启动测试,在输出窗口查看测试结果:

可以看到测试代码前面都打勾了,表示测试通过。我们修改测试代码,改为查询id为2的数据:

因为我们只添加了一条数据,没有id为2的那条数据,所以测试报错了。

到此为止,我们就完成了一个简单的单元测试。

以上是"如何对Entity Framework Core进行单元测试"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

测试 数据 项目 单元 代码 上下 上下文 方法 内存 内容 实时 属性 数据库 篇文章 类型 查询 输出 选择 到此为止 两个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云南咖啡 南京欣网互联网络科技有限公司 山东特亿宝互联网科技有限公司 深圳恒合互联网络科技有限公司 腾讯阿里互联网科技 紫鲸互联网科技 互联网养老 桔豆科技 互联网汽车科技小镇 中盈科技互联网信息有限公司 阿里巴巴算科技企业还是互联网 互联网校园科技培训 互联网科技商业 新兴科技互联网创新大赛颁奖典礼 哈尔滨屹滨互联网科技有限公司 华夏恒生科技与互联网科技 互联网科技大赛获奖感言 产业互联网科技服务公司 本届互联网大会上的黑科技 互联网科技自媒体灵感 科技发展第三阶段互联网时代 广州百单互联网科技有限公司 互联网的科技 互联网与未来科技 奇士达互联网科技 江苏南京365互联网科技 成都铂石互联网科技做什么的 消费医药和互联网科技 互联网营销推广黑科技 萌小萌互联网科技河南有限公司 科技美学互联网 艺术
0