关于 creating-oracle-to-postgres-migration-integration-tests
为 .NET Oracle 到 PostgreSQL 迁移中的单个项目生成集成测试。测试以 Oracle 行为为基准,并采用可在后续迁移阶段保留的断言方式。
主要功能
- 01检查测试项目约定
- 02识别数据库访问方法
- 03创建隔离的种子数据
- 04编写可移植断言
- 05检查测试确定性
适用场景
- 01为仓储和 DAO 添加集成测试
- 02覆盖存储过程调用与查询构建器
- 03在迁移前记录 Oracle 行为
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ github/ awesome-copilot --skill creating-oracle-to-postgres-migration-integration-tests安装后在 Claude Code 中输入/creating-oracle-to-postgres-migration-integration-tests确认已加载。
详细介绍
为 Oracle 到 PostgreSQL 迁移创建集成测试
为单个目标项目中的数据访问构件生成集成测试用例。测试以 Oracle 为目标,并将其行为捕获为权威基线。测试编写为逻辑上可移植 —— 以便它们无需重写即可在 Phase 6 迁移后继续存活 —— 但在此阶段它们不会针对 PostgreSQL 运行。
先决条件
- 测试项目必须已存在并可编译(单独搭建脚手架)。
- 在编写测试之前,先阅读现有的基础测试类和种子数据管理器约定。
工作流
Test Creation:
- [ ] Step 1: Discover the test project conventions
- [ ] Step 2: Identify testable data access artifacts
- [ ] Step 3: Create seed data
- [ ] Step 4: Write test cases
- [ ] Step 5: Review determinism
Step 1:了解测试项目约定
阅读基础测试类、种子数据管理器和项目文件,以了解继承模式、事务管理和种子文件约定。
Step 2:识别可测试的数据访问构件
仅限定在目标项目范围内。列出与数据库交互的数据访问方法 —— 仓库、DAO、存储过程调用者、查询构建器。
Step 3:创建种子数据
- 遵循现有项目中的种子文件位置和命名约定。
- 避免使用
TRUNCATE TABLE—— 保持现有数据库数据完好无损。 - 假设现有业务行和查找行已经存在;仅添加场景所需的最小、防冲突的种子记录。
- 不要提交种子数据;测试在回滚的事务中运行。
- 确保种子数据不与其他测试冲突。
- 在断言依赖种子数据之前,先加载并验证种子数据。
- 创建或复用一个测试
LookupConstants类,用于种子构建器和断言中使用的稳定查找 ID/代码。
Step 4:编写测试用例
- 继承基础测试类以获得自动的事务创建/回滚。
- 确保范围内每个涉及数据库的方法至少有一个集成测试(对于高风险行为分支可有多个测试)。
- 断言逻辑输出(行、列、计数、错误类型),而非平台特定的消息。
- 断言具体的预期值 —— 当种子数据中有具体值时,绝不要仅断言某个值非空或非空字符串。
- 避免测试不存在的代码路径或断言不可能发生的行为。
- 避免针对同一方法的测试之间出现冗余断言。
- 对于文本参数,在适用时包含空字符串和
NULL/缺失输入的覆盖。 - 对于 datetime 行为,包含验证写入值与读回值匹配的断言 —— 使用 Oracle 列的精度(例如,对于没有小数秒的日期/时间列,仅精确到秒),而不是假设任何特定的数据库类型语法。
Step 5:审查确定性
针对非空值重新检查每个断言。确认每个断言相对于种子数据都是确定性的。修复任何依赖测试控制之外的数据库状态的断言。
关键约束
- 仅限 Phase 3 —— 这些测试以 Oracle 为目标。不要在 Phase 6 期间或针对以 PostgreSQL 为目标的项目调用此技能。
- Oracle 是黄金来源 —— 测试捕获 Oracle 的预期行为。
- 断言可移植性 —— 避免在断言中使用平台特定的错误消息或语法,以便在 Phase 6 将测试项目迁移到 PostgreSQL 时,断言无需更改。
- 仅针对 Oracle 播种 —— 测试项目将在 Phase 6 迁移到 PostgreSQL;在此之前,种子数据和基础设施保持以 Oracle 为目标。
- 限定于一个项目 —— 不要为目标项目之外的构件创建测试。
- 保留现有数据 —— 绝不重写或清除预先存在的业务行或查找行。
评论
支持 Markdown