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

测试驱动开发(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

成功绿灯

最终的合约

go 复制代码
// 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;
    }
}

测试代码

go 复制代码
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方法是否写入
        
    });

});
相关推荐
web3探路者3 天前
解锁未来:深入探索去中心化应用程序(DApps)的潜力与挑战
去中心化·区块链·dapp开发·blockchain·dapps开发·去中心化 产品开发·dapps
龙链科技14 天前
DApp浏览器能否集成在自己开发的DApp里?
区块链·dapp开发
元宇宙中心23 天前
Pump Science平台深度剖析:兴起、优势、影响与未来
web3·去中心化·区块链·dapp开发·区块链技术·交易所开发·工业革命
web3探路者1 个月前
深入探索Solana链上的Meme生态:创新、潜力与挑战#区块链开发#dapp开发
web3·区块链·团队开发·dapp开发·区块链技术·链游开发·交易所开发
元宇宙中心1 个月前
Solana 区块链的技术解析及未来展望 #dapp开发#公链搭建
web3·区块链·dapp开发·链游开发·公司开发·公链搭建
元宇宙中心1 个月前
SOL链上Meme生态的崛起与未来#Dapp开发#链游#交易所#公链搭建
区块链·智能合约·dapp开发·链游开发·公司开发·交易所搭建·技术合作
web3探路者1 个月前
2024年 Web3开发学习路线全指南
学习·web3·区块链·智能合约·软件开发·dapp开发·公司开发