千家信息网

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

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍如何对Entity Framework Core进行单元测试,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、引言我们先来讲解如何对EntityFramewor
千家信息网最后更新 2025年01月19日如何对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进行单元测试"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0