Skip to content

Commit 4586db2

Browse files
committed
docs: intro text
1 parent 13fb15f commit 4586db2

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

lessons/introducao.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# Introdução
2+
3+
Aprender testes de unidade não para após dominar as habilidades técnicas. Tem muito mais coisas envolvidas do que só escrever testes. Você sempre deve se esforçar para alcançar o melhor retorno do tempo investido escrevendo testes de unidade, minimizando o esforço e maximizando os benefícios que eles oferecem.
4+
5+
Projetos que alcançam esse equilíbrio crescem sem esforço, não precisam de muita manutenção, e podem se adaptar rapidamente a mudanças.
6+
7+
## A definição de "teste de unidade"
8+
9+
Testes de unidade são uma técnica de teste em que as menores partes testáveis de uma aplicação, chamadas unidades, são individualmente e independentemente verificadas para validar seu comportamento correto.
10+
11+
Uma unidade é um "caso de uso" dentro do sistema e sempre tem um "ponto de entrada" e um "ponto de saída". Um exemplo simples é uma função que calcula algo e retorna um valor. Vale ressaltar que uma unidade pode ser uma função, várias funções, ou até mesmo vários módulos ou componentes.
12+
13+
## Pontos de Entrada e pontos de saída
14+
15+
Um ponto de entrada é algo que podemos acionar de fora (via testes ou código de produção) e resulta em algo: retorna um valor, altera um estado ou faz uma chamada para algo externo.
16+
17+
O código abaixo mostra uma exemplo simples de unidade.
18+
19+
```js
20+
function sum(a, b) {
21+
return a + b;
22+
}
23+
```
24+
25+
Nesse caso, a função é o ponto de entrada, e como a chamada da função resulta em um valor retornado, ele é o ponto de saída.
26+
27+
## Um teste do zero
28+
29+
Um teste é basicamente um código que dispara um erro quando o resultado da execução é diferente do esperado. O exemplo a seguir mostra o que seria um teste sem o uso de nenhum framework.
30+
31+
```js
32+
const result = sum(6, 4);
33+
const expected = 10;
34+
35+
if (result !== expected) {
36+
throw new Error(`${result} is not equal to ${expected}`);
37+
}
38+
```
39+
40+
É possível adicionar mais testes com variações nos inputs usando o mesmo ponto de entrada. Para isso, provalvemente você vai querer ter métodos genéricos para usar em todos os testes.
41+
42+
```js
43+
function expect(result) {
44+
return {
45+
toEqual(expected) {
46+
if (result !== expected) {
47+
throw new Error(`${result} is not equal to ${expected}`);
48+
}
49+
},
50+
};
51+
}
52+
53+
export function test(title, callback) {
54+
try {
55+
callback();
56+
console.log(`PASSED: ${title}`);
57+
} catch (error) {
58+
console.error(`FAILED: ${title}`);
59+
console.error(error);
60+
}
61+
}
62+
63+
test("sum with 6 and 4 is equal 10", () => {
64+
const result = sum(6, 4);
65+
expect(result).toEqual(10);
66+
});
67+
68+
test("sum with 2 and 3 is equal 5", () => {
69+
const result = sum(2, 3);
70+
expect(result).toEqual(5);
71+
});
72+
```
73+
74+
Observe como os testes são fáceis de ler e escrever com apenas alguns métodos utilitários. Frameworks de teste fornecem mais métodos como esses, facilitando ainda mais a escrita de testes.

0 commit comments

Comments
 (0)