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

news2024/12/28 4:47:43

一、准备测试

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

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

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

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

// SPDX-License-Identifier: GPL-3.0

pragma 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.coloradmin.cn/o/1148666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3 Teleport组件

<Teleport> 是一个内置组件&#xff0c;它可以将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层 的位置去。 <template><el-button click"dialogVisible true">打开弹窗</el-button><el-dialogv-model"dialogVisible&…

一文教你解决git请求github时候超时的问题

前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 一文教你解决git请求github的时候超时问题 一. 问题二. 当前 ssh 实现原理三. 创建ssh key3.1 将ssh key加入github配置中3.2 测试连…

洛谷P1765 手机 / 秋季赛 九宫格

手机 题目描述 一般的手机的键盘是这样的&#xff1a; 要按出英文字母就必须要按数字键多下。例如要按出 x \tt x x 就得按 9 9 9 两下&#xff0c;第一下会出 w \tt w w&#xff0c;而第二下会把 w \tt w w 变成 x \tt x x。 0 0 0 键按一下会出一个空格。 你的任务是…

算法笔记【6】-简单选择排序算法

文章目录 一、基本原理二、实现步骤三、优缺点分析 一、基本原理 在排序算法中&#xff0c;简单选择排序是一种基本且直观的排序方法。尽管它的性能较冒泡排序稍好&#xff0c;但仍然属于较慢的排序算法。本文将详细介绍简单选择排序算法的原理、步骤&#xff0c;并讨论其优缺…

AcWing第 127 场周赛 - AcWing 5283. 牛棚入住+AcWing 5284. 构造矩阵 - 模拟+快速幂+数学

AcWing 5283. 牛棚入住 题目数据范围不大&#xff0c;直接暴力模拟即可 按照题目所说的意思即可。 #include <math.h> #include <stdio.h> #include <algorithm> #include <cstring> #include <iostream> using namespace std; const int N 1…

清华训练营悟道篇之操作系统的内存管理

文章目录 SV39多级页表的硬件机制物理页帧的管理多级页表管理内核与应用的地址空间 SV39多级页表的硬件机制 三级页表 共3*9 27位虚拟页号 第 26-18 位为一级页索引 VPN0第 17-9 位为二级页索引 VPN1第 8-0 位为三级页索引 VPN2 每个页表都用 9 位索引 2^9 512 个页表项每个页…

数据结构-顺序表6

八.返回key的前驱下标&#xff0c;如果不存在&#xff08;key无前驱&#xff0c;在表头&#xff09;返回-1函数 思路&#xff1a;找到key的前驱&#xff0c;调用Search函数找key就可以 这里把i<0写成i<0&#xff0c;也是可以的&#xff0c;因为i0接着进入下面return i-1…

响应式相册写真摄影网站模板源码

模板信息&#xff1a; 模板编号&#xff1a;28526 模板编码&#xff1a;UTF8 模板颜色&#xff1a;黑白 模板分类&#xff1a;摄像、婚庆、家政、保洁 适合行业&#xff1a;婚纱摄影类企业 模板介绍&#xff1a; 本模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#x…

springboot第44集:Kafka集群和Lua脚本

servers&#xff1a;Kafka服务器的地址。这是Kafka集群的地址&#xff0c;生产者将使用它来发送消息。retries&#xff1a;在消息发送失败时&#xff0c;生产者将尝试重新发送消息的次数。这个属性指定了重试次数。batchSize&#xff1a;指定了生产者在发送消息之前累积的消息大…

6.scala辅助构造器与为构造函数提供默认值(一)

概述 本文主要说明: 辅助构造器 与 为构造函数提供默认值 的使用 辅助构造器为构造函数提供默认值 相关链接 阅读之前&#xff0c;可以浏览一下 scala相关文章 辅助构造器 可以通过定义名为this的方法来定义辅助Scala类构造函数。只有几个规则需要了解&#xff1a; 每个辅助…

