網站首頁 編程語言 正文
一、引言
我們先來講解如何對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的那條數據,所以測試報錯了。
到此為止,我們就完成了一個簡單的單元測試。
原文鏈接:https://www.cnblogs.com/dotnet261010/p/12350558.html
相關推薦
- 2022-10-28 Pandas實現兩個表的連接功能的方法詳解_python
- 2023-07-24 el-table文字根據首字母排序
- 2022-07-10 table列表中輸入框input與文本span切換的實現
- 2022-03-26 正則表達式詳析+常用示例_正則表達式
- 2023-10-28 C語言中getchar函數詳解看這一篇就夠了(函數功能、使用、返回值)_C 語言
- 2023-05-23 numpy數組之讀寫文件的實現_python
- 2023-06-03 C/C++中#define的妙用分享_C 語言
- 2022-07-28 numpy?array找出符合條件的數并賦值的示例代碼_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支