这篇文章主要介绍如何对Entity Framework Core进行单元测试,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
我们先来讲解如何对EntityFrameworkCore进行单元测试,这里我们使用内存数据库进行测试。使用内存数据库需要安装Microsoft.EntityFrameworkCore.InMemory这个包。
我们还是以上面文章中创建的项目为例,在解决方案中添加一个测试项目,这里选择使用xUnit作为测试项目:
创建完成后的项目结构如下图所示:
我们首先在EFCoreTest项目中安装Microsoft.EntityFrameworkCore和Microsoft.EntityFrameworkCore.InMemory这两个包,直接在NuGet里面安装即可,这里不在描述安装步骤。添加完成以后添加对实体的引用。
我们创建数据上下文,继承自DbContext:
/// <summary>
/// 数据上下文,继承自DbContext
/// </summary>
public class EFCoreDbContext:DbContext
{
/// <summary>
/// 通过DbContextOptions选项给父类构造传参
/// </summary>
/// <param name="options"></param>
public EFCoreDbContext(DbContextOptions options):base(options)
{
}
// DbSet属性
public DbSet<Blog> Blogs { get; set; }
}
我们在创建一个方法,返回类型是DbContextOptions类型:
public static DbContextOptions<EFCoreDbContext> CreateDbContextOptions(string databaseName)
{
var serviceProvider = new ServiceCollection().
AddEntityFrameworkInMemoryDatabase()
.BuildServiceProvider();
var builder = new DbContextOptionsBuilder<EFCoreDbContext>();
builder.UseInMemoryDatabase(databaseName)
.UseInternalServiceProvider(serviceProvider);
return builder.Options;
}
最后编写测试代码,整体代码如下:
using EFCore.Model;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;
using Xunit;
namespace EFCoreTest
{
/// <summary>
/// 数据上下文,继承自DbContext
/// </summary>
public class EFCoreDbContext:DbContext
{
/// <summary>
/// 通过DbContextOptions选项给父类构造传参
/// </summary>
/// <param name="options"></param>
public EFCoreDbContext(DbContextOptions options):base(options)
{
}
// DbSet属性
public DbSet<Blog> Blogs { get; set; }
}
public class UnitTest1
{
public static DbContextOptions<EFCoreDbContext> CreateDbContextOptions(string databaseName)
{
var serviceProvider = new ServiceCollection().
AddEntityFrameworkInMemoryDatabase()
.BuildServiceProvider();
var builder = new DbContextOptionsBuilder<EFCoreDbContext>();
builder.UseInMemoryDatabase(databaseName)
.UseInternalServiceProvider(serviceProvider);
return builder.Options;
}
/// <summary>
/// 测试方法,这里使用异步
/// </summary>
[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进行单元测试”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。