算法笔记【7】-直接插入排序算法

文章目录 一、简介二、基本原理和实现步骤三、优缺点分析 一、简介 在排序算法中&#xff0c;直接插入排序是一种基本而常用的排序方法。它通过不断将待排序数组中的元素插入到已排序部分的合适位置&#xff0c;逐步构建有序数组。本文将详细介绍直接插入排序算法的原理、实现…

2024王道考研计算机组成原理——总线

6.1 总线概述 每一个外设都通过IO接口和DB、CB、AB相连 三系统总线结构&#xff1a; 桥有总线仲裁的功能&#xff0c;就是把某一总线的使用权分给哪个设备&#xff1f; 6.1.2 总线的性能指标 总线复用&#xff1a;分时传输地址&数据 6.2 总线仲裁 通过控制总线来发送使…

《RT-DETR改进实战》专栏介绍 专栏目录

《RT-DETR改进实战专栏》介绍及目录 介绍&#xff1a;欢迎来到最新专栏《RT-DETR改进实战》&#xff01;这个专栏专注于基于 YOLOv8 项目的魔改版本&#xff0c;而不是百度飞桨框架中的 RT-DETR。 本专栏为想通过改进 RT-DETR 算法发表论文的同学设计。每篇文章均包含完整的改…

使用示例和应用程序全面了解高效数据管理的Golang MySQL数据库

Golang&#xff0c;也被称为Go&#xff0c;已经成为构建强大高性能应用程序的首选语言。在处理MySQL数据库时&#xff0c;Golang提供了一系列强大的库&#xff0c;简化了数据库交互并提高了效率。在本文中&#xff0c;我们将深入探讨一些最流行的Golang MySQL数据库库&#xff…

ImportError: DLL load failed while importing _pyopenvino: 找不到指定的程序

ImportError: DLL load failed while importing _pyopenvino: 找不到指定的程序 完全按照官方的pip安装方式&#xff0c;但是报错 解决方法&#xff1a; 下载下面压缩包 官网下载链接 解压到 运行程序之前 完成&#xff01;&#xff01;&#xff01; 测试 python -c &quo…

思维模型 纳什均衡

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。纳什均衡解释了囚徒困境、智猪博弈、内卷、美苏的军备竞赛等博弈问题。 1 纳什均衡的应用 1.1 经典的 囚徒困境 1 背景 囚徒困境是一个经典的博弈论问题&#xff0c;主要描述了两个被捕的…

第十三章 枚举与泛型

13.1枚举类型 13.1.1 使用枚举类型设置常 设置常量时&#xff0c;通常将常量放置在接口中&#xff0c;这样在程序中直接使用。该常量不能被修改&#xff0c;因为在接口定义常量时&#xff0c;该常量的修饰符为final与static。常规定义常量的代码如下&#xff1a; public int…

Stable Diffusion系列(一):古早显卡上最新版 WebUI 安装及简单操作

文章目录 Stable Diffusion安装AnimateDiff插件适配sdxl模型适配 Stable Diffusion使用插件安装界面设置基础文生图加入lora的文生图 Stable Diffusion安装 我的情况比较特殊&#xff0c;显卡版本太老&#xff0c;最高也就支持cuda10.2&#xff0c;因此只能安装pytorch1.12.1&…

05、SpringCloud -- 秒杀按钮、秒杀请求流程(各种请求到后台的判断、减库存、下单数据和次数保存)

目录 秒杀按钮代码实现:vue的JS实现:秒杀请求需求:代码前端后端Seckill-apidomainSeckill-serverWebConfig1、秒杀请求判断controller2、重复下单判断MapperService 接口Impl 实现类controller3、库存判断4、秒杀涉及到的操作_01、减库存_02、创建订单对象并保存_03、用户下…

mycat2.X读写分离

一、数据库中间件介绍 二、下载安装包 2.1下载地址: 下载两个一个是mycat程序,一个是mycat的驱动 http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.20.zip http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies-2…