SlideShare uma empresa Scribd logo
1 de 46
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
CC
Teste de Feature
Exceptions
Dublês
Stubs
Mocks
Spies
Partial Mock
Desacoplando
Martin Fowler que disse...
Não teste código trivial
Não reflita a estrutura
interna do seu código no
seus testes
Single Process
Dusk
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

Mais procurados

Mais procurados (20)

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

Testing laravel

Notas do Editor

  1. Desenvolvedor na Convenia Trabalho com PHP a aproximadamente 7 anos
  2. 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.
  3. 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.
  4. 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
  5. se o código está sob a minha governança, seria legal eu testar ele
  6. 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.
  7. 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
  8. Apesar da baixa complexidade ciclomática do método, o código contém muito comportamento implícito que deve ser testado.
  9. 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.
  10. Dublês é uma classe real que vc substitui por algum motivo, que veremos... A lib mais difundida que temos para isso é o mockery
  11. 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
  12. A vibe do stub é prover o dado
  13. O mock pode prover dados tbm(andReturn) mas sua finalidade principal é gravar as chamadas
  14. 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
  15. 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).
  16. 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
  17. não use new
  18. 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)
  19. Possibilita sqlite in memory possibilita coverage completo facilita gerenciamento em geral elimina fatores e latências externos
  20. 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)