Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em código legado
André Ricardo Barreto de Oliveira
(“Arbo”)
Core Software Engineer @ Liferay
Agilidade@Recife 2014
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
Estarei tratando aqui, como podemos utilizar a linguagem java, para acessar bancos de
dados. Os conceitos aqui discutidos, podem ser usados para criar aplicações, que acessem
diferentes base de dados, desde banco de dados relacionais, banco de dados orientados a
objetos ou até arquivos em textos plano. Utilizaremos os padrões de projeto Factory com
DAO(Data Access Object).
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Daniel Makiyama
Slides de curso de Férias ministrado na FEI em 07/2014. 20 horas de pura introdução ao mundo do entity framework code first e Asp.Net MVC 5 com o Visual Studio Express 2013
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
Estarei tratando aqui, como podemos utilizar a linguagem java, para acessar bancos de
dados. Os conceitos aqui discutidos, podem ser usados para criar aplicações, que acessem
diferentes base de dados, desde banco de dados relacionais, banco de dados orientados a
objetos ou até arquivos em textos plano. Utilizaremos os padrões de projeto Factory com
DAO(Data Access Object).
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Daniel Makiyama
Slides de curso de Férias ministrado na FEI em 07/2014. 20 horas de pura introdução ao mundo do entity framework code first e Asp.Net MVC 5 com o Visual Studio Express 2013
Paralelize seus testes web e mobile para ter feedbacks mais rápidosElias Nogueira
Workshop ministrado no Agile Brazil 2018 sobre criação da abordagem de testes paralelos para web e mobile no dia 05/10/2018. Repositório em https://github.com/eliasnogueira/workshop-ab-2018
Um workshop que eu e Dherik Barison fizemos para levantar alguns pontos sobre como escrever bons testes, também levantamos alguns argumentos sobre o que existe no mundo de sotfware quando o tema é Testes, um workshop para trazer discussões das pessoas que o assistiram, para que conseguíssemos articular os assuntos de uma forma aberta, trazendo muitas vezes mais questionamentos do que respostas para os participantes
=D
De a máxima cobertura nos seus testes de APIElias Nogueira
Palestra ministrada no Reginonal Scrum Gathering Rio 2019 no dia 27/06/2019 sobre como dar uma cobertura de testes para uma API além do teste unitário e de integração, com um foco totalmente prático e com execução em pipeline.
DevOps Summit Brasil - O que não te contaram sobre Agile TestingSamanta Cicilia
A comunidade vem falando sobre Agile Testing já faz algum tempo. Termos como Testes Automatizados e Integração Contínua já estão no sangue dos times, mas isso é suficiente? Agile Testing é muito mais que apenas automatizar testes: é enfrentar os desafios e propor soluções que agreguem valor ao produto. Nessa palestra vamos falar de alguns desafios: - Estratégias para data setup em projetos de automação - Como distribuir (na prática) os testes dentro da Pirâmide de Automação de Testes - Desafios que já enfrentamos (por exemplo: como automatizar um login de aplicativo que precisa de um token que chega por SMS?) - Como pensar fora da caixa e agregar valor ao produto usando o mindset de testes
Uma palestra para explorar o Google App Engine (GAE), uma plataforma de desenvolvimento e hospedagem de aplicações web na nuvem. Aplicativos fáceis de criar, manter e escalar.
Palestrante: Carlos Duarte do Nascimento
Matemático pelo IME/USP e Gerente de Produto no Apontador, faz "artesanato" de software há 20 anos, defendendo plataformas e conteúdo livres.
[Video: http://www.youtube.com/watch?feature=player_detailpage&v=nzo9dcCMi-4#t=1169s ] Palestra que introduz o desenvolvimento de aplicativos na plataforma do Google de forma pragmática, apresentada na 5a. edição (2012) do Campus Party (#cpbr5)
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e WebdriverJúlio de Lima
Slides da palestra que seria ministrada no 38º GURU SP, evento promovido pelo grupo de usuários Ruby de São Paulo no dia 07 de novembro de 2015.
Nesta palestra, apresento os frameworks Cucumber e WebDriver, usados para automação de testes em aplicações web usando BDD.
Palestra sobre técnicas e fases de testes, e informações sobre boas e más práticas comuns ao utilizar JUnit para testes de unidade.
Explica também as principais anotações do framework JUnit, e a anotação disponibilizada na versão 4.7: @Rule
Workshop Elasticsearch - Android Dev Conference 2016Thiago Barradas
Workshop apresentado no Android Dev Conference de 2016, um evento da iMasters. O Workshop foi uma apresentação sobre a tecnologia Elasticsearch na versão 2.X e abordando exemplos práticos. A duração da palestra foi de 2h, como era a última e o público pediu, estendemos com mais conteúdo prático. a duração real foi de 2h40.
Paralelize seus testes web e mobile para ter feedbacks mais rápidosElias Nogueira
Workshop ministrado no Agile Brazil 2018 sobre criação da abordagem de testes paralelos para web e mobile no dia 05/10/2018. Repositório em https://github.com/eliasnogueira/workshop-ab-2018
Um workshop que eu e Dherik Barison fizemos para levantar alguns pontos sobre como escrever bons testes, também levantamos alguns argumentos sobre o que existe no mundo de sotfware quando o tema é Testes, um workshop para trazer discussões das pessoas que o assistiram, para que conseguíssemos articular os assuntos de uma forma aberta, trazendo muitas vezes mais questionamentos do que respostas para os participantes
=D
De a máxima cobertura nos seus testes de APIElias Nogueira
Palestra ministrada no Reginonal Scrum Gathering Rio 2019 no dia 27/06/2019 sobre como dar uma cobertura de testes para uma API além do teste unitário e de integração, com um foco totalmente prático e com execução em pipeline.
DevOps Summit Brasil - O que não te contaram sobre Agile TestingSamanta Cicilia
A comunidade vem falando sobre Agile Testing já faz algum tempo. Termos como Testes Automatizados e Integração Contínua já estão no sangue dos times, mas isso é suficiente? Agile Testing é muito mais que apenas automatizar testes: é enfrentar os desafios e propor soluções que agreguem valor ao produto. Nessa palestra vamos falar de alguns desafios: - Estratégias para data setup em projetos de automação - Como distribuir (na prática) os testes dentro da Pirâmide de Automação de Testes - Desafios que já enfrentamos (por exemplo: como automatizar um login de aplicativo que precisa de um token que chega por SMS?) - Como pensar fora da caixa e agregar valor ao produto usando o mindset de testes
Uma palestra para explorar o Google App Engine (GAE), uma plataforma de desenvolvimento e hospedagem de aplicações web na nuvem. Aplicativos fáceis de criar, manter e escalar.
Palestrante: Carlos Duarte do Nascimento
Matemático pelo IME/USP e Gerente de Produto no Apontador, faz "artesanato" de software há 20 anos, defendendo plataformas e conteúdo livres.
[Video: http://www.youtube.com/watch?feature=player_detailpage&v=nzo9dcCMi-4#t=1169s ] Palestra que introduz o desenvolvimento de aplicativos na plataforma do Google de forma pragmática, apresentada na 5a. edição (2012) do Campus Party (#cpbr5)
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e WebdriverJúlio de Lima
Slides da palestra que seria ministrada no 38º GURU SP, evento promovido pelo grupo de usuários Ruby de São Paulo no dia 07 de novembro de 2015.
Nesta palestra, apresento os frameworks Cucumber e WebDriver, usados para automação de testes em aplicações web usando BDD.
Palestra sobre técnicas e fases de testes, e informações sobre boas e más práticas comuns ao utilizar JUnit para testes de unidade.
Explica também as principais anotações do framework JUnit, e a anotação disponibilizada na versão 4.7: @Rule
Workshop Elasticsearch - Android Dev Conference 2016Thiago Barradas
Workshop apresentado no Android Dev Conference de 2016, um evento da iMasters. O Workshop foi uma apresentação sobre a tecnologia Elasticsearch na versão 2.X e abordando exemplos práticos. A duração da palestra foi de 2h, como era a última e o público pediu, estendemos com mais conteúdo prático. a duração real foi de 2h40.
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em código legado
1. Onde nenhum desenvolvedor
jamais testou:
Introduzindo testes unitários
em código legado
André Ricardo Barreto de Oliveira
(“Arbo”)
Core Software Engineer @ Liferay
Agilidade@Recife 2014
4. Em várias empresas perto de você:
"O Gigantesco Projeto
Feito Sem Agile"
10+ anos em produção
milhares de classes
… e crescendo!
milhões de linhas
de código desktop / web / mobile dúzias de frameworks
7. Introduzindo
testes
em código
legado
QA Testes
Manuais Selenium
Desenvolvedores
Banco de Dados
Spring
Runner
customizado
8. Introduzindo
testes
em código
legado
QA Testes
Manuais Selenium
Desenvolvedores
Banco de Dados
Spring
Runner
customizado
?
9. Manual Prático
de Paraquedismo
"In the industry, legacy code
is slang for difficult-‐to-‐change
code that we don't understand.
!
To me, legacy code
is simply code without tests."
!
-‐ Michael C. Feathers
10. Testes de Caracterização
Classe não tem testes?
Escreva um teste que apenas
documenta o comportamento atual.
19. Alternativa 1
1. Estudar a documentação do framework
2. Instalar / importar / emprestar uma base de dados
20. Alternativa 1
1. Estudar a documentação do framework
2. Instalar / importar / emprestar uma base de dados
3. Popular a base com os dados de teste
21. Alternativa 1
1. Estudar a documentação do framework
2. Instalar / importar / emprestar uma base de dados
3. Popular a base com os dados de teste
4. Logar na base
22. Alternativa 1
1. Estudar a documentação do framework
2. Instalar / importar / emprestar uma base de dados
3. Popular a base com os dados de teste
4. Logar na base
5. Rodar o teste
24. Quando você pode alterar
a classe de negócio...
public MassMailingService(
Settings settings) // interface
{
this.limit = settings.getLimit();
}
25. @Test
public void whatcangowrong()
{
Settings s =
Mockito.mock(Settings.class);
Mockito.when(s.getLimit())
.thenReturn(42);
new MassMailingService(s);
}
26. Quando você não pode
alterar a classe de negócio...
@Test
public void whatcangowrong()
{
PowerMockito.mockStatic(
SettingsFromDatabaseService.class);
!
PowerMockito.stub(method(
SettingsFromDatabaseService.class, "getLimit"))
.toReturn(42);
!
new MassMailingService();
}
27. Quando você não pode
alterar a classe de negócio...
@Test
public void whatcangowrong()
{
PowerMockito.mockStatic(
SettingsFromDatabaseService.class);
!
PowerMockito.stub(method(
SettingsFromDatabaseService.class, "getLimit"))
.toReturn(42);
!
new MassMailingService();
}
28.
29.
30. public class MassMailingServiceTest
{
!
@Test
public void send()
{
new MassMailingService().send(
new Message("Hello"),
"andre.oliveira@liferay.com",
"andre@arbo.com.br");
}
!
}
31. new MassMailingService().send(
new Message("Hello"),
"andre.oliveira@liferay.com",
"andre@arbo.com.br");
30 segundos depois…
Você possui 1 (uma) nova
mensagem em sua caixa postal
Você possui 1 (uma) nova
mensagem em sua caixa postal
37. if (service.result() > 5) { /* caso especial */ }
@Test public void happyDay() {
when(service.result()).thenReturn(1);
// do it + assert happy day
}
!
@Test public void casoEspecial() {
when(service.result()).thenReturn(42);
// do it + assert caso especial
}
Condicionais e casos especiais
Cada if branch deriva um caso de teste
38. try { service.danger(); }
catch (OpaException e) { /* caso especial */ }
!
@Test public void sorryDay() {
when(service.danger())
.thenThrow(OpaException.class);
// do it + assert caso especial
}
Tratamento de exceções
Cada catch branch deriva um caso de teste
39. if (pessoa.idade() < 0) {
throw new IdadeNegativaException();
}
!
@Expected(IdadeNegativaException.class)
@Test public void wtf() {
when(pessoa.idade()).thenReturn(-99);
// do it (vai lançar a exception)
}
Validações
Simulando entradas impossíveis com mocks
40. Resultado: todos os branches de execução
guardados por testes...
... e Coragem para evoluir
código legado com Agile.
41. Happy testing! André de Oliveira
“Arbo”
twiKer.com/arbocombr
andre.oliveira@liferay.com
github.com/arboliveira/unit-‐tests-‐with-‐isolaLon
slidesha.re/1xCS1uY