Foundry作弊码第三部分:expectRevert、Emit和Call

本文介绍了Foundry框架中的断言作弊码,包括vm.expectRevertvm.expectEmit等,它们可以帮助开发者在Solidity测试中快速验证智能合约的行为,例如预期合约回滚、验证事件和外部调用等。

高级 Foundry 作弊码系列:第 3 部分 - 断言作弊码

使用 expectRevert、expectEmit 和 expectCall 锁定你的 Solidity 测试预期。 Foundry 的断言作弊码可帮助你快速验证智能合约的行为。

高级 Foundry 作弊码系列:第 3 部分 - 断言作弊码

2025-06-19 - 7 分钟阅读

作者:Simeon Cholakov

Foundry

threesigma's 推特threesigma's linkedinthreesigma's github

服务
支持
信息

介绍

再次欢迎来到我们的作弊码深度解析。 如果你错过了,上次我们学习了如何用 vm.prank 伪造调用者; 现在我们将用期望指令来磨砺我们的测试武器库,断言还原 (reversions)、事件和外部调用,以便你的合约完全按照预期运行。

vm.expectRevert:快速失败的负面测试

vm.expectRevert 是你在必须抛出的调用之前立即放置的单行守卫。 如果你不提供任何参数,它将接受任何还原; 如果你提供一个字节字符串或自定义错误选择器,它会坚持要求完全相同的理由。 该指令仅适用于紧接的下一个外部调用,因此你始终将其写在被测试语句的正上方。

image

因为只监视下一个调用,所以将指令放在它的正上方。 当还原依赖于调用者或区块状态时,与 vm.prankvm.roll 结合使用。

为什么要保持简洁? 在实践中,expectRevert 是一个单行守卫,要么静默通过,要么停止运行; 它的语义很简单。

vm.expectEmit:验证事件和主题

当你关心函数发出正确的日志时,你可以使用 vm.expectEmit。 在内部,Foundry 记录一个模版事件,然后运行真实的调用,然后将实际的日志流与模版进行比较。 四个布尔标志告诉 Forge 哪些索引主题以及非索引数据是否必须匹配,以及一个可选的第五个参数固定预期的发射器地址。

  • 原文链接: threesigma.xyz/blog/foun...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Three Sigma
Three Sigma
Three Sigma is a blockchain engineering and auditing firm focused on improving Web3 by working closely with projects in the space.