<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
我們先來講解如何對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進行單元測試的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45