Token导航 LogoToken导航TokenDH.com
研究检索需要联网github未标认证来源可访问clear审计通过

dotnet-testing-advanced-testcontainers-databasedotnet 测试高级 testcontainer 数据库

Agent Skill

用于辅助数据库表结构、查询语句、迁移脚本和数据维护任务。它适合让 Agent 分析 schema、编写 SQL、排查查询问题、整理索引或生成迁移建议。使用时需要明确数据库类型、连接环境和目标表,区分只读分析与写入变更;涉及删除、更新、迁移和批量导入时,应优先 dry-run、备份或事务保护,避免误操作。

总安装

879

周安装

37

GitHub Stars

24

下载量

308
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

3

许可证

MIT

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:dotnet-testing-advanced-testcontainers-database(dotnet 测试高级 testcontainer 数据库)
来源仓库:https://github.com/kevintsengtw/dotnet-testing-agent-skills
仓库路径:skills/dotnet-testing-advanced-testcontainers-database
安装命令:
npx skills add https://github.com/kevintsengtw/dotnet-testing-agent-skills --skill dotnet-testing-advanced-testcontainers-database
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。不同来源提供的安装方式可能略有差异;本站展示可直接复制的安装命令,安装前请核对来源页面。

skills.shnpx skills
npx skills add https://github.com/kevintsengtw/dotnet-testing-agent-skills --skill dotnet-testing-advanced-testcontainers-database

简介

dotnet-testing-advanced-testcontainers-database 解决 EF Core InMemory 交易与并发限制问题。

  • 推荐使用 Testcontainers 启动真实数据库容器进行复杂事务与锁机制验证。
  • 覆盖 PostgreSQL、MySQL 等关系型数据库的集成测试最佳实践。
  • 需配置 Docker 环境并引入对应 Testcontainer 驱动包。
  • 测试后务必清理容器实例,防止资源泄漏影响后续任务执行。

SKILL.md

Testcontainers 資料庫整合測試指南

EF Core InMemory 的限制

在選擇測試策略前,必須了解 EF Core InMemory 資料庫的重大限制:

1. 交易行為與資料庫鎖定

  • 不支援資料庫交易 (Transactions)SaveChanges() 後資料立即儲存,無法進行 Rollback
  • 無資料庫鎖定機制:無法模擬並發 (Concurrency) 情境下的行為

2. LINQ 查詢差異

  • 查詢翻譯差異:某些 LINQ 查詢(複雜 GroupBy、JOIN、自訂函數)在 InMemory 中可執行,但轉換成 SQL 時可能失敗
  • Case Sensitivity:InMemory 預設不區分大小寫,但真實資料庫依賴校對規則 (Collation)
  • 效能模擬不足:無法模擬真實資料庫的效能瓶頸或索引問題

3. 資料庫特定功能

InMemory 模式無法測試:預存程序、Triggers、Views、外鍵約束、檢查約束、資料類型精確度、Concurrency Tokens 等。

結論:當需要驗證複雜交易邏輯、並發處理、資料庫特定行為時,應使用 Testcontainers 進行整合測試。

Testcontainers 核心概念

Testcontainers 是一個測試函式庫,提供輕量好用的 API 來啟動 Docker 容器,專門用於整合測試。

核心優勢

  1. 真實環境測試:使用真實資料庫,測試實際 SQL 語法與資料庫限制
  2. 環境一致性:確保測試環境與正式環境使用相同服務版本
  3. 清潔測試環境:每個測試有獨立乾淨的環境,容器自動清理
  4. 簡化開發環境:開發者只需 Docker,不需安裝各種服務

必要套件

<ItemGroup>
  <!-- 測試框架 -->
  <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
  <PackageReference Include="xunit" Version="2.9.3" />
  <PackageReference Include="xunit.runner.visualstudio" Version="3.1.5" />
  <PackageReference Include="AwesomeAssertions" Version="9.4.0" />

  <!-- Testcontainers 核心套件 -->
  <PackageReference Include="Testcontainers" Version="4.11.0" />

  <!-- 資料庫容器 -->
  <PackageReference Include="Testcontainers.PostgreSql" Version="4.11.0" />
  <PackageReference Include="Testcontainers.MsSql" Version="4.11.0" />

  <!-- Entity Framework Core -->
  <PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.0" />
  <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.0" />
  <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.0" />

  <!-- Dapper (可選) -->
  <PackageReference Include="Dapper" Version="2.1.72" />
  <PackageReference Include="Microsoft.Data.SqlClient" Version="7.0.0" />
</ItemGroup>
重要:使用 Microsoft.Data.SqlClient 而非舊版 System.Data.SqlClient,提供更好的效能與安全性。

環境需求

  • Windows 10 版本 2004+,啟用 WSL 2,8GB RAM(建議 16GB+),64GB 磁碟空間
  • Docker Desktop 建議設定:Memory 6GB、CPUs 4 cores、Swap 2GB、Disk 64GB

基本容器操作模式

