【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
测试成功,我们看到,测试文档里的两个方法都通过了,至此,我们完成了自定义合约测试的整体流程。
相关文章:
【Truffle】二、自定义合约测试
一、准备测试 上期我们自己安装部署了truffle,并且体验了测试用例的整个测试流程,实际开发中,我们可以对自己的合约进行测试。 我们首先先明白自定义合约测试需要几个文件 合约文件:既然要测试合约,肯定要有合约的源码…...
场景交易额超40亿,海尔智家三翼鸟开始收获
文 | 螳螂观察 作者 | 余一 随着双十一的到来,国内的消费情绪再次被点燃。在这类大促之下,品牌们就像一个个天体,不断引动着市场潮汐,期待自己能触发更大的“海潮效应”。 所谓“海潮效应”是指,海水因天体的引力而…...
众和策略可靠吗?股票扛杆怎么玩?
可靠 股票扛杆是一种出资战略,经过假贷资金来增加出资金额,从而进步出资收益。这种战略在股票商场中被广泛运用,但一起也伴随着一定的危险。在本文中,咱们将从多个视点来剖析股票扛杆怎么玩。 首要,扛杆出资的原理是…...
解决连接Mysql出现ERROR 2013 (HY000): Lost connection to MySQL server at ‘waiting
在上一篇中解决Mysql ER_ACCESS_DENIED_ERROR: Access denied for user ‘root‘‘localhost‘ (using password: YES)-CSDN博客 写了mysql的密码报错问题,在执行 mysql -u root -p 出现了这个错误, ERROR 2013 (HY000): Lost connection to MySQL se…...
Hadoop YARN功能介绍--资源管理、调度任务
Hadoop YRAN介绍 YARN是一个通用资源管理系统平台和调度平台,可为上层应用提供统一的资源管理和 调度。 他的引入为集群在利用率、资源统一管理和数据共享等方面带来了好处。 1.资源管理系统 集群的硬件资源,和程序运行无关,比如内存、cu…...
从AlexNet到chatGPT的演进过程
一、演进 AlexNet(2012): AlexNet是深度学习领域的重要突破,包括5个卷积层和3个全连接层。使用ReLU激活函数和Dropout正则化,获得了ImageNet图像分类比赛的胜利。引入了GPU加速训练,大幅提高了深度神经网络…...
Unity如何实现bHaptics TrackSuit震动衣的SDK接入
前言 TrackSuit是bHaptisc公司旗下的一款震动衣,包括X16,X40等不同型号,是一款尖端的无线高级触觉背心,采用人体工程学设计,具有40个精确的触觉反馈点。通过无缝的跨平台支持和无限制、无滞后的游戏体验,增强您的VR冒险体验。用于PC或者VR游戏中高度还原真实射击触感。官…...
识别flink的反压源头
背景 flink中最常见的问题就是反压,这种情况下我们要正确的识别导致反压的真正的源头,本文就简单看下如何正确识别反压的源头 反压的源头 首先我们必须意识到现实中轻微的反压是没有必要去优化的,因为这种情况下是由于偶尔的流量峰值,Task…...
Spring是如何解决bean循环依赖的问题的
在Spring框架中,循环依赖是指两个或多个Bean之间相互依赖,形成了一个闭环的依赖关系。当存在循环依赖时,Bean的创建过程会陷入死循环,导致应用程序无法启动或出现异常。 说到循环依赖,首先我先说说bean的三级缓存 在S…...
[移动通讯]【Carrier Aggregation-9】【 Radio Resource Control (RRC) Aspects】
前言: CA 分析辅助工具: UE Capabilities 目录: 总体流程 Radio Resource Control (RRC) Aspects SCell addition and removal Handover 一 总体流程 1.1 CA 总体流程 1.2 CA 和 NSA 区别 NSA 我理解也是一种特殊的CA 方案&…...
故障预测与健康管理(PHM)的由来以及当前面临的挑战
故障预测与健康管理(PHM)作为一项关键技术,旨在帮助企业在事故发生之前较长时间内实现故障预测与健康管理,达到“治未病”的效果。PHM的发展源于对设备可靠性和安全性的追求,以及对预测性维护的需求。然而,…...
【ChatGPT瀑布到水母】AI 在驱动软件研发的革新与实践
这里写目录标题 前言内容简介作者简介专家推荐读者对象目录直播预告 前言 计算机技术的发展和互联网的普及,使信息处理和传输变得更加高效,极大地改变了金融、商业、教育、娱乐等领域的运作方式。数据分析、人工智能和云计算等新兴技术,也在不…...
【Django】项目模型
Django的基本命令 django-admin 命令含义startproject启动Django项目startapp启动Django应用check检查项目完整性runserver本地运行项目shell进入Django项目的Python Shell环境test 进行Django用例测试makemigrations创建模型变更的迁移文件migrate执行makemigrations…...
字符集详解
常见字符集介绍 字符集基础知识: 计算机底层不可以直接存储字符的。 计算机中底层只能存储二进制(0、1) 。 二进制是可以转换成十进制的。 结论:计算机底层可以表示成十进制编号。计算机可以给人类字符进行编号存储,这套编号规则就是字符…...
Vert.x学习笔记-什么是Vert.x
Vert.x介绍 用官网的一句话来总结:Vert.x是用于在JVM上构建响应式应用程序的工具包,项目初期的目标是成为“JVM版的Node.js”,但是后续的发展逐渐偏离了初期的目标,变成了一个给JVM提供量身定制的异步编程基础框架的工具包。 Ver…...
AcWing 第127场周赛 构造矩阵
构造题目,考虑去除掉最后一行最后一列先进行考虑,假设除了最后一行和最后一列都已经排好了(你可以随便排),那么分析知最后一个数字由限制以外其他都已经确定了,无解的情况是k为-1 并且n,m的奇偶…...
Seata入门系列【15】@GlobalLock注解使用场景及源码分析
1 前言 在Seata 中提供了一个全局锁注解GlobalLock,字面意思是全局锁,搜索相关文档,发现资料很少,所以分析下它的应用场景和基本原理,首先看下源码中对该注解的说明: // 声明事务仅在单个本地RM中执行 //…...
Dubbo 路由及负载均衡性能优化
作者:vivo 互联网中间件团队- Wang Xiaochuang 本文主要介绍在vivo内部针对Dubbo路由模块及负载均衡的一些优化手段,主要是异步化缓存,可减少在RPC调用过程中路由及负载均衡的CPU消耗,极大提升调用效率。 一、概要 vivo内部Java…...
Python数据可视化入门指南
Matplotlib和Plotly是两个在Python中广泛使用的数据可视化库,它们具有丰富的API和功能,用于创建各种类型的图表和图形。在本篇博客中,我们将介绍它们的主要特点和基本用法。 Matplotlib 主要特点: 高度自定义: Matp…...
我的ChatGPT的几个使用场景
示例一,工作辅助、写函数代码: 这里展示了一个完整的代码,修正,然后最终输出的过程。GPT具备足够丰富的相关的小型代码生成能力,语法能力也足够好。这类应用场景,在我的GPT使用中,能占到65%以上…...
LongWriter应用案例大全:从旅游指南到爱情故事的10,000+字生成示例
LongWriter应用案例大全:从旅游指南到爱情故事的10,000字生成示例 【免费下载链接】LongWriter [ICLR 2025] LongWriter: Unleashing 10,000 Word Generation from Long Context LLMs 项目地址: https://gitcode.com/gh_mirrors/lo/LongWriter LongWriter是一…...
CANN/asc-devkit MrgSort合并排序函数
MrgSort 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/ca…...
基于Hi3861与WM8978的嵌入式智能录音笔设计与实现
1. 项目概述:当Hi3861遇见WM8978,一个录音笔的诞生最近在捣鼓Hi3861这块开发板,想用它做点有意思的东西。Hi3861是海思(现在叫海思了)推出的一款面向IoT领域的Wi-Fi SoC,性能对于简单的音频处理来说&#x…...
CANN/asc-devkit SIMD矢量加法
Adds 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/cann/…...
3分钟学会:免费飞书文档转Markdown终极指南
3分钟学会:免费飞书文档转Markdown终极指南 【免费下载链接】cloud-document-converter Convert Lark Doc to Markdown 项目地址: https://gitcode.com/gh_mirrors/cl/cloud-document-converter 想象一下,你花了好几个小时在飞书上精心排版的技术…...
避坑指南:用3dMax一键房屋插件时,为什么你的窗洞总创建失败?
3dMax一键房屋插件窗洞创建失败的深度排查手册 引言 在建筑可视化与室内设计领域,3dMax的一键房屋插件确实为设计师节省了大量重复劳动时间。然而,许多中级用户在尝试创建窗洞时,常常遭遇各种意料之外的失败——从简单的按钮灰色不可点击&…...
RAG我懂你:从架构到知识库构建
导航 传统大语言模型主要依赖参数中的隐式知识进行回答,容易受到知识过期、幻觉和领域知识不足等问题影响。RAG 的核心思想是:在生成答案之前,先从外部知识库中检索相关信息,再将这些信息作为上下文提供给大语言模型,从…...
手把手教你给Ubuntu 22.04的Intel蓝牙‘补丁’:ibt-1040-1050固件缺失的保姆级修复指南
深度修复Ubuntu 22.04中Intel蓝牙固件缺失问题:从原理到实践的全方位指南 在Linux系统中,硬件设备的正常运行往往依赖于对应的固件支持。对于使用Intel AX200/AX201等无线网卡的用户来说,蓝牙功能突然失效是一个常见但令人困扰的问题。本文将…...
【图像增强】基于Grünwald–Letnikov和Riesz分数阶算子的四种分数阶PDE图像增强算法的MATLAB实现
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...
软硬一体赋能企业守护力,可穿戴手环构建员工数字健康管理新范式
在数字化转型深入推进的当下,员工健康已成为企业安全生产、高效运营的核心基石。传统健康管理模式存在数据零散、监测滞后、人工成本高、风险预警不及时等痛点,尤其铁路、港口、政企单位、生产型企业,一线员工高强度作业、慢病高发、突发健康…...
