用途:为基于 Foundry 的 Solidity 项目提供测试与部署脚本的规则、目录约定和示例模式,覆盖集成测试、模糊测试、分叉测试、不变量测试以及 Solidity 脚本。
主要能力与测试类型:集成(具体)测试放 tests/integration/concrete/,命名 .t.sol,采用 BTT 路径,命名如 test_RevertWhen_{Condition}、test_RevertGiven_{State}、test_When_{Condition};模糊测试放 tests/integration/fuzz/,命名 testFuzz_{FunctionName}_{Scenario};分叉测试放 tests/fork/,用 vm.createSelectFork 创建分叉;不变量测试放 tests/invariant/,含 handlers/、stores/ 与 Invariant.t.sol;脚本放 scripts/solidity/,命名 *.s.sol。
关键规则:断言前用 vm.expectEmit 再调用;断言在后并带描述;mock 放 tests/mocks/,按场景一个 mock,命名 *Good、*Reverting、*InvalidSelector、*Reentrant;模糊测试先 bound 再 assume,按依赖顺序绑定;不变量测试只 target handler、排除协议合约、用 store 记录总量;脚本继承 BaseScript 并使用 ETH_FROM、MNEMONIC 环境变量,先模拟后广播。
常用命令(保持原样):forge test --match-path "tests/integration/concrete/";forge test --match-path "tests/fork/";forge test --match-contract Invariant_Test;forge test --match-test test_WhenCallerRecipient -vvvv;forge test --match-test testFuzz_ --fuzz-runs 1000;forge coverage --report lcov;forge script scripts/Deploy.s.sol --sig "run(...)" ARGS --rpc-url $RPC;forge script scripts/Deploy.s.sol --sig "run(...)" ARGS --rpc-url $RPC --broadcast --verify;forge inspect MyContract storage-layout。
调试与适用场景:-v 到 -vvvvv 逐级显示日志与追踪,可用 console2 日志、vm.label 标注地址、vm.snapshot/vm.revertTo 隔离状态。适合在 Sablier 及类似 Solidity 仓库中编写和维护测试与部署脚本。
限制:资料未提供具体收费、价格和平台支持信息;实际模式需以所在代码库现有示例为准,不变量与形式化验证等细节需参考对应引用文件。