您现在的位置是:网站首页> 编程资料编程资料
对Entity Framework Core进行单元测试_实用技巧_
2023-05-24
379人已围观
简介 对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 DbSetBlogs { get; set; } }
我们在创建一个方法,返回类型是DbContextOptions类型:
public static DbContextOptionsCreateDbContextOptions(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进行单元测试的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- Entity Framework Core相关包的概念介绍与安装_实用技巧_
- ASP.NET Core中间件用法与官方常用中间件介绍_基础应用_
- ASP.NET Core中使用Swagger_实用技巧_
- .Net解决引用程序集没有强名称报错_实用技巧_
- ASP.NET Core依赖注入详解_实用技巧_
- ASP.NET Core 6.0对热重载的支持实例详解_实用技巧_
- ASP.NET Core中使用Redis实现缓存_实用技巧_
- Entity Framework Core对Web项目生成数据库表_实用技巧_
- Entity Framework Core使用控制台程序生成数据库表_实用技巧_
- ASP.NET MVC+EF实现异步增删改查_实用技巧_
