SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
21.11.2024

Aula 093: Testando Contratos Inteligentes

Testar é uma parte crucial do desenvolvimento de contratos inteligentes. Como os contratos inteligentes são imutáveis uma vez implantados, garantir que eles funcione como o esperado é vital para evitar vulnerabilidades e garantir a correção das transações. Nesta aula, vamos abordar o básico sobre como configurar um ambiente de testes para seus contratos inteligentes em Solidity usando o framework Truffle e o framework de testes Mocha.

Configurando Seu Ambiente

Antes de começarmos a programar, certifique-se de que você tem o Node.js e o npm instalados. Você pode verificar isso executando:

node -v
npm -v

Uma vez que você tenha esses pré-requisitos, pode configurar seu projeto:

mkdir meu_contrato_inteligente
cd meu_contrato_inteligente
npm init -y
npm install truffle

Após instalar o Truffle, você pode criar um novo projeto Truffle:

truffle init

Esse comando criará uma estrutura para o seu projeto, incluindo pastas para contratos, migrações e testes.

Escrevendo um Contrato Inteligente

Vamos escrever um contrato inteligente simples em Solidity. Crie um arquivo chamado ArmazenamentoSimples.sol na pasta contracts:

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

contract ArmazenamentoSimples {
    uint256 private dadosArmazenados;

    function set(uint256 x) public {
        dadosArmazenados = x;
    }

    function get() public view returns (uint256) {
        return dadosArmazenados;
    }
}

Este contrato permite que você armazene e recupere um único inteiro não assinado.

Escrevendo Testes

Agora que temos um contrato, vamos criar testes para ele. Crie um novo arquivo chamado ArmazenamentoSimples.test.js na pasta test:

const ArmazenamentoSimples = artifacts.require("ArmazenamentoSimples");

contract("ArmazenamentoSimples", (accounts) => {
    let armazenamentoSimples;

    beforeEach(async () => {
        armazenamentoSimples = await ArmazenamentoSimples.new();
    });

    it("deve armazenar o valor 89", async () => {
        await armazenamentoSimples.set(89);
        const dadosArmazenados = await armazenamentoSimples.get();
        assert.equal(dadosArmazenados.toString(), '89', "O valor 89 não foi armazenado.");
    });

    it("deve armazenar o valor 42", async () => {
        await armazenamentoSimples.set(42);
        const dadosArmazenados = await armazenamentoSimples.get();
        assert.equal(dadosArmazenados.toString(), '42', "O valor 42 não foi armazenado.");
    });
});

Análise dos Testes

  1. Importar Contrato: Importamos nosso contrato ArmazenamentoSimples usando artifacts.require("ArmazenamentoSimples").

  2. Configuração: A função beforeEach é chamada antes de cada teste. Aqui, implantamos uma nova instância de ArmazenamentoSimples para garantir que os testes não interfiram uns nos outros.

  3. Testes:

    • O primeiro teste verifica que, ao definirmos o valor para 89, ele recupera o mesmo valor corretamente.
    • O segundo teste realiza uma verificação similar para o valor 42.

Executando Seus Testes

Para executar seus testes, execute o seguinte comando no diretório do seu projeto:

truffle test

Você deverá ver uma saída indicando que os testes passaram. Se houver algum problema, o Truffle fornecerá mensagens de erro que podem ajudá-lo a solucionar seu contrato ou testes.

Conclusão

Nesta aula, cobrimos o básico sobre testar contratos inteligentes usando Truffle e Mocha. Testar é essencial no desenvolvimento de contratos inteligentes para garantir que seu código funcione como esperado e para evitar erros custosos. Você pode expandir esses testes verificando casos extremos, lidando com exceções e testando interações entre múltiplos contratos. À medida que você se familiariza mais com Solidity e o desenvolvimento de contratos inteligentes, testes rigorosos se tornarão um hábito que valerá a pena a longo prazo. Boa codificação!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!