que a aplicação faça a coisa certa do jeito certo (Uncle Bob) • Procurar e encontrar bugs • Evitam perda de dinheiro e comprometimento da imagem da empresa • Podem ser caixa branca ou caixa preta Com verificação de código O código não interessa
Testam unidades individuais de código, como classes e métodos Integração Testam partes da aplicação e sua integração com o resto do sistema (teste de componentes). Identifica erros de interface entre módulos. Sistema São testes tipo caixa preta que analisam a aplicação ponta-a-ponta, baseados nos requisitos de sistema. Seguem roteiros, definidos de acordo com planos de teste pré definidos Caixa branca
software especializado que controla a execução de testes e a comparação de resultados previstos e esperados; Continuous Integration • Prática de engenharia de software em que mudanças no código são imediatamente testadas e reportadas quando adicionadas a uma base de código (quando é feito um pull request)
feito 2. Execução automática dos testes disponíveis 3. É gerado um relatório com o resultado dos testes e a indicação se as alterações podem ser integradas ao código sem problemas
passos anteriores e mais: 4. Após a execução com sucesso dos testes, o código é automaticamente integrado (merge) 5. O relatório gerado indica todas as alterações que foram adicionadas ao código (diff) Obs.: O teste de sistema sempre terá uma parte manual, mas também pode (e deve) ser complementado com testes automatizados que cobrem vários cenários
Comitar código frequentemente; • Categorizar os testes; • Utilizar um servidor integrado de build; • Utilizar mecanismos de feedback contínuo; • Builds de staging.
• Segurança ao refatorar • Serve como documentação • Estimula melhor implementação da programação orientada a objetos Sai mais barato descobrir um bug em estágios iniciais de desenvolvimento
Você precisa alterar seu ambiente para os testes rodarem sem problemas (ex.: alterar configurações da aplicação) • Faz comunicação com algum banco de dados • Utiliza algum recurso de rede • Utiliza seu sistema de arquivos
apenas um comportamento • Um teste não deve depender do resultado de outro • Testar apenas métodos públicos • O nome de cada teste deve indicar o que está sendo testado e qual o resultado esperado (sim, algunsNomesPodemFicarUmTantoGrandes) • Usar testes parametrizados sempre que possível Polêmica: usar um único método de assert por teste
o comportamento de objetos reais e substituem as dependências externas nos testes. Stubs Não têm lógica, apenas retornam o que você mandar, basicamente com reusultados hard coded Fakes Mais próximos da implementação de objetos reais, possuem lógica e são capazes de manter um estado Mocks Objetos baseados em expectativas e que simulam comportamento, testam interações entre objetos
e descrevem o que o sistema faz, analisando as saídas de acordo com as entradas, baseados nas especificações de negócio. Por exemplo: teste de cálculo de frete. Aceitação São testes de validação. Verificam se a aplicação satisfaz as necessidades do cliente. É a última camada de testes, muitas vezes executada quando a aplicação já está em produção. Por exemplo: teste AB. Testes Caixa Preta
quando está sob condições desfavoráveis • Não-funcionais; • Caixa branca ou preta; • De acordo com a definição pen testing e fuzz testing também pode ser considerados testes de estresse.