摘要:本机安装 Foundry 1.8.5:forge init 生成 Counter 工程,forge test 与 forge test -vvvv 看调用追踪;对照 getfoundry.sh 文档。不需测试网 ETH。与 Hardhat/Remix 文区分。
Hardhat 适合「脚本 + 本地节点」;另一条常见路线是 Foundry:用 Rust 写的工具链,测试直接写在 Solidity 里,forge test 一次跑完,加 -vvvv 还能看调用追踪(trace)。本文在本机安装 Foundry 1.8.5,跑通 forge init → forge test → forge test -vvvv;不碰主网、不需要测试网 ETH。Hardhat 初始化见 Hardhat 初始化;Remix 第一课见 Solidity 与 Remix。
一、安装与官方入口
官方文档「Installation」给出常见安装方式(含 foundryup)。本场用 foundryup 装到本机:forge / cast / anvil 均为 1.8.5(Commit 51a52c59…,构建时间 2026-10-05)。版本以你机器上 forge --version 为准。

# 本场安装命令(以官网为准)
curl -L https://foundry.paradigm.xyz | bash
# 或按 getfoundry.sh Installation 当前推荐入口安装 foundryup 后:
foundryup
forge --version
二、forge init:工程骨架
官方 Getting Started 从 forge init 起手。本场执行 forge init hello_foundry --no-commit:会克隆 forge-std(本场为 tag v1.17.0),并生成 src/Counter.sol、test/Counter.t.sol、script/、foundry.toml 等。

| 路径 | 作用 |
|---|---|
| src/ | 合约源码(示例 Counter.sol) |
| test/ | Solidity 测试(*.t.sol,继承 forge-std/Test) |
| script/ | 部署/脚本(本场未展开) |
| foundry.toml | src / out / libs 等配置 |
| lib/forge-std | 标准测试库(由 init 安装) |
| out/ | 编译产物(跑 test 时生成) |
// src/Counter.sol(节选)
contract Counter {
uint256 public number;
function setNumber(uint256 newNumber) public { number = newNumber; }
function increment() public { number++; }
}
三、forge test:Solidity 里写测试
文档「Testing」说明:测试写在 test/,函数名以 test / test_ 开头,合约继承 forge-std/Test.sol;setUp() 在每个测试前执行。本场 forge test 输出:2 passed(含 test_Increment 与 fuzz testFuzz_SetNumber,默认约 256 runs)。


forge test
# 期望看到 [PASS] … Suite result: ok. 2 passed …
四、forge test -vvvv:看调用追踪
文档 Debugging / Verbosity 说明:加 -v 控制详细程度;-vvvv 会对通过的测试也打印 Traces(调用树)。本场 forge test -vvvv 可见例如 Counter::increment() 后 number() 返回 1;fuzz 样例里 setNumber(…) 再读回。

喜欢 JS/TS 脚本与 Hardhat Runtime → Hardhat;想用 Solidity 写测试、CLI 一把梭 → Foundry。两条都能本地跑,不必上测试网。
带参数的 testFuzz_* 会由 Forge 自动喂随机输入;失败时会打印可复现的具体参数。
本场只本地测试;发主网/测试网交易另文,且切勿把私钥写进仓库。
五、和站内已发文怎么衔接
- Hardhat 对照:编译/本地节点/脚本见 Hardhat 初始化,本文不重复 ethers 脚本部署。
- 合约语法:结构与 Remix VM 见 Solidity 第一课;mapping/事件见 mapping 与事件。
- 只读链上仍可用 web3.py / ethers,见 web3.py 读 ERC-20、ethers.js 读合约。
- 需要钱包看测试网时,可用欧易 Web3(创建步骤可填 CHENGXULVTU);买少量 Gas 可在 币安 或 欧易——本场本地测试完全不需要。
相关阅读
- Hardhat 初始化:编译、本地节点与脚本结构怎么跑通
- Solidity 第一课:合约结构与 Remix 本地/VM 部署
- Solidity mapping 与事件:怎么在浏览器核对
- ethers.js 读合约:ABI、address 与 call 字段
说明:配图为 2026-10-11 getfoundry.sh 官方文档与本机真实终端输出(Foundry 1.8.5)。本文不涉及主网资金,不构成投资建议。命令与版本以你安装的 Foundry / 官方文档为准。
