【问题标题】:Why using Solidity programming language to test smart contracts written in Solidity is not a good idea?为什么使用 Solidity 编程语言来测试用 Solidity 编写的智能合约不是一个好主意?
【发布时间】:2022-12-16 21:20:18
【问题描述】:

我正在尝试使用 truffle,truffle 明确指出您可以使用其测试功能来允许您使用 solidity 编程语言来测试 solidity 合约。然而,在网上,许多开发人员使用 Mocha 和 Chai。因此,需要JS。

我知道我可以避免使用 JS 进行测试,而只在 truffle 中使用 Solidity。但为什么没有人大声说出这样做的局限性。此外,是否有任何资源明确说明这一点?

为什么没有足够的资源来使用 solidity 语言进行测试?

【问题讨论】:

    标签: solidity truffle


    【解决方案1】:

    由于 JS 测试在更高的范围内执行,它们可以访问交易收据,并且您可以验证事件日志等。收据在 Solidity 测试中不可用,因为它们尚未生成,因为当时交易尚未完成执行。

    同样由于这个更高的范围,JS 测试框架允许您以编程方式与区块链模拟器进行交互。例如:

    • 在发送交易的多个账户之间切换,通常用于测试授权
    • 设置blocktime,这样你就可以测试时间敏感的功能

    【讨论】:

    • @Peter Hejda 但您也可以在多个帐户之间切换,也请参阅 [1]。是什么让 JS 在块时间上特别? [1]:ethereum.stackexchange.com/questions/62555/…
    • @Anonymous 这是链接帖子中的 JavaScript 测试,而不是 Solidity 测试...广告拦截时间:假设您有一个功能,可以在预定义的时间(例如一年)后为某些授权地址(例如开发团队和顾问)解锁令牌。当您想要测试此功能时,您需要在该预定义时间之前和之后模拟运行该功能。
    【解决方案2】:

    我不同意这一点。如果您使用像 Foundry 这样的工具,Solidity 中的测试比使用 Hardhat 的 JS 中的测试要快得多,您可以使用模糊测试来获取测试中的随机参数,并且您可以进行与在 Hardhat 中完全相同的测试。

    您可以测试所有内容,包括还原、事件、使用不同的帐户、设置阻塞时间(您可以覆盖所有虚拟机的属性)、gas 消耗和基本上任何您需要的东西。

    您可以了解更多关于unit tests in Solidity with Foundry here

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 2019-12-19
      • 1970-01-01
      相关资源
      最近更新 更多