SlideShare uma empresa Scribd logo
Testing Laravel
@jleonardolemos
O que é uma suite de testes?
222
Pirâmide de
testes
Porque não é tão difundido?
O que testar?
Teste unitário
Testing laravel
Testing laravel
Testing laravel
CC
Teste de Feature
Testing laravel
Testing laravel
Testing laravel
Testing laravel
Exceptions
Testing laravel
Dublês
Testing laravel
Stubs
Testing laravel
Mocks
Testing laravel
Spies
Testing laravel
Partial Mock
Testing laravel
Testing laravel
Desacoplando
Testing laravel
Testing laravel
Martin Fowler que disse...
Não teste código trivial
Testing laravel
Não reflita a estrutura
interna do seu código no
seus testes
Testing laravel
Testing laravel
Single Process
Testing laravel
Dusk
Testing laravel
Seu código de teste é tão
importante quanto seu
código de produção
Testes no pipeline
https://martinfowler.com/articles/practical-test-pyramid.html
https://laravel.com/docs/8.x/testing
https://www.youtube.com/watch?v=BNXPRIscfQ8
VLW!!!

Mais conteúdo relacionado

PDF
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
PDF
Como testar sua aplicação Android com Robotium
PPTX
CNQS - Testes Automatizados & Continuous Delivery
PDF
Robot Framework - principais características
PDF
Testes com TestLink e Selenium
PPTX
[DevOps Carioca] Testes Automatizados
PDF
Teste de aplicações web com selenium
PPTX
Palestra TDD - TDC - 2016
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
Como testar sua aplicação Android com Robotium
CNQS - Testes Automatizados & Continuous Delivery
Robot Framework - principais características
Testes com TestLink e Selenium
[DevOps Carioca] Testes Automatizados
Teste de aplicações web com selenium
Palestra TDD - TDC - 2016

Mais procurados (20)

PPSX
DevQA - Da zona de conforto ao comprometimento com a Qualidade
PPTX
Behavior-Driven Development (BDD) - DevOps Summit 2016
PPT
Desenvolvimento Guiado Por Testes
PDF
MTC - Automatizando Visual Regression Testing
PDF
Palestra TDD Javou! #08 2016
PDF
Design Factory em testes
PPTX
Assespro pr-workshop-robot framework
PDF
Testes Unitários no Android
PDF
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
PDF
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
PPTX
Testes de interfaces Web com Selenium
PPTX
PDF
Testando aplicações Flex com Selenium
PDF
TOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
PDF
TDD com Python
PDF
Automação de Teste com Robotium - Tche Mobile 2014
PDF
Selenium Workshop
PPT
Automação de Testes: Ferramentas e Aplicação com Integração Contínua
PPT
Treinamento Testes Unitários - parte 2
PPTX
TDD - Desenvolvendo softwares orientado à testes
DevQA - Da zona de conforto ao comprometimento com a Qualidade
Behavior-Driven Development (BDD) - DevOps Summit 2016
Desenvolvimento Guiado Por Testes
MTC - Automatizando Visual Regression Testing
Palestra TDD Javou! #08 2016
Design Factory em testes
Assespro pr-workshop-robot framework
Testes Unitários no Android
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
Testes de interfaces Web com Selenium
Testando aplicações Flex com Selenium
TOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
TDD com Python
Automação de Teste com Robotium - Tche Mobile 2014
Selenium Workshop
Automação de Testes: Ferramentas e Aplicação com Integração Contínua
Treinamento Testes Unitários - parte 2
TDD - Desenvolvendo softwares orientado à testes
Anúncio

Último (7)

PDF
apresentacao introducao computacao ead.pdf
PDF
Dos requisitos ao código: como criar código rastreável em PHP
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
PPTX
Mapeamento de Objeto para Tabela Relacional
PPTX
Curso de Windows 11 resumido na prática.pptx
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
PDF
Evolução em código: algoritmos genéticos com PHP
apresentacao introducao computacao ead.pdf
Dos requisitos ao código: como criar código rastreável em PHP
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Mapeamento de Objeto para Tabela Relacional
Curso de Windows 11 resumido na prática.pptx
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
Evolução em código: algoritmos genéticos com PHP
Anúncio

