Cover photo

Highly Optimistic 开发者博客#03:介绍Smock v2

原文:

https://medium.com/ethereum-optimism/the-highly-optimistic-dev-blog-03-introducing-smock-v2-d252441994a8

发布时间:2021年8月12日

作者:Kelvin Fichter

译者:wuhai#7810

Solidity 开发人员:认识Smock V2,Solidity模拟库,Optimism与DeFi Wonderland的出色团队之间的合作。

智能合约测试历来……很难?如果不难,那么只是令人困惑。在 Solidity 的早期,测试合约的最佳方式是编写另一个合约来负责进行所有测试。由于大约 20 个不同的原因,这是一个糟糕的想法。我将列举一些最重要的:

  1. 你必须在 Solidity 中编写测试代码。

  2. 你不得不重新编译你的测试合约来改变你的测试。

  3. 你的测试合约和目标合约共享相同的链状态。

对于所有相关人员来说,这大费周章。基本上没问题,因为当时智能合约相对简单。但是,当然,缺乏测试基础设施意味着合约不会很复杂。

花了一段时间,但我们最终使用像 Truffle 这样的 JavaScript 测试框架来极大地改善测试体验。我们必须继承 chai 和 mocha 等工具的一些不错的特性。我们的测试至少变得有些清晰了。你实际上可以构建具有合理的复杂性的合约系统。

Hardhat 最终出现并改进了 Truffle 最先做的许多事情。但 Hardhat 的主要进步在于其插件系统——开发人员现在能够轻松地操作他们的测试环境,达到 Truffle 从未真正实现过的程度。

然而,在所有这些改进中,Solidity 开发人员仍然不得不处理一个绝对可怕的模式:模拟合约,用 Solidity 编写,只是为了能够对非常具体的功能进行单元测试。我是说,真的。以下是造成这种情况如此糟糕的几个原因:

  1. 你必须在 Solidity 中编写测试代码。

  2. 你必须重新编译你的测试合约才能改变你的测试。

  3. 你的测试合约和目标合约共享相同的链状态。

是的。总而言之。我们解决了这个问题。

介绍:Smock v2,JavaScript 中的合约模拟。比你想象的更强大。永远不要再用 Solidity 编写模拟合约。

特征

伪造任何合约

post image

操作任何合约函数

post image

创建有真实合约支持的模拟

post image

在模拟中操作变量

post image

还有更多……

我真的需要说别的吗?去试试看。它会改变你的生活。严肃地。

https://github.com/defi-wonderland/smock