用途:为智能合约编写基于 Foundry 的测试,重点覆盖会真正造成损失的边界情况、失败模式和经济不变量,而非测试 name() 等显然成立的 getter。
主要能力:单元测试(setUp、makeAddr、assertEq/assertGt/assertApproxEqAbs 等断言、vm.expectRevert 与 vm.expectEmit);模糊测试(带参数的 testFuzz_ 函数自动用随机值运行,用 bound 收窄输入范围,vm.assume 谨慎使用);分叉测试(vm.createSelectFork 在主网分叉上针对 Uniswap、Aave、Chainlink 等真实部署合约测试,常量地址如 UNISWAP_ROUTER 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);不变量测试(targetContract 指定 handler,invariant_ 断言在成千上万随机调用序列后仍成立)。
使用方式:forge test 默认 256 次运行;forge test --fuzz-runs 10000 提高深度;forge test --fork-url <RPC> --fork-block-number 19000000 固定区块分叉;可用 foundry.toml 的 [fuzz]、[invariant]、[rpc_endpoints] 配置。
适用场景:调用外部协议的合约应做分叉测试;含数学运算的合约应做模糊测试;金库、AMM、借贷等多函数交互的有状态协议应做不变量测试。
限制:不要测试 OpenZeppelin 内部实现、Solidity 语言特性或每个 getter,应聚焦自定义业务逻辑、数学运算、外部集成点、访问控制边界与经济边界情况。资料未提供收费、平台与效果信息。