掌握使用Hardhat、Foundry和高级测试模式的智能合约综合测试策略。
技能概述
web3-testing 技能是一个专门用于Web3智能合约测试的技能。该技能涵盖使用Hardhat、Foundry和高级测试模式的综合测试策略,帮助开发者编写智能合约单元测试、设置集成测试套件、执行Gas优化测试、模糊测试边缘情况、分叉主网进行真实测试、自动化测试覆盖率报告以及在Etherscan上验证合约。
下载地址:agentic-awesome-skills/skills/web3-testing at main · sickn33/agentic-awesome-skills · GitHub
主要功能
- 单元测试: 编写智能合约单元测试
- 集成测试: 设置集成测试套件
- Gas优化测试: 执行Gas优化测试
- 模糊测试: 模糊测试边缘情况
- 主网分叉: 分叉主网进行真实测试
- 覆盖率报告: 自动化测试覆盖率报告
- 合约验证: 在Etherscan上验证合约
触发条件
在以下情况下应该调用此技能:
- 编写智能合约单元测试
- 设置集成测试套件
- 执行Gas优化测试
- 模糊测试边缘情况
- 分叉主网进行真实测试
- 自动化测试覆盖率报告
- 在Etherscan上验证合约
不适用场景
- 任务与Web3智能合约测试无关
- 需要此范围之外的不同域或工具
测试框架
Hardhat
JavaScript/TypeScript测试框架:
- 丰富的插件生态系统
- 内置网络分叉
- Gas报告
- 覆盖率工具
- Etherscan验证
Foundry (Forge)
Solidity测试框架:
- 快速编译和测试
- 模糊测试内置
- Cheatcodes
- 主网分叉
- Gas快照
测试模式
单元测试模式
- 部署测试
- 交易测试
- 事件测试
- 时间相关测试
- Gas优化测试
高级测试模式
- 快照和回滚
- 主网分叉
- 账户模拟
- 模糊测试
Foundry测试特性
模糊测试
自动生成随机输入测试函数:
- 使用vm.assume限制输入范围
- 发现边缘情况
- 属性测试
Cheatcodes
使用vm对象操作区块链状态:
- vm.prank — 模拟账户
- vm.deal — 给账户ETH
- vm.warp — 修改时间
- vm.expectRevert — 期望回滚
主网分叉
与真实主网合约交互:
- 测试与现有协议集成
- 使用真实流动性池
- 验证兼容性
Gas优化测试
比较不同实现的Gas使用:
- 测量函数Gas消耗
- 比较优化前后
- 识别高Gas操作
- 验证Gas节省
覆盖率报告
生成测试覆盖率报告:
# 生成覆盖率报告
npx hardhat coverage
# 输出示例:
# File | % Stmts | % Branch | % Funcs | % Lines |
# -------------------|---------|----------|---------|---------|
# contracts/Token.sol | 100 | 90 | 100 | 95 |
合约验证
在Etherscan上验证合约:
# 通过CLI验证
npx hardhat verify --network mainnet CONTRACT_ADDRESS "Constructor arg1" "arg2"
CI/CD集成
自动化测试流程:
- 每次提交运行测试
- 生成覆盖率报告
- 上传到Codecov
- 部署到测试网
最佳实践
- 测试覆盖率: 目标>90%覆盖率
- 边缘情况: 测试边界条件
- Gas限制: 验证函数不会达到区块Gas限制
- 重入攻击: 测试重入漏洞
- 访问控制: 测试未授权访问尝试
- 事件: 验证事件发射
- Fixtures: 使用fixtures避免代码重复
- 主网分叉: 使用真实合约测试
- 模糊测试: 使用基于属性的测试
- CI/CD: 每次提交自动化测试
资源文件
- references/hardhat-setup.md: Hardhat配置指南
- references/foundry-setup.md: Foundry测试框架
- references/test-patterns.md: 测试最佳实践
- references/mainnet-forking.md: 分叉测试策略
- references/contract-verification.md: Etherscan验证
- assets/hardhat-config.js: 完整Hardhat配置
- assets/test-suite.js: 综合测试示例
- assets/foundry.toml: Foundry配置
- scripts/test-contract.sh: 自动化测试脚本
注意事项
- 仅当任务明确匹配上述范围时使用此技能
- 不要将输出视为环境特定验证、测试或专家审查的替代品
- 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清