本文介绍了Foundry框架中的断言作弊码,包括vm.expectRevert
、vm.expectEmit
等,它们可以帮助开发者在Solidity测试中快速验证智能合约的行为,例如预期合约回滚、验证事件和外部调用等。
使用 expectRevert、expectEmit 和 expectCall 锁定你的 Solidity 测试预期。 Foundry 的断言作弊码可帮助你快速验证智能合约的行为。
2025-06-19 - 7 分钟阅读
Foundry
threesigma's 推特threesigma's linkedinthreesigma's github
再次欢迎来到我们的作弊码深度解析。 如果你错过了,上次我们学习了如何用 vm.prank
伪造调用者; 现在我们将用期望指令来磨砺我们的测试武器库,断言还原 (reversions)、事件和外部调用,以便你的合约完全按照预期运行。
vm.expectRevert
:快速失败的负面测试vm.expectRevert
是你在必须抛出的调用之前立即放置的单行守卫。 如果你不提供任何参数,它将接受任何还原; 如果你提供一个字节字符串或自定义错误选择器,它会坚持要求完全相同的理由。 该指令仅适用于紧接的下一个外部调用,因此你始终将其写在被测试语句的正上方。
因为只监视下一个调用,所以将指令放在它的正上方。 当还原依赖于调用者或区块状态时,与 vm.prank
或 vm.roll
结合使用。
为什么要保持简洁? 在实践中,expectRevert
是一个单行守卫,要么静默通过,要么停止运行; 它的语义很简单。
vm.expectEmit
:验证事件和主题当你关心函数发出正确的日志时,你可以使用 vm.expectEmit
。 在内部,Foundry 记录一个模版事件,然后运行真实的调用,然后将实际的日志流与模版进行比较。 四个布尔标志告诉 Forge 哪些索引主题以及非索引数据是否必须匹配,以及一个可选的第五个参数固定预期的发射器地址。
- 原文链接: threesigma.xyz/blog/foun...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!