使用 IAsyncLifetime 管理容器生命週期,在 InitializeAsync 中啟動容器並建立 DbContext,在 DisposeAsync 中釋放資源。支援 PostgreSQL(PostgreSqlBuilder)和 SQL Server(MsSqlBuilder)。

完整程式碼範例請參考 references/container-basics.md

Collection Fixture 模式:容器共享

在大型專案中,每個測試類別都建立新容器會遇到嚴重的效能瓶頸。Collection Fixture 讓所有測試類別共享同一個容器,測試執行時間可減少約 67%

包含 SQL 腳本外部化策略(將 SQL 檔案從 C# 程式碼分離)與 Wait Strategy 最佳實務。

完整 Collection Fixture 實作、SQL 腳本外部化與 Wait Strategy 範例請參考 references/collection-fixture-and-scripts.md

EF Core 進階功能測試

涵蓋 Include/ThenInclude 多層關聯查詢、AsSplitQuery 避免笛卡兒積、N+1 查詢問題驗證、AsNoTracking 唯讀查詢最佳化等完整測試範例。

完整程式碼範例請參考 references/orm-advanced-testing.md

Dapper 進階功能測試

涵蓋基本 CRUD 測試類別設置、QueryMultiple 一對多關聯處理、DynamicParameters 動態查詢建構等完整測試範例。

完整程式碼範例請參考 references/orm-advanced-testing.md

Repository Pattern 設計原則

介面分離原則 (ISP) 的應用

  • IProductRepository:基礎 CRUD 操作介面(GetAll、GetById、Add、Update、Delete)
  • IProductByEFCoreRepository:EF Core 特有進階功能(SplitQuery、BatchUpdate、NoTracking)
  • IProductByDapperRepository:Dapper 特有進階功能(多表查詢、動態參數、預存程序)

設計優勢

  1. 單一職責原則 (SRP):每個介面專注於特定職責
  2. 介面隔離原則 (ISP):使用者只需依賴所需的介面
  3. 依賴反轉原則 (DIP):高層模組依賴抽象而非具體實作
  4. 測試隔離性:可針對特定功能進行精準測試

常見問題處理

Docker 容器啟動失敗

# 檢查連接埠是否被佔用
netstat -an | findstr :5432

# 清理未使用的映像檔
docker system prune -a

ContainerNotRunningException(4.8.0+ 新增)

Testcontainers 4.8.0 起,預設等待策略改為等待容器進入 Running 狀態。若容器未能正常啟動,會拋出此例外。常見原因:映像檔名稱錯誤、Docker 資源不足、連接埠衝突。

記憶體不足問題

  • 調整 Docker Desktop 記憶體配置
  • 限制同時執行的容器數量
  • 使用 Collection Fixture 共享容器

測試資料隔離

Dispose 中按照外鍵約束順序清理資料(OrderItems → Orders → Products → Categories)。

輸出格式

  • 產生使用 Testcontainers 的 xUnit 整合測試類別(.cs 檔案)
  • 包含 IAsyncLifetime 容器生命週期管理程式碼
  • 包含 Collection Fixture 共享容器設定
  • 產生外部化 SQL 腳本檔案(.sql)與對應的.csproj 設定
  • 包含 Repository Pattern 介面與實作範例

參考資源

原始文章

本技能內容提煉自「老派軟體工程師的測試修練 - 30 天挑戰」系列文章:

  • Day 20 - Testcontainers 初探:使用 Docker 架設測試環境

- 鐵人賽文章:https://ithelp.ithome.com.tw/articles/10376401 - 範例程式碼:https://github.com/kevintsengtw/30Days_in_Testing_Samples/tree/main/day20

  • Day 21 - Testcontainers 整合測試:MSSQL + EF Core 以及 Dapper 基礎應用

- 鐵人賽文章:https://ithelp.ithome.com.tw/articles/10376524 - 範例程式碼:https://github.com/kevintsengtw/30Days_in_Testing_Samples/tree/main/day21

官方文件

相關技能

  • dotnet-testing-advanced-testcontainers-nosql - NoSQL 容器測試(MongoDB、Redis)
  • dotnet-testing-advanced-webapi-integration-testing - 完整 WebAPI 整合測試
  • dotnet-testing-advanced-aspnet-integration-testing - ASP.NET Core 基礎整合測試
  • dotnet-testing-advanced-xunit-upgrade-guide - xUnit v3 升級指南(含 Testcontainers.XunitV3 整合說明)
xUnit v3 使用者注意:搭配 xUnit v3 時,可使用 Testcontainers.XunitV3(4.9.0)套件自動管理容器生命週期,取代手動實作 IAsyncLifetime

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

04

需要参考平台分布和安装热度时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Gemini CLI

27.41%
按下载量换算84

Claude Code

22.85%
按下载量换算70

Antigravity

17.82%
按下载量换算55

OpenCode

10.76%
按下载量换算33

windsurf

7.59%
按下载量换算23

github-copilot

3.47%
按下载量换算11

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。

来源信息

继续浏览同类 Skills