Testes de Unidade com JUnit
               Robinson Castilho – JUGMS
                 castilho@bacarin.com.br
               http://www.jugms.com.br
Apresentação
●
    Robinson Castilho
●
    Desenvolvedor C++ e Java desde 2001
●
    Sun Certified Java Programmer
●
    Sun Certified Web Component Developer
●
    Fundador da Bacarin Software
●
    Instrutor SENAC/MS
●
    Coordenador do JUGMS
Certa vez fui
convidado...
Certa vez fui
convidado...

 Pilotar novo modelo
             de avião
Avião Moderno
Avião Moderno
             Bonito
Avião Moderno
             Bonito
Inovador
Avião Moderno
             Bonito
Inovador
         Econômico
?
?
?
?
Um detalhe:
o avião nunca...
Um detalhe:
   o avião nunca...
TINHA SIDO TESTADO
Olha o Avião
Roubada?
Roubada?


   SIM
Roubada?


SIM
Pense no mundo real
Pense no mundo real
Cliente recebe um software:
Pense no mundo real
Cliente recebe um software:
                              Moderno
Pense no mundo real
Cliente recebe um software:
                               Moderno
                              Inovador
Pense no mundo real
Cliente recebe um software:
                                  Moderno
                                 Inovador
                              Econômico
Pense no mundo real
Cliente recebe um software:
                                  Moderno
                                 Inovador
                              Econômico
    Nunca foi testado
Roubada?
Roubada?


SIM
Teste seu software
Agenda
Agenda
●
    Importância dos testes
Agenda
●
    Importância dos testes
●
    Técnicas e Fases de testes
Agenda
●
    Importância dos testes
●
    Técnicas e Fases de testes
●
    Testes de Unidade
Agenda
●
    Importância dos testes
●
    Técnicas e Fases de testes
●
    Testes de Unidade
    –   Ferramenta JUnit
Agenda
●
    Importância dos testes
●
    Técnicas e Fases de testes
●
    Testes de Unidade
    –   Ferramenta JUnit
    –   Boas e más Práticas
Agenda
●
    Importância dos testes
●
    Técnicas e Fases de testes
●
    Testes de Unidade
    –   Ferramenta JUnit
    –   Boas e más Práticas
●
    Tomar chopp     :)
Dados não mentem
Dados não mentem
Erros existem:
Dados não mentem
Erros existem:

        1/3 poderiam ser evitados
Dados não mentem
Erros existem:

        1/3 poderiam ser evitados


 50% são detectados em produção
Dados não mentem
Erros existem:

                         1/3 poderiam ser evitados


   50% são detectados em produção


    Prejuízo de US$ ~60 bilhões/ano
Fonte: http://www.nist.gov/public_affairs/releases/n02-10.htm
Para que serve um
      teste?
Verificar que uma
determinada entrada
              produz
            SEMPRE
  uma mesma saída
Como testar
corretamente?
Caixa Preta
Caixa Preta

Não se preocupa com o
          código fonte
Caixa Preta

     Não se preocupa com o
               código fonte
Saídas são coerentes com as
                  entradas?
Caixa Preta

      Não se preocupa com o
                 código fonte
 Saídas são coerentes com as
                    entradas?
Equipe testes (normalmente)
        é diferente da equipe
              implementação
Caixa Branca
Caixa Branca

Trabalha com o código fonte
Caixa Branca

Trabalha com o código fonte
Avalia aspectos:
Caixa Branca

Trabalha com o código fonte
Avalia aspectos:
●
    Teste de condição
●
    Teste de fluxo de dados
●
    Teste de ciclos
●
    Teste de caminho lógico
●
    Código nunca executado...
Fases: Testes de Unidade
Fases: Testes de Unidade
Fases: Testes de Unidade

Testa o código
Fases: Testes de Unidade

Testa o código
Pequenas unidades
Fases: Testes de Unidade

