进阶 getfoundry.sh 2026-10-10 09:32:10 · 6 阅读

第2章 分支树技术(BTT)在Solidity测试中的应用

分支树技术

分支树技术(BTT)是一种通过决策树建模所有条件和结果,从而组织 Solidity 测试的方法。分支代表条件,叶子节点代表具体的测试用例。

BTT 非常适合 Foundry 测试,因为每个叶子节点都可以转化为一个 test 或 test_RevertWhen 函数,而每个条件则对应 setup 代码或修饰器。例如,一棵 TransferTest 树可以描述转账过程中的暂停和余额状态:

TransferTest ├── When paused │ └── It should revert. └── When not paused ├── When balance is insufficient │ └── It should revert. └── When balance is sufficient └── It should transfer the tokens.

这棵树可以在 Foundry 测试文件中手动实现:

contract TransferTest is Test { modifier whenNotPaused() { _; } modifier whenBalanceIsSufficient() { _; } function test_ShouldTransferTheTokens() public whenNotPaused whenBalanceIsSufficient { // arrange, act, assert } function test_RevertWhen_Paused() public { // arrange, act, assert } }

Bulloak

Bulloak 是一个命令行工具,能够自动化 Foundry 中的 BTT 工作流。它接收 .tree 规范文件作为输入,支持以下功能:

* 根据树生成 Solidity 测试文件骨架 * 检查现有测试文件是否与树规范匹配

安装: cargo install bulloak

创建规范文件(TransferTest.tree): TransferTest └── When not paused ├── When balance is insufficient │ └── It should revert. └── When balance is sufficient └── It should transfer the tokens.

生成测试文件骨架: bulloak scaffold TransferTest.tree

检查现有测试文件是否符合规范: bulloak check TransferTest.tree

Bulloak 生成标准的 Solidity 测试骨架,你只需填入 setup 和断言逻辑,然后通过 forge test 运行。

更多信息请参考 Bulloak GitHub 以及 2023 Solidity Summit 上的 BTT 演示。本文是否有帮助?在 GitHub 上提出修改建议

评论 (0)