Arquillian JUDCon Brazil

Post on 24-Jan-2015

438 views 0 download

description

JUDCon BR talk - April 19, 2013

Transcript of Arquillian JUDCon Brazil

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

Obrigada!

hannelita@gmail.comTwitter: @hannelita

Perguntas?

Saturday, April 20, 13

Valeu!

Saturday, April 20, 13