Testa o código
Pequenas unidades
Independentes
Fases: Testes de Unidade

Testa o código
Pequenas unidades
Independentes
(sub-rotinas, trechos)
Teste de Integração
Teste de Integração
Testa a integração interna
            de um sistema
Teste de Integração
Testa a integração interna
            de um sistema
      Verifica se as peças
       do quebra-cabeças
         Estão encaixadas
Teste de Sistema
Teste de Sistema

Ponto de vista
do cliente final
Teste de Sistema

Ponto de vista
do cliente final
Teste de Sistema

Ponto de vista
do cliente final


Simular
ambiente
que o cliente utilizará
Teste de Aceitação
Teste de Aceitação
          Aprovado ou não?
Teste de Aceitação
          Aprovado ou não?
Teste de Aceitação
          Aprovado ou não?
             Grupo restrito
             usuários finais
             simulam o uso
              em produção
Teste de Aceitação
                     Aprovado ou não?
                         Grupo restrito
                         usuários finais
                         simulam o uso
                          em produção
Determina se o sistema satisfaz os
critérios estabelecidos
JUnit
JUnit
automatizar testes de unidade
JUnit
automatizar testes de unidade

             Open Source
JUnit
automatizar testes de unidade

             Open Source

   Largamente Utilizado
JUnit
automatizar testes de unidade

             Open Source

   Largamente Utilizado

Criação rápida de testes
JUnit
          automatizar testes de unidade

                       Open Source

             Largamente Utilizado

          Criação rápida de testes

Diminuir necessidade de depuração
JUnit
                       automatizar testes de unidade

                                    Open Source

                           Largamente Utilizado

                        Criação rápida de testes

            Diminuir necessidade de depuração

Integrável ao Eclipse, Netbeans, Maven...
Utilizando JUnit 4

public class OlaMundoTest {
  @Test
  public void testSoma() {
        assertEquals(10, Calc.soma(7,3));
    }
}
Relatório no Eclipse
JUnit - Ciclo de vida




*DZone RefCardz
@Test

Informa que é um método de teste
Atributos:
●
    expected
●
    timeout
@Before e @After
Métodos executados
antes e após um método de teste (setUp e tearDown)
@Before e @After
Métodos executados
antes e após um método de teste (setUp e tearDown)




     @BeforeClass e @AfterClass
                            Métodos executados
                 antes e após uma classe de teste
Novidades do JUnit 4.7
Novidades do JUnit 4.7
Anotação: @Rule
Novidades do JUnit 4.7
Anotação: @Rule
Redefinir
e adicionar comportamentos
Novidades do JUnit 4.7
Anotação: @Rule
Redefinir
e adicionar comportamentos
Mecanismo de Meta-testes
simples e claro
@Rule
●
    TemporaryFolder: Permite criar pastas e
    arquivos que serão automaticamente deletados
    após o teste
    public static class HasTempFolder {
       @Rule
       public TemporaryFolder folder= new TemporaryFolder();

        @Test
        public void testUsingTempFolder() throws IOException {
           File createdFile= folder.newFile("myfile.txt");
           File createdFolder= folder.newFolder("subfolder");
           // ...
        }
    }
@Rule
●
    ExternalResource: Classe base para Rules que
    necessitam obter recursos externos (socket,
    conexão com SGBD, etc...)
    public static class UsesExternalResource {
        Server myServer = new Server();

        @Rule public ExternalResource resource = new   ExternalResource() {
            @Override
            protected void before() throws Throwable {
                myServer.connect();
            }

             @Override
             protected void after() {
                 myServer.disconnect();
             };
        };

        @Test public void testFoo() {
            new Client().run(myServer);
        }
    }
@Rule
●
    ErrorCollector: Permite que a execução do teste
    continue, coletando todos os erros ocorridos
    public static class UsesErrorCollectorTwice {
        @Rule
        public ErrorCollector collector= new ErrorCollector();

        @Test public void example() {
            collector.addError(new Throwable("first thing went wrong"));
            collector.addError(new Throwable("second thing went wrong"));
        }
    }



