Upload
hanneli-tavante
View
438
Download
0
Embed Size (px)
DESCRIPTION
JUDCon BR talk - April 19, 2013
Citation preview
Testes Automatizados!Saturday, April 20, 13
Saturday, April 20, 13
Olá!
Saturday, April 20, 13
Olá!
• Hanneli (‘H’ mudo)
Saturday, April 20, 13
Olá!
• Hanneli (‘H’ mudo)
• @hannelita
Saturday, April 20, 13
Olá!
• Hanneli (‘H’ mudo)
• @hannelita
• Dev
Saturday, April 20, 13
Olá!
• Hanneli (‘H’ mudo)
• @hannelita
• Dev
• Viciada em café
Saturday, April 20, 13
Sessão descarrego
Saturday, April 20, 13
Quem nunca...
Saturday, April 20, 13
Mexeu no código de outra pessoa?
Saturday, April 20, 13
Saturday, April 20, 13
O que aconteceu?
• a.
• b.
• c.
Saturday, April 20, 13
Você confia 100% no código que você
escreveu?
Saturday, April 20, 13
Saturday, April 20, 13
Apostas
• a. Aposto minha vida
• b. Aposto 100 reais
• Aposto 1 sorvete
• Vou ao banheiro, volto já
Saturday, April 20, 13
Balanço do dia
Saturday, April 20, 13
Saturday, April 20, 13
@Statelesspublic class BalancoBean implements Balanco {
}Saturday, April 20, 13
@Statelesspublic class BalancoBean implements Balanco {
}Saturday, April 20, 13
@Statelesspublic class BalancoBean implements Balanco {
}
public String balanco(List<BigDecimal> valores){
}
Saturday, April 20, 13
@Statelesspublic class BalancoBean implements Balanco {
}
public String balanco(List<BigDecimal> valores){
}
BigDecimal balanco = new BigDecimal("0.0");for (BigDecimal valor : valores) { balanco.add(valor);}if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo";} else { return "negativo";}
Saturday, April 20, 13
@Statelesspublic class BalancoBean implements Balanco {
}
public String balanco(List<BigDecimal> valores){
}
BigDecimal balanco = new BigDecimal("0.0");for (BigDecimal valor : valores) { balanco.add(valor);}if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo";} else { return "negativo";}
Saturday, April 20, 13
@Statelesspublic class BalancoBean implements Balanco {
}
public String balanco(List<BigDecimal> valores){
}
BigDecimal balanco = new BigDecimal("0.0");for (BigDecimal valor : valores) { balanco.add(valor);}if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo";} else { return "negativo";}
Saturday, April 20, 13
@Statelesspublic class BalancoBean implements Balanco {
}
public String balanco(List<BigDecimal> valores){
}
BigDecimal balanco = new BigDecimal("0.0");for (BigDecimal valor : valores) { balanco.add(valor);}if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo";} else { return "negativo";}
Saturday, April 20, 13
@Statelesspublic class BalancoBean implements Balanco {
}
public String balanco(List<BigDecimal> valores){
}
BigDecimal balanco = new BigDecimal("0.0");for (BigDecimal valor : valores) { balanco.add(valor);}if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo";} else { return "negativo";}
Saturday, April 20, 13
@Statelesspublic class BalancoBean implements Balanco {
}
public String balanco(List<BigDecimal> valores){
}
BigDecimal balanco = new BigDecimal("0.0");for (BigDecimal valor : valores) { balanco.add(valor);}if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo";} else { return "negativo";}
Saturday, April 20, 13
@Statelesspublic class BalancoBean implements Balanco {
}
public String balanco(List<BigDecimal> valores){
}
BigDecimal balanco = new BigDecimal("0.0");for (BigDecimal valor : valores) { balanco.add(valor);}if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo";} else { return "negativo";}
Saturday, April 20, 13
Está tudo certo?
Saturday, April 20, 13
Saturday, April 20, 13
Imagine os seguintes valores
Saturday, April 20, 13
Imagine os seguintes valores
136
Saturday, April 20, 13
Imagine os seguintes valores
136 +148
Saturday, April 20, 13
Imagine os seguintes valores
136 +148 -136
Saturday, April 20, 13
Imagine os seguintes valores
136 +148 -136 -148
Saturday, April 20, 13
Imagine os seguintes valores
136 +148 -136 -148 =0
Saturday, April 20, 13
Imagine os seguintes valores
136 +148 -136 -148 =0
Saturday, April 20, 13
Imagine os seguintes valores
136 +148 -136 -148
Isso é positivo ou negativo?
=0
Saturday, April 20, 13
if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo";} else { return "negativo";}
Saturday, April 20, 13
if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo";} else { return "negativo";}
Saturday, April 20, 13
if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo";} else { return "negativo";}
Falta um if
Saturday, April 20, 13
if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo";} else { return "negativo";}
Falta um if
if (balanco.compareTo(BigDecimal.ZERO) == 0){ return "nulo";}
Saturday, April 20, 13
if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo";} else { return "negativo";}
Falta um if
if (balanco.compareTo(BigDecimal.ZERO) == 0){ return "nulo";}
Saturday, April 20, 13
if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo";} else { return "negativo";}
Falta um if
if (balanco.compareTo(BigDecimal.ZERO) == 0){ return "nulo";}
Saturday, April 20, 13
if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo";} else { return "negativo";}
Falta um if
if (balanco.compareTo(BigDecimal.ZERO) == 0){ return "nulo";}
Saturday, April 20, 13
Saturday, April 20, 13
Saturday, April 20, 13
if (balanco.compareTo(BigDecimal.ZERO) > 0){ return "positivo"; } else { if (balanco.compareTo(BigDecimal.ZERO) == 0){ return "nulo"; } else { return "negativo"; } }
Saturday, April 20, 13
Código mal estruturado!
Saturday, April 20, 13
Saturday, April 20, 13
Por que há tantos bugs?
Saturday, April 20, 13
Por que há tantos bugs?
Saturday, April 20, 13
Não há mágica!
Saturday, April 20, 13
Não há mágica!@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ [..] }
}
Saturday, April 20, 13
Não há mágica!@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ [..] }
}
Saturday, April 20, 13
Não há mágica!@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ [..] }
}
Saturday, April 20, 13
Não há mágica!@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ [..] }
}
136+148
Saturday, April 20, 13
Não há mágica!@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ [..] }
}
136+148
136-148
Saturday, April 20, 13
Não há mágica!@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ [..] }
}
136+148
136-148136-136
Saturday, April 20, 13
Não há mágica!
@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ [..] }
}
136+148
136-148136-136
Saturday, April 20, 13
Não há mágica!@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ [..] }
}
136+148
136-148136-136
Saturday, April 20, 13
Não há mágica!@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ [..] }
}
136+148
136-148136-136
Saturday, April 20, 13
Não há mágica!@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ [..] }
}
136+148
136-148136-136
Saturday, April 20, 13
Não há mágica!@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ [..] }
}
136+148
136-148136-136
Saturday, April 20, 13
Saturday, April 20, 13
Testes Automatizados
Saturday, April 20, 13
JUnit
Saturday, April 20, 13
JUnitSimplificado
Saturday, April 20, 13
JUnit
@Testpublic void testMultiply() {
}
Simplificado
Saturday, April 20, 13
JUnit
@Testpublic void testMultiply() {
}
Simplificado
assertEquals
Saturday, April 20, 13
JUnit
@Testpublic void testMultiply() {
}
Simplificado
assertEquals( balanco(136, -136));
Saturday, April 20, 13
JUnit
@Testpublic void testMultiply() {
}
Simplificado
assertEquals( balanco(136, -136));“nulo”,
Saturday, April 20, 13
Quem faz testes?
Saturday, April 20, 13
Vale a pena?
Saturday, April 20, 13
Pontos positivos
Saturday, April 20, 13
Pontos positivos
• Minimiza bugs
Saturday, April 20, 13
Pontos positivos
• Minimiza bugs
• Código mais estruturado
Saturday, April 20, 13
Pontos positivos
• Minimiza bugs
• Código mais estruturado
• Chance de quebrar o código diminui
Saturday, April 20, 13
Problemas
Saturday, April 20, 13
Problemas
• Não sabia disso
Saturday, April 20, 13
Problemas
• Não sabia disso
• Pode ser complicado pensar no teste em alguns casos
Saturday, April 20, 13
Problemas
• Não sabia disso
• Pode ser complicado pensar no teste em alguns casos
• Gasta tempo
Saturday, April 20, 13
Complicado escrever testes?
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
Como ?
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
Como ?
BalancoBean bean = new BalancoBean();
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
Como ?
BalancoBean bean = new BalancoBean();
Saturday, April 20, 13
Mesmo sem EJB
Saturday, April 20, 13
@SessionScopedpublic class BalancoBean {
//seu código aqui
}
Saturday, April 20, 13
@SessionScopedpublic class BalancoBean {
//seu código aqui
}
JSF + CDI
Saturday, April 20, 13
Classes que não devem ser instanciadas
Saturday, April 20, 13
Classes que não devem ser instanciadas
EJBs
Saturday, April 20, 13
Classes que não devem ser instanciadas
EJBsManagedBean
Saturday, April 20, 13
Classes que não devem ser instanciadas
EJBsManagedBeanWeb Services
Saturday, April 20, 13
Classes que não devem ser instanciadas
EJBsManagedBeanWeb Services
Saturday, April 20, 13
Classes que não devem ser instanciadas
EJBsManagedBeanWeb Services
CDI Beans
Saturday, April 20, 13
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
BalancoBean bean = new AlgumaCoisaMeDeAInstancia();
Saturday, April 20, 13
Saturday, April 20, 13
AlgumaCoisaMeDeAInstancia
Saturday, April 20, 13
Mock
AlgumaCoisaMeDeAInstancia
Saturday, April 20, 13
Mock
AlgumaCoisaMeDeAInstancia
Frameworks
Saturday, April 20, 13
OpenEJB
Saturday, April 20, 13
Saturday, April 20, 13
• Baixar OpenEJB
Saturday, April 20, 13
• Baixar OpenEJB
• Escrever o teste
Saturday, April 20, 13
• Baixar OpenEJB
• Escrever o teste
• Server a parte
Saturday, April 20, 13
• Baixar OpenEJB
• Escrever o teste
• Server a parte
Saturday, April 20, 13
Saturday, April 20, 13
JBoss
Saturday, April 20, 13
JBoss@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ BigDecimal balanco = new BigDecimal("0.0"); [..] }
}
Saturday, April 20, 13
JBoss@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ BigDecimal balanco = new BigDecimal("0.0"); [..] }
}
Saturday, April 20, 13
JBoss@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ BigDecimal balanco = new BigDecimal("0.0"); [..] }
}
OpenEJB
Saturday, April 20, 13
Saturday, April 20, 13
Saturday, April 20, 13
Saturday, April 20, 13
Saturday, April 20, 13
Classloader
Saturday, April 20, 13
Saturday, April 20, 13
JBoss 5
Saturday, April 20, 13
JBoss 5
+
Saturday, April 20, 13
JBoss 5
+
Seam 2
Saturday, April 20, 13
JBoss 5
+
Seam 2
+
Saturday, April 20, 13
JBoss 5
+
Seam 2
+
EJB
Saturday, April 20, 13
JBoss 5
+
Seam 2
+
EJB
+
Saturday, April 20, 13
JBoss 5
+
Seam 2
+
EJB
+
Maven
Saturday, April 20, 13
JBoss 5
+
Seam 2
+
EJB
+
Maven
+
Saturday, April 20, 13
JBoss 5
+
Seam 2
+
EJB
+
Maven
+
OpenEJB
Saturday, April 20, 13
JBoss 5
+
Seam 2
+
EJB
+
Maven
+
OpenEJB
=Saturday, April 20, 13
Saturday, April 20, 13
Saturday, April 20, 13
Maven?
Saturday, April 20, 13
Falta de ferramentas de testes
Saturday, April 20, 13
Falta de ferramentas de testes
Teste rápido!
Saturday, April 20, 13
JBoss AS 7
Saturday, April 20, 13
E os Mocks?
Saturday, April 20, 13
JEE6
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
BalancoBean bean;
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
BalancoBean bean;@Inject
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
BalancoBean bean;@Inject
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
BalancoBean bean;@Inject
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
BalancoBean bean;
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
BalancoBean bean;@Inject
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
BalancoBean bean;@Inject
Saturday, April 20, 13
@Testpublic void testMultiply() {
}
assertEquals( balanco(136, -136));“nulo”,
BalancoBean bean;@Inject
Saturday, April 20, 13
Arquillian
Saturday, April 20, 13
public class BalancoTest {
}
Saturday, April 20, 13
public class BalancoTest {
}
@RunWith(Arquillian.class)
Saturday, April 20, 13
public class BalancoTest {
}
@RunWith(Arquillian.class)
@InjectBalancoBean balancoBean;
Saturday, April 20, 13
public class BalancoTest {
}
@RunWith(Arquillian.class)
@InjectBalancoBean balancoBean;
@Testpublic void should_balanco_be_null() { Assert.assertEquals
(“nulo”, balancoBean.balanco (136, -136)); }
Saturday, April 20, 13
Saturday, April 20, 13
@Deployment public static JavaArchive createDeployment() { return ShrinkWrap.create(JavaArchive.class) .addClass(BalancoBean.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); }
public class BalancoTest {
}
Saturday, April 20, 13
Saturday, April 20, 13
Saturday, April 20, 13
JBoss Rodando
Saturday, April 20, 13
JBoss Rodando@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ BigDecimal balanco = new BigDecimal("0.0"); [..] }
}
Saturday, April 20, 13
JBoss Rodando@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ BigDecimal balanco = new BigDecimal("0.0"); [..] }
}
Saturday, April 20, 13
JBoss Rodando@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ BigDecimal balanco = new BigDecimal("0.0"); [..] }
}
Arquillian de Testes
Saturday, April 20, 13
JBoss Rodando@Statelesspublic class BalancoBean implements Balanco { public String balanco(List<BigDecimal> valores){ BigDecimal balanco = new BigDecimal("0.0"); [..] }
}
Arquillian de Testes
Saturday, April 20, 13
Referências
• https://github.com/arquillian/arquillian-examples
• http://arquillian.org/
• BECK, Kent. Test Driven Development.
Saturday, April 20, 13
Valeu!
Saturday, April 20, 13