当前位置: 首页 > news >正文

【Truffle】二、自定义合约测试

一、准备测试

        上期我们自己安装部署了truffle,并且体验了测试用例的整个测试流程,实际开发中,我们可以对自己的合约进行测试。

        我们首先先明白自定义合约测试需要几个文件

  • 合约文件:既然要测试合约,肯定要有合约的源码文件,以.sol后缀结尾
  • 部署文件:测试合约要写一份部署文件,用于在测试中部署合约,以.js后缀结尾
  • 测试文件:测试合约的流程文件,用于对合约的方法流程进行测试,以.js后缀结尾

         合约文件的话,我们写一个最简单的合约用来测试,合约中定义了一个名为"number" 的无符号整数变量,通过调用 store() 函数,可以将一个无符号整数值存储到 "number" 变量中。然后,可以通过调用 retrieve() 函数来获取存储在 "number" 变量中的值。

// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.2 <0.9.0;/*** @title Storage* @dev Store & retrieve value in a variable* @custom:dev-run-script ./scripts/deploy_with_ethers.ts*/
contract Storage {uint256 number;/*** @dev Store value in variable* @param num value to store*/function store(uint256 num) public {number = num;}/*** @dev Return value * @return value of 'number'*/function retrieve() public view returns (uint256){return number;}
}

        我们把它存放到工作目录中的contracts目录下,命名为storage.sol

        部署文件,固定的格式,可以参考之前下载的测试用例修改一下即可

const Storage = artifacts.require("Storage");module.exports = function (deployer) {deployer.deploy(Storage);
};

        我们把它存放在migrations目录下,命名为1_deploy_contracts.js

        最后是测试文件,因为这个合约只有两个方法,所以我们两个方法都要进行测试,测试用例命名为Storage_test.js

const Storage = artifacts.require("Storage");contract("Storage", (accounts) => {let storageInstance;before(async () => {storageInstance = await Storage.deployed();});it("should store a value", async () => {const newValue = 42;await storageInstance.store(newValue);const storedValue = await storageInstance.retrieve();assert.equal(storedValue, newValue, "Value was not stored correctly");});it("should retrieve the stored value", async () => { const storedValue = await storageInstance.retrieve();assert.equal(storedValue, 42, "Stored value is incorrect");});
});

        最后的目录结构是这样的:

        

二、开始测试: 

        和之前测试用例的测试方法一样,我们已经配置好了文件位置,现在可以开始测试啦

        测试流程为:truffle develop(启用测试网络) => compile(编译合约) => migrate(部署合约) => test(测试合约)

truffle develop

compile

migrate

test

         测试成功,我们看到,测试文档里的两个方法都通过了,至此,我们完成了自定义合约测试的整体流程。

http://www.lryc.cn/news/212630.html

相关文章:

  • 场景交易额超40亿,海尔智家三翼鸟开始收获
  • 众和策略可靠吗?股票扛杆怎么玩?
  • 解决连接Mysql出现ERROR 2013 (HY000): Lost connection to MySQL server at ‘waiting
  • Hadoop YARN功能介绍--资源管理、调度任务
  • 从AlexNet到chatGPT的演进过程
  • Unity如何实现bHaptics TrackSuit震动衣的SDK接入
  • 识别flink的反压源头
  • Spring是如何解决bean循环依赖的问题的
  • [移动通讯]【Carrier Aggregation-9】【 Radio Resource Control (RRC) Aspects】
  • 故障预测与健康管理(PHM)的由来以及当前面临的挑战
  • 【ChatGPT瀑布到水母】AI 在驱动软件研发的革新与实践
  • 【Django】项目模型
  • 字符集详解
  • Vert.x学习笔记-什么是Vert.x
  • AcWing 第127场周赛 构造矩阵
  • Seata入门系列【15】@GlobalLock注解使用场景及源码分析
  • Dubbo 路由及负载均衡性能优化
  • Python数据可视化入门指南
  • 我的ChatGPT的几个使用场景
  • 3 — NLP 中的标记化:分解文本数据的艺术
  • C++-类与对象(上)
  • 多进程间通信学习之无名管道
  • flink常用的几种调优手段的优缺点
  • 如何选择安全又可靠的文件数据同步软件?
  • 使用反射调用类的私有内部类的私有方法
  • 记一次 AWD 比赛中曲折的 Linux 提权
  • [SpringCloud] Feign 与 Gateway 简介
  • [Unity] 个人编码规范与命名准则参考
  • 堆栈与队列算法-以链表来实现队列
  • 快速入门:使用 Spring Boot 构建 Web 应用程序