Notas do Editor

  • #3: Desenvolvedor na Convenia Trabalho com PHP a aproximadamente 7 anos
  • #4: Um outro programa que testa o seu programa. Não é uma prática nova, mas evoluiu muito com o tempo e aprendemos o que não fazer e o que não pode faltar. Antigamente era possível encontrar equipes separadas escrevendo os códigos de produção e teste, isso se mostrou bem ineficiente e acabou morrendo com o tempo.
  • #5: Jargão de testes amplo e sem consenso Essa pirâmide pode variar um pouco dependendo do tipo de aplicação, os frameworks se desenvolveram muito em ferramentas de integração(laravel dusk) e percebo o mercado invertendo essa pirâmide aos poucos.
  • #6: Apesar das vantagens absurdas, testar é muito caro, não envolve somente tempo, envolve formação Encontra bastante lugar em times de produtos Geralmente é deixado de lado em fábricas e consultorias e qualquer coisa que busque vender projetos como se fossem produtos(sinceramente não estão errados) O custo não se justifica fora do contexto de sistema(site, institucional, blog....) É uma honra trabalhar em um lugar que tem essa prática tão difundida
  • #7: se o código está sob a minha governança, seria legal eu testar ele
  • #9: O componente pode ser 3 coisas(um comando, uma consulta, uma função) É legal tentarmos manter as coisas funcionais, porém aplicações web são focadas em I/O e a maior parte dos - Alguns componentes mesclam lógicas funcionais e códigos que causam side efects, seria uma boa ideia extrair o funcional.
  • #12: A complexidade ciclomática está diretamente relacionada com o número de testes que você escreve para cobrir integralmente o código, a aplicação deve ter o número de testes aproximadamente igual ao numero de classes x CC média
  • #14: Apesar da baixa complexidade ciclomática do método, o código contém muito comportamento implícito que deve ser testado.
  • #18: seria interessante testar as exceptions que a classe dispara, o componente fala com o mundo externo através de exceptions, então devemos garantir a consistência dessa comunicação, é como se as exceptions que o código dispara fizesse parte da interface o objeto, elas inclusive podem ser declaradas com annotations. se vc testar um endpoint Http, a forma como o endpoint vai falar com vc são status code, essa é justamente a função do exception handler, ele transforma uma exception em um status code, um erro de componente em um erro de endpoint, se vc realmente precisar verificar uma exception terá que desabilitar o exception handler.
  • #20: Dublês é uma classe real que vc substitui por algum motivo, que veremos... A lib mais difundida que temos para isso é o mockery
  • #21: stubs x mocks x spies x fakes x dummies O mockery, assim como a maioria das libs de teste não difere os tipos de dublês(com exceção do spie), na própria doc ele não faz questão nem de diferenciar um do outro, acredito que isso ocorra porque na prática existe pouca diferença entre um e outro em questão de setup. classe final não pode ser mockada
  • #22: A vibe do stub é prover o dado
  • #24: O mock pode prover dados tbm(andReturn) mas sua finalidade principal é gravar as chamadas
  • #25: Se vc passar algum parâmetro para a função seria legal fazer o assert desse parâmetro, fica mais seguro Mockery::on é utilizado para assert em dados complexos
  • #27: Particularmente não encontro muito uso para ele no meu dia a dia. No mockery ele é similar ao mock, porém ele permite que você faça asserts de maneira mais convencional(arrange/act/assert). Você não pode definir tipos de retorno e ele é mais permissivo em relação sequência das chamadas. O mockery pode não ter a implementação mais conceitualmente correta de spie, na teoria o spie é um dublê que "envelopa" a classe original(a classe é utilizada de verdade) e assiste os métodos sendo chamados, com a possibilidade de testar algum estado da classe(propriedade).
  • #29: Desacoplar métodos de uma mesma classe pode diminuir o número de testes necessários para cobrir aquela classe, e simplifica-los também
  • #32: não use new
  • #33: utilise Dependency injection utilize app() tente não utilizar estado em services tente não utilizar services em jobs(Closures não podem ser serializáveis e mocks tem closures)
  • #40: Possibilita sqlite in memory possibilita coverage completo facilita gerenciamento em geral elimina fatores e latências externos
  • #42: Para api e front separados com repo separados Para api e front separados no mesmo repo(sendo servidos por uma rota) Para api e front juntos(não SPA) não rola coverage no rola sqlite in memory complicado por natureza(transições do front e sleeps são necessários)