如何在資料存取層進行單元測試

安裝 Sqlite

安裝 Nuget 的 Sqlite 套件

1
Install-Package Microsoft.EntityFrameworkCore.Sqlite

建立 DbContext

建立 EntityFramework 的 DbContext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class TestDbContext : DbContext
{
public DbSet<Table>? Table { get; set; }

public TestDbContext()
{
}

public TestDbContext(DbContextOptions options) : base(options)
{
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Table>(entity => {
entity.HasKey(x => x.Id);
});
}
}

使用 In-Memory 模式操作資料庫

使用 Sqlite 的 In-Memory 模式載入 DbContext

1
2
3
4
5
6
7
SqliteConnection connection = new SqliteConnection("Data Source=:memory:");

connection.Open();

DbContextOptions options = new DbContextOptionsBuilder()
.UseSqlite(connection)
.Options;

然後使用 DbContext 的設定建立資料庫

1
2
using TestDbContext context = new TestDbContext(options);
context.Database.EnsureCreated();

最後可開始使用 EntityFramework 開始操作資料庫

1
2
using TestDbContext context = new TestDbContext(options);
List<Table> table = context.Table.ToList();

自定義 Database Function

如果有使用 Sqlite 未定義的 Database Function , 可在程式中使用 CreateFunction 定義

1
2
3
4
5
SqliteConnection connection = new SqliteConnection("Data Source=:memory:");

connection.CreateFunction("current_date", (x) => DateTime.Now);

connection.Open();

📜 參考資料

  1. Microsoft文件
  2. SQLite Examples