Test Scripting
我们首先需要从 forge-std 导入测试所必须的库:
1 | import {Test} from "forge-std/Test.sol"; |
接着我们需要定义 Test Class:假设我需要调试合约 A 的一些函数,那么,我们首先定义一个类去继承 forge-std 的 Test class.
1 | contract ATest is Test { |
在 forge 里,每一个单元测试的函数名称都以 test 作为开头(common practice 是在 test_xxx 其中 xxx 为说明性文字,中间用下划线隔开).
forge 的单元测试的流程是这样的:对于每一个单元测试,在创建完合约后,运行 setUp() 进行初始化,然后运行一个单元测试 test_1(),随后这个合约销毁。也就是说,unit test 之间是相互独立的,setUp() 是每个测试开始前都会执行的。
那么如果我想在 unit test 之间共享一些数据,而不通过 setUp() 呢?我们可以写一个父合约,然后让 ATest 去继承它即可.
Test Execution
可以直接运行所有测试:
$
也可以只运行一个文件内的测试,使用 --match-path 参数指定测试文件
$