Skip to content

Biblioteca de testes #174

@Andre0n

Description

@Andre0n

Olá pessoal! Estava dando uma olhada nos testes da linguagem e pensei em como poderia tornar a experiência de escrever os testes mais agradável para novos e antigos contribuidores. Tive a ideia de implementar uma biblioteca de testes que oferece funções que ajude a testar os elementos da linguagem. Sei que é um tópico complicado, uma vez que isso afeta todo o escopo e funcionamento linguagem, mas acho que é interessante avaliar a proposta.

Motivações:

  • Facilidade: Permite a construção de testes de maneira simplificada.
  • Legibilidade: Torna o código dos testes mais legível e elegante.
  • Clareza: A biblioteca apresenta de forma clara e concisa o resultados.

Dificuldades:

  • Manutenção: Assegurar que a biblioteca esteja funcionando corretamente.
  • Reformulação: Reescrever os testes no novo formato.
  • Validação: Garantir que a versão da linguagem que roda os testes não contenha bugs.
  • Cobertura: Garantir que a biblioteca cubra os testes necessários.

Atuais problemas da biblioteca:

  • Cada conjunto é um objeto global no escopo da biblioteca.
  • As comparações entre objetos não é precisa.
  • Ainda não há implementação para testes do tipo (Tente/Pegue, escreva, ...)
  • Ainda não é possível passar funções para testar, apenas os valores retornados.

Funcionamento básico da biblioteca:

// testes.egua
var testes = importar("testes"); //Importando a biblioteca;

var testes_basicos = função(){
  //Inicia novo conjuto de testes.
  testes.novo_conjunto("Testes básicos");

  testes.novo_teste("Verifica se 1 == 1").esperado_que(1 == 1).seja_verdadeiro();
  testes.novo_teste("Verifica se 1 != 2").esperado_que(1 == 2).seja_falso();

  // Finaliza o conjunto de testes e mostra o resultado!.
  escreva(testes.resultados());
};

var testes_objetos = função(){
    testes.novo_conjunto("Testes de objetos");
     // Exemplos testes com objetos
    testes.novo_teste("Verifica se [1, 2] == [1, 2]").esperado_que([1,2]).seja_objeto([1, 2]);
    testes.novo_teste("Verifica se {one: 1, two: 2} == {one: 1, two: 2}")
                          .esperado_que({"one": 1, "two": 2})
                          .seja_objeto({"one": 1, "two": 2});
    escreva(testes.resultados());
};

var testes_numeros = função(){
  //Inicia novo conjuto de testes.
  testes.novo_conjunto("Testes de números");
 
  // Exemplos testes com números
  testes.novo_teste("Verifica se 0.1 + 0.2 == 0.3").esperado_que(0.1 + 0.2).seja(0.3);
  testes.novo_teste("Vefica se 0.1 + 0.3 é próximo a 0.3").esperado_que(0.1 + 0.2).seja_proximo(0.3);

  // Finaliza o conjunto de testes e mostra o resultado!.
  escreva(testes.resultados());
};
// Chamando os testes.
testes_basicos();
testes_objetos();
testes_numeros();

A saída do programa:

Testes básicos -- PASSOU
  ✔  Verifica se 1 == 1
  ✔  Verifica se 1 != 2
Testes: 2 passou, 0 falhou, 2 total

Testes de objetos -- PASSOU
  ✔  Verifica se [1, 2] == [1, 2]
  ✔  Verifica se {one: 1, two: 2} == {one: 1, two: 2}
Testes: 2 passou, 0 falhou, 2 total

Testes de números -- FALHOU
  ✖  Verifica se 0.1 + 0.2 == 0.3
	 ● Testes de números > Verifica se 0.1 + 0.2 == 0.3  
	        esperado_que(obtido).seja(esperado) //Object.is igualdade
	        Esperado: 0.3
	        Obtido: 0.30000000000000004
  ✔  Vefica se 0.1 + 0.3 é próximo a 0.3
Testes: 1 passou, 1 falhou, 2 total

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions