DAPP开发【04】测试驱动开发

news2024/12/23 5:16:44

测试驱动开发(Test Driven Development),是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程
测试驱动开发是一种敏捷软件开发方法,它强调在编写功能代码之前先编写测试代码。这些测试代码描述了预期的功能行为,并且在开始编写实际功能代码之前会失败。然后,开发人员会专注于编写足够的功能代码,以使测试通过。这个过程被称为"红-绿-重构"(Red-Green-Refactor)循环:

红(Red):编写一个新的测试,期望某个功能,但该测试当前会失败(红色)。
绿(Green):编写最少量的功能代码,使得测试通过(绿色)。
重构(Refactor):优化和重构代码,确保它仍然通过测试,并且更易于理解和维护。

TDD 的主要目标是通过测试来推动开发,确保代码的质量和可用性。它可以帮助开发人员更好地理解需求,并减少错误和缺陷。此外,TDD 还提供了快速反馈机制,让开发人员及早发现和解决问题。最终,这种开发方法可以提高代码的可维护性和可扩展性,并加速整个开发过程。

先编写测试合约
测试合约报错
实现测试合约里的功能
再次测试
成功
重构,完善代码

实践
功能设计
1.可以查看总共有多少信件
2.当有新的信件到来时,总信件数 + 1
3.存储信件内容并可查看
4.存储信件发送人并可查看

先编写测试合约【还未新建合约】
在这里插入图片描述

npx hardhat test
失败
在这里插入图片描述
红灯

新建合约Mailbox.sol
在这里插入图片描述
npx hardhat test
成功绿灯
在这里插入图片描述
1.可以查看总共有多少信件
在这里插入图片描述
npx hardhat test
失败
在这里插入图片描述
实现这个功能
在这里插入图片描述
npx hardhat test
成功绿灯
在这里插入图片描述

最终的合约

// SPDX-License-Identifier: MIT 
pragma solidity ^0.8.9;

contract Mailbox{
    uint public totalLetters;
    struct Letter{
        string letter;
        address sender;
    }
    Letter[] public letters;


    function write(string memory letter) public{
        totalLetters++;
        letters.push(Letter(letter,msg.sender));
    }

    function get() public view returns(Letter[] memory){
        return letters;
    }
}

测试代码

const { expect } = require("chai");
const { ethers } = require("hardhat");

describe("Mailbox",async()=>{
    it("should get mailbox contract",
    async() => {
        const mailboxContract = await
        ethers.getContractFactory("Mailbox");
    });
    
    it("should get total letters in the box",
    async() => {
        const mailboxContract = await
        ethers.getContractFactory("Mailbox");
        
        const mailbox = await
        mailboxContract.deploy();
        
        expect(await mailbox.totalLetters()).to.equal(0);//测试totalLetters变量
    });

    it("should increase by one when get new letter",
    async() => {
        const mailboxContract = await ethers.getContractFactory("Mailbox");//获取合约
        
        const mailbox = await mailboxContract.deploy();//部署合约
        
        await mailbox.write("hello");//测试write方法

        expect(await mailbox.totalLetters()).to.equal(1);


    });

    it("should get mail contents",
    async() => {
        const mailboxContract = await ethers.getContractFactory("Mailbox");//获取合约
        
        const mailbox = await mailboxContract.deploy();//部署合约

        await mailbox.write("hello");//测试write方法
        
        const letters = await mailbox.get();

        expect(letters[0].letter).to.equal("hello");//测试write方法是否写入

    });

    it("should get mail sender",
    async() => {
        const mailboxContract = await ethers.getContractFactory("Mailbox");//获取合约
        
        const mailbox = await mailboxContract.deploy();//部署合约

        await mailbox.write("hello");//测试write方法
        
        const letters = await mailbox.get();

        expect(letters[0].sender).to.equal("改成你的地址");//测试write方法是否写入
        
    });

});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1275867.html

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

相关文章

每日一练2023.12.1——输出GPLT【PTA】

题目链接:L1-023 输出GPLT 题目要求: 给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写&#x…

程序员职业发展之旅:从代码入门到身体管理的完美进化

导言: 在编程的世界中,程序员们经常面对着繁忙的工作、长时间的电脑操作和高度集中的注意力。这种职业特性使得许多程序员在追求代码的完美的同时,往往忽略了自身的健康。让我们通过一段幽默的编程时光,探讨程序员的职业发展与身体…

Apache HTTPD 2.448 mod_proxy SSRF漏洞(CVE-2021-40438)

