Test Scripting

我们首先需要从 forge-std 导入测试所必须的库:

1
import {Test} from "forge-std/Test.sol";

接着我们需要定义 Test Class:假设我需要调试合约 A 的一些函数,那么,我们首先定义一个类去继承 forge-stdTest class.

1
2
3
4
5
6
7
8
contract ATest is Test {
// 自定义需要的数据

function setUp() public {}

function test_1() public {}
function test_2() public {}
}

forge 里,每一个单元测试的函数名称都以 test 作为开头(common practice 是在 test_xxx 其中 xxx 为说明性文字,中间用下划线隔开).

forge 的单元测试的流程是这样的:对于每一个单元测试,在创建完合约后,运行 setUp() 进行初始化,然后运行一个单元测试 test_1(),随后这个合约销毁。也就是说,unit test 之间是相互独立的,setUp() 是每个测试开始前都会执行的。

那么如果我想在 unit test 之间共享一些数据,而不通过 setUp() 呢?我们可以写一个父合约,然后让 ATest 去继承它即可.

Test Execution

可以直接运行所有测试:

$

也可以只运行一个文件内的测试,使用 --match-path 参数指定测试文件

$