●
    Veja mais em: http://www.junit.org/node/574
Boas práticas
Boas práticas
●
    Execute os testes frequentemente
Boas práticas
●
    Execute os testes frequentemente
●
    Escreva um teste para o defeito
    antes de corrigi-lo
Boas práticas
●
    Execute os testes frequentemente
●
    Escreva um teste para o defeito
    antes de corrigi-lo
●
    Escreva testes, não logs para depuração:
    –   System.out.println(...)
    –   logger.info(...)
Más práticas
●
    Múltiplos assertions. Evite isso!
    public class MyTestCase {
     @Test public void testSomething() {
         assertEquals(10, Calc.soma(7,3));
         assertEquals(50, Calc.multiplica(5,10));
         assertEquals(30, Calc.subtrai(50,20));
     }
}
Más práticas
●
    Múltiplos assertions. Forma correta:
public class MyTestCase {



    @Test public void testCondition1() {

        assertEquals(10, Calc.soma(7,3));
    }

    @Test public void testCondition2() {

        assertEquals(50, Calc.multiplica(5,10));
    }

    @Test public void testCondition3() {

        assertEquals(30, Calc.subtrai(50,20));
    }

}
Más práticas
●
    Método errado. Evite!

assertTrue("Os objetos devem ser o mesmo", expected == actual);
assertTrue("Os objetos devem ser iguais", expected.equals(actual));
assertTrue("O objeto deve ser nulo", actual == null);

assertTrue("O objeto não pode ser nulo", actual != null);



Use:

assertSame("Os objetos devem ser o mesmo", expected, actual);
assertEquals("Os objetos devem ser iguais", expected, actual);
assertNull("O objeto deve ser nulo", actual);
assertNotNull("O objeto não pode ser nulo", actual);
Más práticas
●
    Cobertura superficial
    –   Caminho perfeito
    –   Funcionalidades fáceis de testar
    –   Alternativa: Code Coverage Tools
Más práticas
●
    Testes excessivamente complexos
Más práticas
●
    Testes excessivamente complexos
Refatorar até obter:
Más práticas
●
    Testes excessivamente complexos
Refatorar até obter:
    1.Configuração
    2.Declaração dos resultados esperados
    3.Executar método a ser testado
    4.Recuperar resultado
    5.Verificar resultado encontrado X esperado
Más práticas
●
    Capturar exceções Inesperadas
public void testCalculation() {
     try {
         srv.calculate();
         assertEquals(42,srv.getResult());
     }catch(CalculationException ex) {
         Log.error("Calculation caused exception", ex);
     }
}
Más práticas
●
    Forma correta: Não capture exceções
    inesperadas


public void testCalculation() throw CalculationException {
      srv.calculate();
      assertEquals(42,srv.getResult());
}
Más práticas
●   Validando exceções. Forma correta:

@Test(expected=IndexOutOfBoundException.class)
public void testIndexOutOfBoundsException() {
     try {
         ArrayList emptyList = new ArrayList();
         Object o = emptyList.get(0);
     }
}
Más práticas
Más práticas

Não
Más práticas

Não
      escrever
Más práticas

Não
      escrever
                 Testes !!
Reflexão Final
    "Todo programador sabe que é capaz de escrever testes para seu
       código. Poucos escrevem. A resposta universal para a pergunta
    "porque não?" é "Eu estou muito ocupado". Essa atitude torna-se um
     ciclo: quanto mais pressão você sente, menos testes você escreve.
    Quanto menos testes você escreve, menos produtivo você se torna e
       menos estável seu código fica. Quanto menos produtivo você se
                     torna, mais pressão você sente".*




* http://junit.sourceforge.net/doc/testinfected/testing.htm
Sobre o JUGMS
●
    Grupo de usuários Java do MS