任务一: 复现漏洞 任务二: 尝试利用SSRF漏洞,访问重庆邮电大学官网(http://www.cqupt.edu.cn) 1.搭建环境 2.了解这个地方是httpd作为了一个反向代理服务器,也就是先是客户端发送请求给代理服务器,然后…

SSM项目实战-mapper实现

1、SysUserMapper.java package com.atguigu.schedule.mapper; import com.atguigu.schedule.pojo.SysUser; import org.springframework.stereotype.Repository; Repository public interface SysUserMapper {SysUser getSysUser(SysUser sysUser); }2、ScheduleMapper.java p…

Qt for Python 札记

文章目录 一、简介 一、简介 Qt for Python 官网

JAVA全栈开发 集合详解(day14+day15汇总)

一、数组 数组是一个容器,可以存入相同类型的多个数据元素。 数组局限性: ​ 长度固定:(添加–扩容, 删除-缩容) ​ 类型是一致的 对象数组 : int[] arr new int[5]; … Student[] arr …

中职组网络安全-PYsystem003.img(环境+解析)

​ web安全渗透 1.通过URL访问http://靶机IP/1,对该页面进行渗透测试,将完成后返回的结果内容作为flag值提交; 访问该网页后发现F12被禁用,使用ctrlshifti查看 ctrlshifti 等效于 F12 flag{fc35fdc70d5fc69d269883a822c7a53e} …

Java——》JSONObjet 数据顺序

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

springsecurity的NullPointerException产生

springsecurity的NullPointerException产生 01 异常发生场景 当我使用springsecurity请求后端数据时 以下是报错代码 02 问题的产生原因 发生空指针异常,无非就几种 类对象没有初始化,地址默认为null指向的数据为空查找到的数据为空与数据类型冲突 …

【趣味JavaScript】一文让你读懂JavaScript原型对象与原型链的继承,探秘属性的查找机制! 《重置版》

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起学习和进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&a…

【话题】程序员养生指南(AI生成)

目录 程序猿可能出现的职业病有哪些? 如何预防和对付这些职业病? 一、颈椎病的预防 二、神经衰弱的调适 三、肩周炎的防护 四、视力下降的保护 五、饮食与运动的重要性 六、消化系统职业病的预防 程序员养生心得:呵护健康&#xff0c…

Explainable Multimodal Emotion Reasoning 多模态可解释性的情感推理

1.摘要 多模态情感识别是人工智能领域的一个活跃的研究课题。它的主要目标是整合多种模态(如听觉、视觉和词汇线索)来识别人类的情绪状态。目前的工作通常假设基准数据集的准确情感标签,并专注于开发更有效的架构。但由于情感固有的主观性,现有数据集往往…

对外汉语教师简历(精选12篇)

以对外汉语老师招聘需求为背景,我们制作了1份全面、专业且具有参考价值的简历案例,大家可以灵活借鉴,希望能帮助大家在众多候选人中脱颖而出。 对外汉语教师简历下载(在线制作):百度幻主简历或huanzhucv.c…

六要素小型气象站-气象百科

随着科技的发展,人们对气象信息的掌握越来越及时、准确。而六要素小型气象站作为一款功能强大的气象监测设备,更是受到了广泛的关注。本文将介绍这款气象站的特点,以及如何通过它来监测天气,让你随时掌握气象变化。 一、六要素小型…

matlab 汽车单车模型固定点跟踪算法

1、内容简介 略 29-可以交流、咨询、答疑 2、内容说明 单车模型固定点跟踪算法 单车模型,固定点跟踪算法,动画演示, 汽车单车模型、转弯动画、固定点跟踪算法、pid控制 3、仿真分析 略 A[0,5;0,0];B[0;1]; Q10*eye(2);R1; Klqr(A…

20、LED点阵屏

LED点阵屏介绍 LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字、图片、视频等。LED点阵屏广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等 LED点阵屏分类 按颜色:单色、双色、全彩 按像素…

年终好价节入手什么数码合适?盘点23年度值得入手的数码好物

各位科技控和数码迷!时间过得飞快,一眨眼2023年就要过去了,说到年底,当然少不了年终好价节啦!这时候正是更新你的数码装备、升级生活品质的绝佳时机。别管你是不是科技控,工作狂还是生活追求者,…

软文营销助力品牌打开市场,提升内在竞争力

当今环境下,企业想要通过传统营销方式打开市场可以说是难度较大,用户如今更偏向于好的内容,而软文营销正是通过好内容吸引用户,助力品牌打开市场,提升内在竞争力,接下来媒介盒子就从以下几个方面和大家聊聊…

Mybatis如何执行批量操作

文章目录 Mybatis如何执行批量操作使用foreach标签 使用ExecutorType.BATCH如何获取生成的主键 Mybatis如何执行批量操作 使用foreach标签 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach标签的属性主要有item,index&…

深度学习环境配置(pytorch版本)----超级无敌详细版(有手就行)

公众号文章--深度学习环境配置(pytorch版本) 写在前面:如果这篇文章对大家有帮助的话,欢迎关注Franpper的公众号:Franpper的知识铺,回复“进群”,即可进入讨论群,有什么问题大家可以一起讨论呀&#xff01…