数据库集成测试与隔离
TioBootTest 不提供数据库隔离。优先使用专用测试库;采用 PostgreSQL 独立 schema 时,应为每次测试生成固定前缀加随机十六进制字符的名称,并限定所有测试连接的 search_path。
测试流程
- 显式启用集成测试,读取测试连接配置;未启用时报告跳过。
- 创建本次专属 schema,连接池内每个连接都使用它。
- 测试夹具在该 schema 执行建表脚本和测试数据。
- 执行查询、权限、事务和并发测试。
- 关闭测试连接池,只删除本次创建并记录的 schema。
schema 名不能直接来自任意输入。SQL 标识符不能用普通值参数代替,应限制生成规则并正确引用。若脚本写死 public.table,search_path 无法隔离,必须先检查脚本;不要按宽泛前缀批量删除 schema。
这些 SQL 属于测试夹具,不应加入生产启动。业务建表与升级仍由用户手动执行。
有价值的断言
| 场景 | 应验证 |
|---|---|
| 事务回滚 | 后半段失败时,余额、记录和流水均恢复 |
| 幂等重试 | 相同请求只履约一次,参数不一致被拒绝 |
| 并发扣减 | 成功次数、剩余额度和流水一致 |
| 用户与租户隔离 | 无法读取或修改其他用户非公开记录 |
| 逻辑删除 | 列表排除已删除记录,恢复仍检查权限 |
| 数据精度 | BIGINT 经过 HTTP JSON 后保持原值 |
并发测试使用多个独立连接和同步起跑条件,顺序调用不能证明并发安全。仅回滚测试方法外层事务也无法撤销另一连接或后台任务已经提交的写入。
执行与报告
是否运行集成测试由业务项目的 Surefire/Failsafe、类名和开关决定,不是框架统一规则。分别报告通过、失败与跳过,注明隔离方式,避免输出密码和密钥。网络层验证见 HTTP 集成测试。