●
    Forte atuação em Campo Grande
●
    Participa e promove eventos, palestras e
    reuniões
●
    Visite-nos: http://www.jugms.com.br
Sobre o Javaneiros
●
    Evento sobre todas as vertentes da tecnologia
    Java
●
    + de 500 inscritos em 2008
●
    Edição 2009
    –   14 de novembro de 2009 – Campo Grande/MS
    –   Universidade Unaes
    –   Entrada: 1 kg de alimento
    –   Reservas especiais para caravanas
    –   http://javaneiros.jugms.com.br
Sobre a Bacarin Software
●
    Residente na Incubadora de Empresas da
    UNIDERP
●
    Fornece sistemas web para:
    –   Comércio Eletrônico
    –   Web Sites
    –   Gerenciamento Eletrônico de Documentos
●
    Visite-nos: http://www.bacarin.com.br
Dúvidas?
Bibliografia
●
    http://pt.wikipedia.org/wiki/JUnit
●
    http://www.improveit.com.br/xp/praticas/tdd
●
    http://www.exubero.com/junit/antipatterns.html
●
    http://www.guj.com.br/java.tutorial.artigo.40.1.guj
●
    http://www.junit.org/junit/javadoc/3.8.1/junit/framework/Assert.html
●
    http://junit.sourceforge.net/doc/testinfected/testing.htm
●
    http://www-128.ibm.com/developerworks/opensource
    /library/os-junit/?ca=dgr-lnxw07JUnite
●
    http://pt.wikipedia.org/wiki/Teste_de_software
●
    http://www.slideshare.net/jeveaux/*
●
    http://www.junit.org/node/574
Licença
●
    Este material está licenciado sob a Licença Creative-Commons
    Atribuição-Uso Não-Comercial-Compartilhamento pela mesma
    Licença 2.5 Brasil
●
    Você pode:
     –   Copiar, distribuir, exibir e executar a obra
     –   Criar obras derivadas
●
    Sob as seguintes condições:
     –   Atribuição. Você deve dar crédito ao autor original, da forma especificada pelo
         autor ou licenciante.
     –   Uso Não-Comercial. Você não pode utilizar esta obra com finalidades comerciais.
     –   Compartilhamento pela mesma Licença. Se você alterar, transformar, ou criar
         outra obra com base nesta, você somente poderá distribuir a obra resultante sob
         uma licença idêntica a esta.

