打字猴:1.703879284e+09
1703879284 ·truffle/Assert.sol库提供Assert.equal()等Assertion函数。这是默认的assertion库,然而只要库与truffle测试运行者松散地整合,就可以触发正确的assertion事件,包括自己的assertion库。Assertion函数触发事件,并由truffle捕获,进而显示信息。这就是truffle中的Solidity assertion库的架构。可在Assert.sol中发现所有现有的Assertion函数(https://github.com/ConsenSys/truffle/blob/beta/lib/testing/Assert.sol)。
1703879285
1703879286 ·在导入路径truffle/Assert.sol中,truffle是包名。
1703879287
1703879288 ·已部署合约(即作为migrations一部分的部署合约)的地址在truffle/Deployed-Addresses.sol库中都可用。这由truffle提供,且在运行每个测试程序组之前重新编译并重新接入。这个库用DeployedAddresses.()的形式为所有已部署合约提供函数。这将返回一个地址,可用以访问合约。
1703879289
1703879290 ·为了使用已部署合约,必须将合约代码导入测试。在前面的例子里,注意导入“../contracts/MetaCoin.sol”。该导入与./test目录中的测试合约有关,为了发现MetaCoin合约,它会超出测试目录。然后使用该合约把地址投射给MetaCoin类型。
1703879291
1703879292 ·所有测试合约开头都是Test(使用大写T)。这对合约和测试助手以及项目合约(即测试中的合约)进行了区分,让测试者知道哪个合约代表测试版。
1703879293
1703879294 ·像测试合约名一样,所有测试函数开头都是test(使用小写t)。每个测试函数都被当作单一交易按照出现在测试文件(例如你的JavaScript测试)中的顺序执行。truffle/Assert.sol提供的Assertion函数触发事件,测试运行者评估以决定测试结果。Assertion函数返回一个Boolean,代表assertion的结果,可以用它从测试中提早返回,以防执行错误(即testrpc显示的错误)。
1703879295
1703879296 ·有许多测试钩(hook),参见下面的例子。这些钩包括beforeAll、beforeEach、afterAll和afterEach,与JavaScript测试中Mocha提供的一样。在进行每个测试之前或之后,或者运行每个程序组之前或之后,可以使用这些钩进行设置和拆除。就像测试函数一样,每个钩都被当作单一交易执行。注意,一些复杂测试需要进行大量设置,可能会超过单一交易的gas上限。可以创建许多有不同后缀的钩,绕过这个限制。示例如下:
1703879297
1703879298
1703879299
1703879300
1703879301
1703879302
1703879303
1703879304 ·测试合约还显示test函数和hook函数均有同样的合约状态。可以在测试前建立合约数据,在测试中使用那些数据,随后重置它,以便为下一个测试做准备。注意,就像JavaScript测试一样,上一个测试函数的状态将延续到下一个测试函数。
1703879305
1703879306
1703879307 truffle无法直接测试出合约是否应当抛出异常(抛出异常的合约说明有预期的错误)。读者可自行查找解决方案。
1703879308
1703879309 如何向测试合约发送以太币
1703879310
1703879311 为了向测试合约发送以太币,在合约中应当有一个返回uint的公共函数,叫作initialBalance。这可以直接被编写成函数或者公共变量。当测试合约被部署到网络中时,truffle将从测试账户发送该数量的以太币到测试合约。在测试状态下,测试合约随后可以使用那些以太币设置演示以太币交互。注意,initialBalance是可选项,而非必选项。例如:
1703879312
1703879313
1703879314
1703879315
1703879316
1703879317 truffle用不执行回退函数的方式发送以太币到测试合约,所以仍然可以使用测试中的回退函数进行高级测试。
1703879318
1703879319 3.运行测试
1703879320
1703879321 要运行测试脚本,请运行如下命令:
1703879322
1703879323
1703879324
1703879325
1703879326 或者,可以给想运行的特定文件指定一个路径。比如,
1703879327
1703879328
1703879329
1703879330
1703879331
1703879332
1703879333
[ 上一页 ]  [ :1.703879284e+09 ]  [ 下一页 ]