-
Notifications
You must be signed in to change notification settings - Fork 38
Open
Description
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
Labels
No labels