10.1 Uso de frameworks de testing (Truffle, Hardhat)





Uso de frameworks de testing en Solidity: Truffle y Hardhat

10.1 Uso de Frameworks de Testing (Truffle, Hardhat)

En el desarrollo de contratos inteligentes en Solidity es crucial asegurarse de que el código se comporte como se espera. Para ello, se utilizan frameworks de testing que permiten a los desarrolladores escribir, ejecutar y depurar pruebas de sus contratos. Los dos frameworks más populares para este propósito son Truffle y Hardhat.

1. Truffle

Truffle es un entorno de desarrollo para Ethereum que incluye una suite completa para compilación, despliegue y gestión de contratos inteligentes sobre la blockchain de Ethereum.

a) Instalación de Truffle

Para instalar Truffle, se debe tener Node.js y npm instalados previamente. La instalación de Truffle se realiza a través de npm:

npm install -g truffle
    

b) Estructura de un proyecto Truffle

La estructura básica de un proyecto Truffle incluye los siguientes directorios:

  • contracts/: Contiene los contratos inteligentes escritos en Solidity.
  • migrations/: Incluye scripts de migración para desplegar contratos a la blockchain.
  • test/: Contiene las pruebas de los contratos inteligentes.

c) Ejemplo de Test en Truffle

A continuación se muestra un ejemplo de cómo escribir una prueba en Truffle para un contrato simple:

Contrato Solidity: SimpleStorage.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0

contract SimpleStorage {
    uint256 private value

    function set(uint256 _value) public {
        value = _value
    }

    function get() public view returns (uint256) {
        return value
    }
}
    
Prueba en Truffle
const SimpleStorage = artifacts.require(SimpleStorage)

contract(SimpleStorage, (accounts) => {
    it(should store and return the correct value, async () => {
        const instance = await SimpleStorage.deployed()
        await instance.set(42, { from: accounts[0] })
        const storedValue = await instance.get()
        assert.equal(storedValue, 42, The value 42 was not stored.)
    })
})
    

2. Hardhat

Hardhat es un entorno de desarrollo flexible y extensible para Ethereum que se centra en la facilidad de uso y la configuración avanzada. Es especialmente potente cuando se combinan diferentes plugins y se configura para pruebas automatizadas.

a) Instalación de Hardhat

Para instalar Hardhat, primero se debe crear un nuevo directorio y ejecutarlo como un proyecto npm:

mkdir my-hardhat-project
cd my-hardhat-project
npm init -y
npm install --save-dev hardhat
    

b) Inicialización de Hardhat

Para inicializar un proyecto de Hardhat, ejecuta el siguiente comando y sigue las instrucciones interactivas:

npx hardhat
    

c) Ejemplo de Test en Hardhat

A continuación, un ejemplo de cómo escribir una prueba en Hardhat para el mismo contrato SimpleStorage:

Contrato Solidity: SimpleStorage.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0

contract SimpleStorage {
    uint256 private value

    function set(uint256 _value) public {
        value = _value
    }

    function get() public view returns (uint256) {
        return value
    }
}
    
Prueba en Hardhat
const { expect } = require(chai)

describe(SimpleStorage, function () {
    it(Should store and return the correct value, async function () {
        const SimpleStorage = await ethers.getContractFactory(SimpleStorage)
        const simpleStorage = await SimpleStorage.deploy()
        await simpleStorage.deployed()

        await simpleStorage.set(42)
        expect((await simpleStorage.get()).toString()).to.equal(42)
    })
})
    

Comparativa entre Truffle y Hardhat

  • Facilidad de uso: Tanto Truffle como Hardhat son fáciles de usar, pero Hardhat ofrece una mayor flexibilidad y configuración avanzada.
  • Plugins: Hardhat dispone de una mayor cantidad de plugins y es más fácil de extender.
  • Despliegue: Truffle incluye herramientas de migración, mientras que Hardhat requiere plugins adicionales para una funcionalidad similar.

Ambos frameworks son potentes y completos, por lo que la elección entre uno u otro dependerá de las necesidades y preferencias del desarrollador.

AnteriorSiguiente

[mwai_chat]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *