关于 testing-ops
testing-ops 是适用于多种语言的软件测试技能,介绍测试类型、隔离策略、测试替身与质量标准,并附带覆盖率检查脚本。
主要功能
- 01测试金字塔与测试类型
- 02Arrange-Act-Assert 模式
- 03选择测试替身
- 04隔离数据库与外部服务
- 05测试质量检查清单
- 06覆盖率阈值检查脚本
适用场景
- 01为代码变更选择测试类型
- 02隔离依赖数据库的测试
- 03测试外部服务边界
- 04在工作流中检查测试覆盖率
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ 0xdarkmatter/ claude-mods --skill testing-ops安装后在 Claude Code 中输入/testing-ops确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/.gitkeepreferences/ci-testing.mdmocking-strategies.mdtdd-workflow.mdtest-data-patterns.mdscripts/coverage-check.shtests/run.sh详细介绍
测试模式
适用于各种语言的通用测试策略和模式。
测试金字塔
/\
/ \ E2E Tests (few, slow, expensive)
/ \ - Full system tests
/------\ - Real browser/API calls
/ \
/ Integ \ Integration Tests (some)
/ Tests \ - Service boundaries
/--------------\ - Database, APIs
/ \
/ Unit Tests \ Unit Tests (many, fast, cheap)
------------------ - Single function/class
- Mocked dependencies
测试类型
单元测试
Scope: Single function/method/class
Speed: Milliseconds
Dependencies: All mocked
When: Every code change
Coverage: 80%+ of codebase
集成测试
Scope: Multiple components together
Speed: Seconds
Dependencies: Real databases, mocked external APIs
When: PR/merge, critical paths
Coverage: Key integration points
端到端测试
Scope: Full user journey
Speed: Minutes
Dependencies: Real system (or staging)
When: Pre-deploy, nightly
Coverage: Critical user flows only
测试命名约定
test_<unit>_<scenario>_<expected>
Examples:
- test_calculate_total_with_discount_returns_reduced_price
- test_user_login_with_invalid_password_returns_401
- test_order_submit_when_out_of_stock_raises_error
准备-执行-断言(AAA)
def test_calculate_discount():
# Arrange - Set up test data and dependencies
cart = Cart()
cart.add_item(Item(price=100))
discount = Discount(percent=10)
# Act - Execute the code under test
total = cart.calculate_total(discount)
# Assert - Verify the results
assert total == 90
测试替身
| 类型 | 用途 | 示例 |
|---|---|---|
| 桩 | 返回预设数据 | stub.get_user.returns(fake_user) |
| 模拟对象 | 验证交互 | mock.send_email.assert_called_once() |
| 间谍对象 | 记录调用,使用真实实现 | spy.on(service, 'save') |
| 伪对象 | 可用的简化实现 | 用 FakeDatabase() 代替真实数据库 |
| 虚设对象 | 占位,从不使用 | 用于必需参数的 null 对象 |
测试隔离策略
数据库隔离
Option 1: Transaction rollback (fast)
- Start transaction before test
- Rollback after test
Option 2: Truncate tables (medium)
- Clear all data between tests
Option 3: Separate database (slow)
- Each test gets fresh database
外部服务隔离
Option 1: Mock at boundary
- Replace HTTP client with mock
Option 2: Fake server
- WireMock, MSW, VCR cassettes
Option 3: Contract testing
- Pact, consumer-driven contracts
测试内容
必须测试
- 业务逻辑和计算
- 输入验证和错误处理
- 对安全敏感的代码(身份验证、权限)
- 边缘情况和边界条件
应当测试
- 集成点(数据库、API)
- 状态转换
- 配置处理
避免测试
- 框架内部实现
- 第三方库行为
- 简单的 getter/setter
- 私有实现细节
测试质量检查清单
- 测试彼此独立(不依赖执行顺序)
- 测试结果确定(没有不稳定的测试)
- 测试运行快速(单元测试 < 100ms,集成测试 < 5s)
- 测试名称清晰,能描述行为
- 测试涵盖正常路径和错误情况
- 测试不会重复生产逻辑
- 模拟对象尽量精简(仅用于外部边界)
更多资源
./references/tdd-workflow.md- 测试驱动开发周期./references/mocking-strategies.md- 何时以及如何使用模拟./references/test-data-patterns.md- 固定数据、工厂和构建器./references/ci-testing.md- 在 CI/CD 流水线中测试
脚本
./scripts/coverage-check.sh- 运行覆盖率检查,低于阈值时失败
评论
支持 Markdown