mcpField
S
solidity-testing

solidity-testing

github.com/0xlayerghost测试与质量4135 次安装2 周前更新
代码仓库

关于 solidity-testing

solidity-testing 是一套面向 Foundry Solidity 项目的测试规范,指导开发者组织测试、覆盖不同场景、编写模糊测试,并运行指定测试或完整测试集。

主要功能

  1. 01测试文件组织与命名规范
  2. 02核心函数场景覆盖要求
  3. 03Foundry 测试作弊码参考
  4. 04针对数学与资金流的模糊测试
  5. 05运行指定测试的命令

适用场景

  1. 01为各合约组织测试文件
  2. 02检查权限、边界与失败路径
  3. 03为资金流函数添加模糊测试
  4. 04运行指定测试或完整测试集

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/0xlayerghost/solidity-agent-kit --skill solidity-testing

安装后在 Claude Code 中输入/solidity-testing确认已加载。

详细介绍

测试规范

语言规则

  • 始终使用用户所用的语言回复。 如果用户用中文提问,就用中文回复;如果用户用英语提问,就用英语回复。

测试组织

  • 每个源合约对应一个测试合约:MyToken.sol → MyToken.t.sol
  • 文件位置:所有测试都放在 test/ 目录中
  • 命名:通过的测试使用 test_<feature>_<scenario>,预期回滚的测试使用 testFail_<feature>_<scenario>
    • 示例:test_transfer_revertsWhenInsufficientBalance
    • 示例:test_stake_updatesBalanceCorrectly
  • 独立性:每个测试都必须独立运行——使用 setUp() 设置共享状态,测试之间不得相互依赖
  • 筛选:支持使用 --match-test 和 --match-contract 进行定向运行

覆盖率要求

每个核心函数都必须有测试覆盖以下场景:

场景验证内容
正常路径标准输入 → 预期输出、正确的状态变更
权限检查未授权调用者 → 使用 vm.expectRevert 验证正确的错误
边界条件零值、最大值(type(uint256).max)、差一错误
失败场景每条 require / revert / 自定义错误路径
状态变更存储更新、余额变更、事件发出(vm.expectEmit)
边缘情况空数组、重复调用、自转账

Foundry Cheatcodes 快速参考

Cheatcode用途
vm.prank(addr)下一次调用来自 addr
vm.startPrank(addr)直到调用 vm.stopPrank() 前,所有调用都来自 addr
vm.warp(timestamp)设置 block.timestamp
vm.roll(blockNum)设置 block.number
vm.deal(addr, amount)设置 ETH 余额
vm.expectRevert(error)下一次调用必须以指定错误回滚
vm.expectEmit(true,true,false,true)验证事件发出(主题检查)
vm.record() / vm.accesses()跟踪存储读写
makeAddr("name")创建带标签的地址,以便生成易读的跟踪记录

模糊测试规则

  • 所有涉及大量数学运算和资金流转的函数都必须进行模糊测试
  • 模式:function testFuzz_<name>(uint256 amount) public
  • 使用 vm.assume() 限制输入:vm.assume(amount > 0 && amount < MAX_SUPPLY);
  • 默认运行次数:256;关键函数增加至 10,000+:forge test --fuzz-runs 10000

常用命令

# Run all tests
forge test

# Run specific test function
forge test --match-test test_transfer

# Run specific test contract
forge test --match-contract MyTokenTest

# Verbose output with full trace
forge test -vvvv

# Gas report
forge test --gas-report

# Fuzz with more runs
forge test --fuzz-runs 10000

# Test coverage
forge coverage

# Coverage with report
forge coverage --report lcov

评论

支持 Markdown