Por que testar
Encontre bugs antes dos usuários.
Por que testar é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
Por que testar
Testes automatizados são código que verifica seu código. Em vez de executar manualmente um programa e examinar a saída, você escreve pequenas asserções que o executor de testes verifica por você.
Para Lua, a estrutura mais popular é o busted. Ela oferece uma sintaxe clara para descrever comportamentos e informar resultados de sucesso ou falha.
O custo de não ter testes
Sem testes, toda alteração é uma aposta. Você corrige um erro e quebra outro silenciosamente. À medida que a base de código cresce, torna-se impossível fazer uma verificação manual completa.
Os testes funcionam como uma rede de segurança. Ao refatorar, um conjunto de testes aprovado informa que o comportamento foi preservado.
Um primeiro arquivo de teste
Um arquivo de teste do busted geralmente fica em uma pasta spec/ e termina com _spec.lua. Nele, você descreve o que está testando.
Veja o menor exemplo útil. Ele verifica se a aritmética simples funciona.
describe("math", function()
it("adds numbers", function()
assert.are.equal(4, 2 + 2)
end)
end)Executando o busted
Você instala o busted com LuaRocks: luarocks install busted. Em seguida, execute o comando busted na raiz do seu projeto.
Ele localiza arquivos que terminam com _spec.lua, executa cada bloco it e imprime um ponto para cada sucesso e um F para cada falha.
Testando seu próprio módulo
Testes reais importam o módulo que está sendo testado com require. Você chama as funções dele e faz asserções sobre o resultado.
Suponha que você tenha um módulo calculator.lua que retorna uma tabela de funções.
local calc = require("calculator")
describe("calculator", function()
it("multiplies", function()
assert.are.equal(6, calc.mul(2, 3))
end)
end)Testes como documentação
Testes bem escritos também funcionam como documentação viva. Uma pessoa desenvolvedora nova pode ler o arquivo de especificação e entender exatamente como uma função deve se comportar.
Como as descrições são cadeias de caracteres simples, elas parecem quase frases: "calculadora multiplica".
describe("string utils", function()
it("trims whitespace", function()
assert.are.equal("hi", utils.trim(" hi "))
end)
end)Ciclos rápidos de retorno
O verdadeiro poder dos testes está na velocidade. Executar um conjunto completo leva segundos, muito menos tempo do que percorrer manualmente um aplicativo clicando em suas telas.
Você pode até executar o busted no modo de observação ou direcioná-lo a um único arquivo para manter o retorno rápido durante o desenvolvimento.
-- run only one file
-- busted spec/calculator_spec.luaDetectando regressões
Uma regressão é um erro que reaparece em um código que costumava funcionar. Quando encontrar um erro, a melhor prática é escrever primeiro um teste que o reproduza.
Depois que o teste falhar, corrija o código até ele ser aprovado. Esse teste passa a proteger contra o retorno do erro.
it("handles empty input", function()
assert.are.equal(0, calc.sum({}))
end)O que torna um bom teste
Bons testes são rápidos, isolados e determinísticos. Eles não devem depender de rede, tempo ou valores aleatórios, a menos que esses fatores sejam controlados.
Cada teste deve verificar um comportamento claro. Se um teste falhar, o nome deverá informar o que foi quebrado sem que seja necessário ler o corpo.
Pirâmide de testes
A pirâmide de testes sugere muitos testes unitários pequenos, menos testes de integração e pouquíssimos testes de ponta a ponta. Testes unitários são baratos e rápidos, portanto dê preferência a eles.
O busted é principalmente uma ferramenta de testes unitários, embora você também possa usá-lo para testes de integração.
Confiança para mudar
O benefício mais profundo dos testes é a confiança. Com um conjunto de testes confiável, você pode refatorar de forma agressiva, atualizar dependências e entregar mais rapidamente.
Este curso ensina busted desde os fundamentos: estrutura, asserções e dublês de teste, como simulações e espiões.
describe("feature", function()
it("still works after refactor", function()
assert.is_true(feature.enabled())
end)
end)Verificação rápida
Teste sua compreensão sobre por que escrevemos testes.
Recapitulação
Testes são código que verifica código. O busted é a principal estrutura de testes do Lua: ele localiza arquivos _spec.lua e informa sucesso ou falha.
Bons testes são rápidos, isolados e determinísticos. Eles detectam regressões, servem como documentação e dão confiança para alterar o código livremente.
Perguntas Frequentes
A aula “Por que testar” é grátis?
Sim — o texto completo de “Por que testar” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “Por que testar”?
Encontre bugs antes dos usuários. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Por que testar”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Por que testar
- Blocos describe e it
- Asserções
- Mocks e spies