我的智能合约笔记(二):如何编写智能合约测试

crawler
crawler 2018-10-12 12:17
0 3
学习目标
Truffle测试框架
从结构上说,您的测试文件应该与Mocha基本保持一致: 您的测试文件应该放在 ./test 目录, 以 .js作为后缀,而且,它们应该包含Mocha能够识别的自动化测试代码。让 Truffle 和 Mocha 不一样的是这个 contract() 函数: 这个函数基本和 describe() 一样,只不过它可以启用clean-room 功能.  其过程如下:
合约抽象是 JavaScript 实现合约交互的基础。因为Truffle 无法检测出在测试中需要与哪些合约进行交互,所以您需要明确地指出这些合约。您可以使用一个由Truffle提供的方法 artifacts.require()来做这些事情,它可以让您为一个特定的合约,请求一个可用的合约抽象。就如您在下面的例子中所看到的,然后您可以使用这个抽象来确保您的合约工作正常。 有关使用合约抽象的更多信息,查看与你的合约交互章节。
在测试中使用artifacts.require()的方式和在迁移中使用的方式相同,您只需要指定合约名称.更多信息,请查看artifacts.require()。
每个测试文件都有一个配置了正确提供者的web3实例,所以web3.eth.getBalance直接调用就行了。
使用ASYNC/AWAIT
这是个类似的实例,只不过使用的是async/await:
指定测试文件
我们通过如下命令限制执行测试的文件:
进阶  
使用Solidity编写测试
实例
Solidity 测试具有一些高级功能,可以让你测试特殊用例。
您可以很容易地测试你的合同是否应该引发一个异常(例如require()/assert()/revert()语句;throw在早期的Solidity版本上抛出。这个主题首先由作者Simon de la Rouviere在他的教程“在Truffle Solidity测试中抛出异常”中提出。注:该教程大量使用弃用的关键词throw来抛出异常,并从Solidity v0.4.13版本开始被require(),assert()和revert()所取代。
您也可以测试您的合同如何对接收Ether做成出反应,并在Solidity中编写该交互脚本。为了达到这个目的,您的测试应该有一个叫initialBalance,返回值为uint的公有函数。这可以直接写作一个方法或者公用变量,就像下例所示。当您的测试合约部署到网络上,Truffle将从您的测试账户发送大量的Ether到您的测试合约。然后,您的测试合约可以使用这些Ether来在您的合约测试中编写与以太坊的交互。注意:initialBalance是可选的,不是必须的。
游客
登录后才可以回帖,登录 或者 注册