Palestra Testes Unidade Com JUnit

  • 1.
    Testes de Unidadecom JUnit Robinson Castilho – JUGMS castilho@bacarin.com.br http://www.jugms.com.br
  • 2.
    Apresentação ● Robinson Castilho ● Desenvolvedor C++ e Java desde 2001 ● Sun Certified Java Programmer ● Sun Certified Web Component Developer ● Fundador da Bacarin Software ● Instrutor SENAC/MS ● Coordenador do JUGMS
  • 3.
  • 4.
    Certa vez fui convidado... Pilotar novo modelo de avião
  • 5.
  • 6.
  • 7.
    Avião Moderno Bonito Inovador
  • 8.
    Avião Moderno Bonito Inovador Econômico
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
    Um detalhe: o avião nunca... TINHA SIDO TESTADO
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
    Pense no mundoreal Cliente recebe um software:
  • 21.
    Pense no mundoreal Cliente recebe um software: Moderno
  • 22.
    Pense no mundoreal Cliente recebe um software: Moderno Inovador
  • 23.
    Pense no mundoreal Cliente recebe um software: Moderno Inovador Econômico
  • 24.
    Pense no mundoreal Cliente recebe um software: Moderno Inovador Econômico Nunca foi testado
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
    Agenda ● Importância dos testes
  • 30.
    Agenda ● Importância dos testes ● Técnicas e Fases de testes
  • 31.
    Agenda ● Importância dos testes ● Técnicas e Fases de testes ● Testes de Unidade
  • 32.
    Agenda ● Importância dos testes ● Técnicas e Fases de testes ● Testes de Unidade – Ferramenta JUnit
  • 33.
    Agenda ● Importância dos testes ● Técnicas e Fases de testes ● Testes de Unidade – Ferramenta JUnit – Boas e más Práticas
  • 34.
    Agenda ● Importância dos testes ● Técnicas e Fases de testes ● Testes de Unidade – Ferramenta JUnit – Boas e más Práticas ● Tomar chopp :)
  • 35.
  • 36.
  • 37.
    Dados não mentem Errosexistem: 1/3 poderiam ser evitados
  • 38.
    Dados não mentem Errosexistem: 1/3 poderiam ser evitados 50% são detectados em produção
  • 39.
    Dados não mentem Errosexistem: 1/3 poderiam ser evitados 50% são detectados em produção Prejuízo de US$ ~60 bilhões/ano Fonte: http://www.nist.gov/public_affairs/releases/n02-10.htm
  • 40.
    Para que serveum teste?
  • 41.
    Verificar que uma determinadaentrada produz SEMPRE uma mesma saída
  • 42.
  • 43.
  • 44.
    Caixa Preta Não sepreocupa com o código fonte
  • 45.
    Caixa Preta Não se preocupa com o código fonte Saídas são coerentes com as entradas?
  • 46.
    Caixa Preta Não se preocupa com o código fonte Saídas são coerentes com as entradas? Equipe testes (normalmente) é diferente da equipe implementação
  • 47.
  • 48.
  • 49.
    Caixa Branca Trabalha como código fonte Avalia aspectos:
  • 50.
    Caixa Branca Trabalha como código fonte Avalia aspectos: ● Teste de condição ● Teste de fluxo de dados ● Teste de ciclos ● Teste de caminho lógico ● Código nunca executado...
  • 51.
  • 52.
  • 53.
    Fases: Testes deUnidade Testa o código
  • 54.
    Fases: Testes deUnidade Testa o código Pequenas unidades
  • 55.
    Fases: Testes deUnidade Testa o código Pequenas unidades Independentes
  • 56.
    Fases: Testes deUnidade Testa o código Pequenas unidades Independentes (sub-rotinas, trechos)
  • 57.
  • 58.
    Teste de Integração Testaa integração interna de um sistema
  • 59.
    Teste de Integração Testaa integração interna de um sistema Verifica se as peças do quebra-cabeças Estão encaixadas
  • 60.
  • 61.
    Teste de Sistema Pontode vista do cliente final
  • 62.
    Teste de Sistema Pontode vista do cliente final
  • 63.
    Teste de Sistema Pontode vista do cliente final Simular ambiente que o cliente utilizará
  • 64.
  • 65.
    Teste de Aceitação Aprovado ou não?
  • 66.
    Teste de Aceitação Aprovado ou não?
  • 67.
    Teste de Aceitação Aprovado ou não? Grupo restrito usuários finais simulam o uso em produção
  • 68.
    Teste de Aceitação Aprovado ou não? Grupo restrito usuários finais simulam o uso em produção Determina se o sistema satisfaz os critérios estabelecidos
  • 70.
  • 71.
  • 72.
    JUnit automatizar testes deunidade Open Source
  • 73.
    JUnit automatizar testes deunidade Open Source Largamente Utilizado
  • 74.
    JUnit automatizar testes deunidade Open Source Largamente Utilizado Criação rápida de testes
  • 75.
    JUnit automatizar testes de unidade Open Source Largamente Utilizado Criação rápida de testes Diminuir necessidade de depuração
  • 76.
    JUnit automatizar testes de unidade Open Source Largamente Utilizado Criação rápida de testes Diminuir necessidade de depuração Integrável ao Eclipse, Netbeans, Maven...
  • 77.
    Utilizando JUnit 4 publicclass OlaMundoTest { @Test public void testSoma() { assertEquals(10, Calc.soma(7,3)); } }
  • 78.
  • 79.
    JUnit - Ciclode vida *DZone RefCardz
  • 80.
    @Test Informa que éum método de teste Atributos: ● expected ● timeout
  • 81.
    @Before e @After Métodosexecutados antes e após um método de teste (setUp e tearDown)
  • 82.
    @Before e @After Métodosexecutados antes e após um método de teste (setUp e tearDown) @BeforeClass e @AfterClass Métodos executados antes e após uma classe de teste
  • 83.
  • 84.
    Novidades do JUnit4.7 Anotação: @Rule
  • 85.
    Novidades do JUnit4.7 Anotação: @Rule Redefinir e adicionar comportamentos
  • 86.
    Novidades do JUnit4.7 Anotação: @Rule Redefinir e adicionar comportamentos Mecanismo de Meta-testes simples e claro
  • 87.
    @Rule ● TemporaryFolder: Permite criar pastas e arquivos que serão automaticamente deletados após o teste public static class HasTempFolder { @Rule public TemporaryFolder folder= new TemporaryFolder(); @Test public void testUsingTempFolder() throws IOException { File createdFile= folder.newFile("myfile.txt"); File createdFolder= folder.newFolder("subfolder"); // ... } }
  • 88.
    @Rule ● ExternalResource: Classe base para Rules que necessitam obter recursos externos (socket, conexão com SGBD, etc...) public static class UsesExternalResource { Server myServer = new Server(); @Rule public ExternalResource resource = new ExternalResource() { @Override protected void before() throws Throwable { myServer.connect(); } @Override protected void after() { myServer.disconnect(); }; }; @Test public void testFoo() { new Client().run(myServer); } }
  • 89.
    @Rule ● ErrorCollector: Permite que a execução do teste continue, coletando todos os erros ocorridos public static class UsesErrorCollectorTwice { @Rule public ErrorCollector collector= new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("first thing went wrong")); collector.addError(new Throwable("second thing went wrong")); } } ● Veja mais em: http://www.junit.org/node/574
  • 90.
  • 91.
    Boas práticas ● Execute os testes frequentemente
  • 92.
    Boas práticas ● Execute os testes frequentemente ● Escreva um teste para o defeito antes de corrigi-lo
  • 93.
    Boas práticas ● Execute os testes frequentemente ● Escreva um teste para o defeito antes de corrigi-lo ● Escreva testes, não logs para depuração: – System.out.println(...) – logger.info(...)
  • 94.
    Más práticas ● Múltiplos assertions. Evite isso! public class MyTestCase { @Test public void testSomething() { assertEquals(10, Calc.soma(7,3)); assertEquals(50, Calc.multiplica(5,10)); assertEquals(30, Calc.subtrai(50,20)); } }
  • 95.
    Más práticas ● Múltiplos assertions. Forma correta: public class MyTestCase { @Test public void testCondition1() { assertEquals(10, Calc.soma(7,3)); } @Test public void testCondition2() { assertEquals(50, Calc.multiplica(5,10)); } @Test public void testCondition3() { assertEquals(30, Calc.subtrai(50,20)); } }
  • 96.
    Más práticas ● Método errado. Evite! assertTrue("Os objetos devem ser o mesmo", expected == actual); assertTrue("Os objetos devem ser iguais", expected.equals(actual)); assertTrue("O objeto deve ser nulo", actual == null); assertTrue("O objeto não pode ser nulo", actual != null); Use: assertSame("Os objetos devem ser o mesmo", expected, actual); assertEquals("Os objetos devem ser iguais", expected, actual); assertNull("O objeto deve ser nulo", actual); assertNotNull("O objeto não pode ser nulo", actual);
  • 97.
    Más práticas ● Cobertura superficial – Caminho perfeito – Funcionalidades fáceis de testar – Alternativa: Code Coverage Tools
  • 98.
    Más práticas ● Testes excessivamente complexos
  • 99.
    Más práticas ● Testes excessivamente complexos Refatorar até obter:
  • 100.
    Más práticas ● Testes excessivamente complexos Refatorar até obter: 1.Configuração 2.Declaração dos resultados esperados 3.Executar método a ser testado 4.Recuperar resultado 5.Verificar resultado encontrado X esperado
  • 101.
    Más práticas ● Capturar exceções Inesperadas public void testCalculation() { try { srv.calculate(); assertEquals(42,srv.getResult()); }catch(CalculationException ex) { Log.error("Calculation caused exception", ex); } }
  • 102.
    Más práticas ● Forma correta: Não capture exceções inesperadas public void testCalculation() throw CalculationException { srv.calculate(); assertEquals(42,srv.getResult()); }
  • 103.
    Más práticas ● Validando exceções. Forma correta: @Test(expected=IndexOutOfBoundException.class) public void testIndexOutOfBoundsException() { try { ArrayList emptyList = new ArrayList(); Object o = emptyList.get(0); } }
  • 104.
  • 105.
  • 106.
  • 107.
    Más práticas Não escrever Testes !!
  • 108.
    Reflexão Final "Todo programador sabe que é capaz de escrever testes para seu código. Poucos escrevem. A resposta universal para a pergunta "porque não?" é "Eu estou muito ocupado". Essa atitude torna-se um ciclo: quanto mais pressão você sente, menos testes você escreve. Quanto menos testes você escreve, menos produtivo você se torna e menos estável seu código fica. Quanto menos produtivo você se torna, mais pressão você sente".* * http://junit.sourceforge.net/doc/testinfected/testing.htm
  • 109.
    Sobre o JUGMS ● Grupo de usuários Java do MS ● Forte atuação em Campo Grande ● Participa e promove eventos, palestras e reuniões ● Visite-nos: http://www.jugms.com.br
  • 110.
    Sobre o Javaneiros ● Evento sobre todas as vertentes da tecnologia Java ● + de 500 inscritos em 2008 ● Edição 2009 – 14 de novembro de 2009 – Campo Grande/MS – Universidade Unaes – Entrada: 1 kg de alimento – Reservas especiais para caravanas – http://javaneiros.jugms.com.br
  • 111.
    Sobre a BacarinSoftware ● Residente na Incubadora de Empresas da UNIDERP ● Fornece sistemas web para: – Comércio Eletrônico – Web Sites – Gerenciamento Eletrônico de Documentos ● Visite-nos: http://www.bacarin.com.br
  • 112.
  • 113.
    Bibliografia ● http://pt.wikipedia.org/wiki/JUnit ● http://www.improveit.com.br/xp/praticas/tdd ● http://www.exubero.com/junit/antipatterns.html ● http://www.guj.com.br/java.tutorial.artigo.40.1.guj ● http://www.junit.org/junit/javadoc/3.8.1/junit/framework/Assert.html ● http://junit.sourceforge.net/doc/testinfected/testing.htm ● http://www-128.ibm.com/developerworks/opensource /library/os-junit/?ca=dgr-lnxw07JUnite ● http://pt.wikipedia.org/wiki/Teste_de_software ● http://www.slideshare.net/jeveaux/* ● http://www.junit.org/node/574
  • 114.
    Licença ● Este material está licenciado sob a Licença Creative-Commons Atribuição-Uso Não-Comercial-Compartilhamento pela mesma Licença 2.5 Brasil ● Você pode: – Copiar, distribuir, exibir e executar a obra – Criar obras derivadas ● Sob as seguintes condições: – Atribuição. Você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante. – Uso Não-Comercial. Você não pode utilizar esta obra com finalidades comerciais. – Compartilhamento pela mesma Licença. Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta.