SuperAPI AI 工具集

web3-testing

测试与质量

查看项目

更新于 10-15 15:08

技能介绍

用途

本技能用于系统化地掌握智能合约测试策略,覆盖使用 Hardhat、Foundry 以及进阶测试模式编写与运行智能合约测试。适用于编写单元测试、搭建集成测试套件、进行 gas 优化测试、对边界情况做模糊(fuzz)测试、分叉主网进行贴近真实环境的测试、自动化生成覆盖率报告以及在 Etherscan 上验证合约。

不适用场景:与 Web3 智能合约测试无关的任务,或需要其他领域/工具的任务。

支持材料可用性说明

本目录副本包含下列内联指引,但不包含以下支持路径。这些是外部前置条件,并非随附文件:

  • <support-root>/references/hardhat-setup.md
  • <support-root>/references/foundry-setup.md
  • <support-root>/references/test-patterns.md
  • <support-root>/references/mainnet-forking.md
  • <support-root>/references/contract-verification.md
  • <support-root>/assets/hardhat-config.js
  • <support-root>/assets/test-suite.js
  • <support-root>/assets/foundry.toml
  • <support-root>/scripts/test-contract.sh

在使用依赖这些路径的步骤前,应先索取原始支持材料或已有的安装;本目录未给出这些文件的已验证下载来源。请相对该安装目录解析每个路径,检查其内容,并核实适用的许可与执行前提。在所需文件不存在时,不要运行命令,也不要声称已执行被引用的流程。不要凭空伪造缺失脚本,也不要把同名但无关的文件视为等价物。此处已完整记录的独立步骤可在用户授权范围内执行;任何依赖缺失文件的步骤应报告为不可用。

主要能力与测试方式

Hardhat 测试配置

提供 hardhat.config.js 示例,包含 solidity 版本与优化器设置、hardhat 网络的分叉配置(MAINNET_RPC_URL、blockNumber)、goerli 网络配置、gasReporter(启用、货币 USD、coinmarketcap 密钥)、etherscan apiKey。

单元测试模式

以 Chai 与 Hardhat 网络辅助工具为例,展示:使用 loadFixture 构建部署夹具;断言合约 owner 与总供应量分配;测试账户间转账(changeTokenBalances);测试余额不足时回滚(revertedWith);验证 Transfer 事件(emit/withArgs);基于时间的操作(time.increase);gas 优化断言(gasUsed 小于阈值)。

Foundry(Forge)测试

展示 Solidity 测试合约写法:setUp、assertEq、vm.prank、vm.expectRevert、testFuzzTransfer 模糊测试、vm.deal 与 vm.prank 作弊码、vm.createSelectFork 主网分叉并读取主网合约(如 DAI 的 symbol)。

进阶测试模式

  • 快照与回滚:通过 evm_snapshot 与 evm_revert 在用例间重置状态。
  • 主网分叉:通过 hardhat_reset 指定分叉与区块号,并用 ethers.getContractAt 连接主网合约(Uniswap V2 Router、DAI)。
  • 冒充账户:通过 hardhat_impersonateAccount 获取鲸鱼账户签名者并使用其代币。
  • Gas 优化测试:对比优化与未优化实现的 gasUsed 并断言前者更低。

覆盖率与验证

  • 生成覆盖率报告:npx hardhat coverage,并展示按文件统计的语句/分支/函数/行覆盖率表格。
  • 合约验证:通过 hre.run("verify:verify", ...) 或 CLI(npx hardhat verify --network mainnet ...)在 Etherscan 验证。

CI/CD 集成

提供 GitHub Actions 工作流示例,在 push 与 pull_request 时执行 npm install、npx hardhat compile、npx hardhat test、npx hardhat coverage,并上传覆盖率到 Codecov。

资源清单(引用路径)

  • 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:自动化测试脚本

以上文件未随本目录提供,获取方式暂未提供。

最佳实践

测试覆盖率目标 >90%;测试边界条件;验证函数不触及区块 gas 上限;测试重入漏洞;测试未授权访问尝试;验证事件发出;使用夹具避免重复代码;使用主网分叉与真实合约测试;使用基于属性的模糊测试;在每次提交上通过 CI/CD 自动化测试。

适用场景

编写智能合约单元测试、搭建集成测试套件、gas 优化测试、边界情况模糊测试、分叉主网做真实环境测试、自动化覆盖率报告、Etherscan 合约验证。

限制

  • 仅在任务明确匹配上述范围时使用本技能。
  • 不要把输出当作针对特定环境验证、测试或专家评审的替代。
  • 若缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。
  • 本资料未说明收费、价格、平台支持范围与实际效果,相关事实暂未提供。