這篇文章主要介紹如何對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進行單元測試”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。