摘要:本机安装 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 为准。

Foundry forge 入门:init、test 与 trace 怎么跑通-程序旅途
图1:getfoundry.sh「Installation」:foundryup 等安装说明;左侧目录含 Introduction / Projects / Forge;界面英文,2026-10-11 实拍
# 本场安装命令(以官网为准)
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 等。

Foundry forge 入门:init、test 与 trace 怎么跑通-程序旅途
图2:本机:forge init hello_foundry --no-commit → Installed forge-std v1.17.0;find 可见 src/Counter.sol、test/Counter.t.sol、script/、foundry.toml;toml 中 src/out/libs;2026-10-11
路径 作用
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)。

Foundry forge 入门:init、test 与 trace 怎么跑通-程序旅途
图3:getfoundry.sh/forge/testing:Forge runs tests written in Solidity;页内示例终端 Ran 2 tests … [PASS];Writing tests / Traces / Verbosity;界面英文,2026-10-11 实拍
Foundry forge 入门:init、test 与 trace 怎么跑通-程序旅途
图4:本机 hello_foundry:$ forge test → No files changed, compilation skipped;[PASS] testFuzz_SetNumber / test_Increment;Suite result: ok. 2 passed;2026-10-11
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(…) 再读回。

Foundry forge 入门:init、test 与 trace 怎么跑通-程序旅途
图5:本机:$ forge test -vvvv → Traces:CounterTest::test_Increment → Counter::increment → Counter::number [Return] 1;fuzz 样例同理;2 passed;2026-10-11
和 Hardhat 怎么选
喜欢 JS/TS 脚本与 Hardhat Runtime → Hardhat;想用 Solidity 写测试、CLI 一把梭 → Foundry。两条都能本地跑,不必上测试网。
fuzz 是什么
带参数的 testFuzz_* 会由 Forge 自动喂随机输入;失败时会打印可复现的具体参数。
安全底线
本场只本地测试;发主网/测试网交易另文,且切勿把私钥写进仓库。

五、和站内已发文怎么衔接

  1. Hardhat 对照:编译/本地节点/脚本见 Hardhat 初始化,本文不重复 ethers 脚本部署。
  2. 合约语法:结构与 Remix VM 见 Solidity 第一课;mapping/事件见 mapping 与事件。
  3. 只读链上仍可用 web3.py / ethers,见 web3.py 读 ERC-20、ethers.js 读合约。
  4. 需要钱包看测试网时,可用欧易 Web3(创建步骤可填 CHENGXULVTU);买少量 Gas 可在 币安 或 欧易——本场本地测试完全不需要。

相关阅读

说明:配图为 2026-10-11 getfoundry.sh 官方文档与本机真实终端输出(Foundry 1.8.5)。本文不涉及主网资金,不构成投资建议。命令与版本以你安装的 Foundry / 官方文档为准。