🧪 Biblioteca: Teste

Framework de testes unitários extraordinário integrado à linguagem!

Por que testar?

Testes são como redes de segurança: você escreve uma vez e eles protegem seu código para sempre. Com a biblioteca teste, você pode validar que seu código funciona corretamente!

Seu primeiro teste

teste.grupo("Calculadora", função()
    teste.descreva("operações matemáticas básicas")

    teste.caso("deve somar dois números", função()
        teste.afirme_igual(5, 2 + 3)
    fim)
fim)

teste.relatorio()
O relatório mostra ✓ para testes que passaram e ✗ para falhos!

Estrutura de Grupos

Organize seus testes em grupos lógicos que podem ser aninhados:

teste.grupo("Usuários", função()
    teste.descreva("gerencia usuários do sistema")

    teste.grupo("Criação", função()
        teste.caso("cria usuário válido", função()
            -- seu teste aqui
        fim)
    fim)

    teste.grupo("Exclusão", função()
        teste.caso("remove usuário", função()
            -- seu teste aqui
        fim)
    fim)
fim)

Hooks de Ciclo de Vida

Execute código antes e depois dos testes:

teste.grupo("Banco de Dados", função()
    local conexao

    teste.antes_de_todos(função()
        -- Executado UMA vez antes de todos os testes
        conexao = banco.conecte()
    fim)

    teste.antes_de_cada(função()
        -- Executado ANTES de cada teste
        conexao:limpe()
    fim)

    teste.depois_de_cada(função()
        -- Executado DEPOIS de cada teste
    fim)

    teste.depois_de_todos(função()
        -- Executado UMA vez depois de todos os testes
        conexao:feche()
    fim)

    teste.caso("insere registro", função()
        -- A conexão já está pronta!
    fim)
fim)

Asserções

Igualdade e Diferença

teste.afirme_igual(42, resultado)       -- esperado == atual
teste.afirme_diferente(a, b)            -- a != b

Valores Booleanos e Nulos

teste.afirme(condicao)                  -- condição é verdadeira
teste.afirme_verdadeiro(valor)          -- valor == verdadeiro
teste.afirme_falso(valor)               -- valor == falso
teste.afirme_nulo(valor)                -- valor == nulo
teste.afirme_não_nulo(valor)            -- valor != nulo

Tipos

teste.afirme_tipo("número", 42)          -- valida tipo
teste.afirme_tipo("texto", "Sol")
teste.afirme_tipo("tabela", {})
teste.afirme_tipo("função", função() fim)

Comparações

teste.afirme_maior(10, 5)               -- 10 > 5
teste.afirme_menor(5, 10)               -- 5 < 10
teste.afirme_maior_igual(10, 10)        -- 10 >= 10
teste.afirme_menor_igual(5, 10)         -- 5 <= 10

Coleções

teste.afirme_contem({1, 2, 3}, 2)      -- tabela contém valor
teste.afirme_tamanho(3, {1, 2, 3})     -- tamanho == 3
teste.afirme_vazio({})                  -- tabela está vazia

Erros

teste.afirme_erro(função()
    lance_erro("boom!")
fim)  -- deve lançar erro

teste.afirme_sem_erro(função()
    local x = 1 + 1
fim)  -- não deve lançar erro

Controle

teste.falhe("não deveria chegar aqui")  -- força falha
teste.pule("funcionalidade pendente")   -- pula teste

Execução e Controle

teste.execute()                           -- executa todos os testes pendentes
teste.reinicie()                          -- reinicia contadores de teste

Relatório

No final, chame teste.relatorio() para ver um resumo visual:

╔══════════════════════════════════════════════════════════╗
║                    RELATÓRIO DE TESTES                   ║
╠══════════════════════════════════════════════════════════╣
║  Total: 11 | ✓ Passou: 10 | ✗ Falhou: 1 | ○ Pulados: 0   ║
║  Tempo: 0.013s                                           ║
╚══════════════════════════════════════════════════════════╝
Testes são a base de um código confiável. Use a biblioteca teste em todos os seus projetos!
```