SlideShare uma empresa Scribd logo
1 de 29
Assertions




@regismelo                1
Assertions


                 Objetivos
• Saber quando, como e em quais situações
  usar assertions.

• Como compilar código-fonte, controlar a
  execução do programa, adicionar e
  remover assertions.



 @regismelo                                 2
Assertions


              Por que usar Assertions?
• Como programadores, devemos fazer mais do
  que checagem de erro.
• Código de tratamento de erro inclui uma
  quantidade substancial de esforço de
  programação.
• Não é possível eliminar todos os erros, mas
  podemos planejar à frente do inesperado.
• Assertion pode ser usado para capturar
  condições que não esperávamos acontecer.
 @regismelo                                     3
Assertions


              Por que usar Assertions?

   • Assertions vs. outro código de erro;
   • Design-by-Contract
         – Pré-condições;
         – Pós-condições;
         – Invariantes;




@regismelo                                    4
Assertions


                              Sintaxe
   • assert expressao1;
   Exemplo:
   assert foo != null;
   Equivalente a
   if ( ! (foo != null) ) {
       throw new AssertionError();
   }



@regismelo                                           5
Assertions


                              Sintaxe
   • assert expressao1 : expressao2;
   Exemplo:
   assert foo != null : “Assertion”;
   Equivalente a
   if ( ! (foo != null) ) {
       throw new AssertionError(“Assertion”);
   }



@regismelo                                           6
Assertions


               Compilando com Assertions
     • java –source 1.3
             – usa a sintaxe antiga.

     • java –source 1.4
             – usa a sintaxe nova, com assertion.




@regismelo                                              7
Assertions


               Controlando Assertions
     • Linha de comando
     Símbolo             Exemplo______________
     -ea                  java –ea
     -da                  java –da
     -ea:<classname>     java –ea:AssertClass
     -da:<classname>     java –da:AssertClass
     -ea:<packagename>   java –ea:Package0
     -da:<packagename>   java –da:Package0


@regismelo                                        8
Assertions


               Controlando Assertions
     • Linha de comando
     Símbolo               Exemplo______________
     -esa                   java –esa
     -dsa                   java –das


     esa = enable system Assretion




@regismelo                                           9
Assertions


                  Controlando Assertions
• Programaticamente.
• Habilita ou desabilita o uso de assertions para uma
  classe.
     – public void setClassAssertionStatus(

             String className, boolean enabled);

- Habilita ou desabilita o uso de assertions para um
  pacote.
     – public void setPackageAssertionStatus(
             String packageName, boolean enabled);



@regismelo                                                 10
Assertions


                Controlando Assertions
• Programaticamente.
• Habilita o uso de assertions como default.
     – public void setDefaultAssertionStatus(
             boolean enabled);
• Desabilita o uso de todas as assertions.
     – public void clearAssertionStatus();



@regismelo                                      11
Assertions


             Quando usar Assertions
• Reforçar suposições sobre aspectos de
  estruturas de dados.
• Reforçar constraints em argumentos de
  métodos private.
• Checar condições que nunca deveriam ocorrer.
• Checar condições que nunca deveriam ocorrer,
  mesmo que você esteja certo disso.



@regismelo                                   12
Assertions


             Quando usar Assertions

• Checar condições relacionadas ao início de
  qualquer método.
• Checar coisas no meio de loops grandes.
• Qualquer assertion é melhor do que nada.




@regismelo                                   13
Assertions


             Quando não usar Assertions
• Reforçar o uso na linha de comando.
• Reforçar constraints em argumentos de
  métodos públicos.
• Reforçar uso público de padrões ou protocolos.
• Reforçar uma propriedade de qualquer
  informação de um usuário.




@regismelo                                     14
Assertions


             Quando não usar Assertions
• Como se fosse o seguinte:
   – If (something) error();
• Como um controle condicional externo.
• Checar a corretude de seu compilador, sistema
  operacional ou hardware.




@regismelo                                   15
Assertions


                   Exemplos(regras de uso)
Regra: não usar assertions para reforçar o uso da
       linha de comando.
public class Application {
             public static void main(String[] args) {
                    //BAD!!
                    assert args.length == 3;
             }
}



    @regismelo                                                16
Assertions


                  Exemplos(regras de uso)
Regra: usar assertions para reforçar o uso de
 constraints de argumentos para métodos
 private.
public class aClass {
      private void method(Object required, Object optional) {
           assert (required != null) : “method():required = null”;
      }
}




    @regismelo                                                       17
Assertions


                   Exemplos(regras de uso)
Regra: não usar assertions para reforçar
 constraints de argumentos para métodos public.
public class aClass {
      public void disconnect(Source required, Object optional)
      {
             //BAD!!
             assert (required != null) : “method():required = null”;
      }
}

    @regismelo                                                         18
Assertions


                  Exemplos(regras de uso)
Regra: não usar assertions para reforçar uso
 público de padrões ou protocolos.
public class Connection {
      private boolean isOpen = false;
      public void close() {
             //BAD!!
             assert isOpen : “Cannot close a connection!”;
      }
}

    @regismelo                                               19
Assertions


                   Exemplos(regras de uso)
Regra: não usar assertions para reforçar uma
 propriedade de uma informação de usuário.
public void processZipCode(String zipCode) {
      if (zipCode.length() == 5) { //ok }
      else {
             //BAD!!
             assert false:”Only 5- and 9- digit supported!”;
      }
}

    @regismelo                                                 20
Assertions


                 Exemplos(regras de uso)
Regra: usar assertions para reforçar suposições
 internas sobre aspectos de estruturas de dados.


private void showDate(int array[]) {
      assert (array.length == 3);
}




    @regismelo                                      21
Assertions


                 Exemplos(regras de uso)
Regra: usar assertions para checar condições no
 fim de qualquer método.
public void open() {
      //...
      isOpen = true;
      //...
      assert isOpen;
}



    @regismelo                                22
Assertions


                 Exemplos(regras de uso)
Regra: usar assertions para checar condições
     que nunca aconteceriam.
public void method() {
      int a = getValue(); //returns 0
      if (a == 0) {   //deal with 0 }
      else { assert false : “Impossible!!!” }
}




    @regismelo                                               23
Assertions


                 Exemplos(regras de uso)
Regra: usar assertions para checar condições que
 nunca aconteceriam, mesmo que você tenha
 certeza.
public void method() {
      int a = getValue(); //returns 0
      assert a < 0 || a > 0 : “Impossible!!!”
}




    @regismelo                                               24
Assertions


                 Exemplos(regras de uso)
Regra: usar assertions para checar condições
 relacionadas ao início de qualquer método.


public void processZipCode(String zipCode) {
      assert zipCodeMapIsValid();
      //.....
}




    @regismelo                                      25
Assertions


                   Exemplos(regras de uso)
Regra: usar assertions para checar coisas no meio
 de um loop grande.
public void method() {
      while (true) {
             Socket socket = serverSocket.accept(); //long pause
             assert socketListIsValid();
      }
}



    @regismelo                                                     26
Assertions


                  Exemplos(regras de uso)
Regra: não usar assertions como algo do tipo: “if
 (something) error();”
public class Server {
      private int port;
      public void listen() {
             //BAD!!
             assert port >= 1024 : “No permission to listen!”;
      }
}

    @regismelo                                                   27
Assertions


                  Exemplos(regras de uso)
Regra: não usar assertions como uma condição de
 controle externa.
public class App {
      static private boolean turnLoggingOn() { return true; }
      static public void main(String[] args) {
             //BAD!!
             assert turnLoggingOn();
      }
}

    @regismelo                                                  28
Assertions


                    Exemplos(regras de uso)
Regra: não usar assertions para checar a
 corretude de seu compilador, sistema
 operacional ou hadware, a não ser que você
 esteja depurando.
public void method() {
      int a = 10;
      //REDUNDANT!!
      assert a == 10;
}


    @regismelo                                   29

Mais conteúdo relacionado

Mais procurados

Excecoes
ExcecoesExcecoes
ExcecoesEMSNEWS
 
Tratamento de exceções em Java
Tratamento de exceções em JavaTratamento de exceções em Java
Tratamento de exceções em JavaWilson Júnior
 
Strategy - Padrões de Projeto
Strategy - Padrões de ProjetoStrategy - Padrões de Projeto
Strategy - Padrões de ProjetoEduardo Mendes
 
Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3guestd6da1cd
 
Visão geral sobre Assertivas e Exceções no Java7
Visão geral sobre Assertivas e Exceções no Java7Visão geral sobre Assertivas e Exceções no Java7
Visão geral sobre Assertivas e Exceções no Java7Julio Cesar Nunes de Souza
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Bernardo Fontes
 
Programação defensiva
Programação defensivaProgramação defensiva
Programação defensivaKayo Rayner
 
Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções javaAntonio Oliveira
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitRobinson Castilho
 
Estrutura de Dados - Características da linguagem C - 2
Estrutura de Dados - Características da linguagem C - 2Estrutura de Dados - Características da linguagem C - 2
Estrutura de Dados - Características da linguagem C - 2Adriano Teixeira de Souza
 
Aexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tddAexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tddCarlos Santana
 
PHP 5.3 - Estruturas de Controle
PHP 5.3 - Estruturas de ControlePHP 5.3 - Estruturas de Controle
PHP 5.3 - Estruturas de ControleGeorge Mendonça
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de softwarericardophp
 

Mais procurados (20)

Excecoes
ExcecoesExcecoes
Excecoes
 
Tratamento de exceções em Java
Tratamento de exceções em JavaTratamento de exceções em Java
Tratamento de exceções em Java
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Strategy - Padrões de Projeto
Strategy - Padrões de ProjetoStrategy - Padrões de Projeto
Strategy - Padrões de Projeto
 
Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3Linguagens de Programação II - Aula 3
Linguagens de Programação II - Aula 3
 
Visão geral sobre Assertivas e Exceções no Java7
Visão geral sobre Assertivas e Exceções no Java7Visão geral sobre Assertivas e Exceções no Java7
Visão geral sobre Assertivas e Exceções no Java7
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
 
Programação defensiva
Programação defensivaProgramação defensiva
Programação defensiva
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções java
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnit
 
Excepções JAVA
Excepções JAVAExcepções JAVA
Excepções JAVA
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
 
Estrutura de Dados - Características da linguagem C - 2
Estrutura de Dados - Características da linguagem C - 2Estrutura de Dados - Características da linguagem C - 2
Estrutura de Dados - Características da linguagem C - 2
 
Palestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnitPalestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnit
 
Aexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tddAexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tdd
 
PHP 5.3 - Estruturas de Controle
PHP 5.3 - Estruturas de ControlePHP 5.3 - Estruturas de Controle
PHP 5.3 - Estruturas de Controle
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
TDD Primeiro Contato
TDD Primeiro ContatoTDD Primeiro Contato
TDD Primeiro Contato
 

Destaque

Java cert programmer
Java cert programmerJava cert programmer
Java cert programmerRegis Melo
 
Http _www.portalbpm.com.br_servlet_leartigo_qual=_web-inf_artigos_livrobpmn_...
Http  _www.portalbpm.com.br_servlet_leartigo_qual=_web-inf_artigos_livrobpmn_...Http  _www.portalbpm.com.br_servlet_leartigo_qual=_web-inf_artigos_livrobpmn_...
Http _www.portalbpm.com.br_servlet_leartigo_qual=_web-inf_artigos_livrobpmn_...Carlos Barreto de Almeida
 
Modelando PostgreSql no ERwin
Modelando PostgreSql no ERwinModelando PostgreSql no ERwin
Modelando PostgreSql no ERwinguest6dc5d7d2
 
Linux: X Window System e Gerenciadores de janelas
Linux: X Window System e Gerenciadores de janelasLinux: X Window System e Gerenciadores de janelas
Linux: X Window System e Gerenciadores de janelasBreno Vitorino
 
Planos seriados
Planos seriadosPlanos seriados
Planos seriadosMay Guedez
 
Present tense of regular er and -ir verbs
Present tense of regular  er and -ir verbsPresent tense of regular  er and -ir verbs
Present tense of regular er and -ir verbsspanishtutor
 
Oiartzun jaiak egitaraua 2013
Oiartzun jaiak egitaraua 2013Oiartzun jaiak egitaraua 2013
Oiartzun jaiak egitaraua 2013BASORLEGI
 
Trab 1 bim_com_social
Trab 1 bim_com_socialTrab 1 bim_com_social
Trab 1 bim_com_socialAdri Lima
 
JavaCE - Software para rodar nos 4 cantos do mundo
JavaCE - Software para rodar nos 4 cantos do mundoJavaCE - Software para rodar nos 4 cantos do mundo
JavaCE - Software para rodar nos 4 cantos do mundoRegis Melo
 
A mãe vai bem e o seu negócio como vai
A mãe vai bem e o seu negócio como vaiA mãe vai bem e o seu negócio como vai
A mãe vai bem e o seu negócio como vaimarcoslutherodeoliveira
 
Eletrônica Molecular
Eletrônica MolecularEletrônica Molecular
Eletrônica Molecularguestb48105
 
Presentación1
Presentación1Presentación1
Presentación1mannelig
 

Destaque (20)

Java cert programmer
Java cert programmerJava cert programmer
Java cert programmer
 
Hibernate
HibernateHibernate
Hibernate
 
Java web
Java webJava web
Java web
 
Http _www.portalbpm.com.br_servlet_leartigo_qual=_web-inf_artigos_livrobpmn_...
Http  _www.portalbpm.com.br_servlet_leartigo_qual=_web-inf_artigos_livrobpmn_...Http  _www.portalbpm.com.br_servlet_leartigo_qual=_web-inf_artigos_livrobpmn_...
Http _www.portalbpm.com.br_servlet_leartigo_qual=_web-inf_artigos_livrobpmn_...
 
Modelando PostgreSql no ERwin
Modelando PostgreSql no ERwinModelando PostgreSql no ERwin
Modelando PostgreSql no ERwin
 
Linux: X Window System e Gerenciadores de janelas
Linux: X Window System e Gerenciadores de janelasLinux: X Window System e Gerenciadores de janelas
Linux: X Window System e Gerenciadores de janelas
 
Planos seriados
Planos seriadosPlanos seriados
Planos seriados
 
Present tense of regular er and -ir verbs
Present tense of regular  er and -ir verbsPresent tense of regular  er and -ir verbs
Present tense of regular er and -ir verbs
 
Oiartzun jaiak egitaraua 2013
Oiartzun jaiak egitaraua 2013Oiartzun jaiak egitaraua 2013
Oiartzun jaiak egitaraua 2013
 
Trab 1 bim_com_social
Trab 1 bim_com_socialTrab 1 bim_com_social
Trab 1 bim_com_social
 
Entendendo o IPv6(ii)
Entendendo o IPv6(ii)Entendendo o IPv6(ii)
Entendendo o IPv6(ii)
 
4.TBH Envelopes
4.TBH Envelopes4.TBH Envelopes
4.TBH Envelopes
 
Etica
EticaEtica
Etica
 
Aula2 adm
Aula2 admAula2 adm
Aula2 adm
 
JavaCE - Software para rodar nos 4 cantos do mundo
JavaCE - Software para rodar nos 4 cantos do mundoJavaCE - Software para rodar nos 4 cantos do mundo
JavaCE - Software para rodar nos 4 cantos do mundo
 
A mãe vai bem e o seu negócio como vai
A mãe vai bem e o seu negócio como vaiA mãe vai bem e o seu negócio como vai
A mãe vai bem e o seu negócio como vai
 
6.TBH Mouse pad
6.TBH Mouse pad6.TBH Mouse pad
6.TBH Mouse pad
 
Eletrônica Molecular
Eletrônica MolecularEletrônica Molecular
Eletrônica Molecular
 
Presentación1
Presentación1Presentación1
Presentación1
 
Aula 1 tt
Aula 1 ttAula 1 tt
Aula 1 tt
 

Semelhante a Java cert programmer (assertions)

Pensando em java univali turbinando seus testes
Pensando em java univali   turbinando seus testesPensando em java univali   turbinando seus testes
Pensando em java univali turbinando seus testesSandro Giacomozzi
 
JUnit: framework de testes unitários
JUnit: framework de testes unitáriosJUnit: framework de testes unitários
JUnit: framework de testes unitárioselliando dias
 
Teste unitário
Teste unitárioTeste unitário
Teste unitáriodist_bp
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade IIIJoão Lourenço
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetosMateus Parente
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDDDextra
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockitoRenan Uchôa
 
Testes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraTestes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraValberto Carneiro
 

Semelhante a Java cert programmer (assertions) (20)

Pensando em java univali turbinando seus testes
Pensando em java univali   turbinando seus testesPensando em java univali   turbinando seus testes
Pensando em java univali turbinando seus testes
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
 
JUnit: framework de testes unitários
JUnit: framework de testes unitáriosJUnit: framework de testes unitários
JUnit: framework de testes unitários
 
Teste unitário
Teste unitárioTeste unitário
Teste unitário
 
Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnit
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetos
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
JUnit
JUnitJUnit
JUnit
 
Introdução a java
Introdução a javaIntrodução a java
Introdução a java
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockito
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Gisele
GiseleGisele
Gisele
 
Testes de Sofware
Testes de SofwareTestes de Sofware
Testes de Sofware
 
Clean code part 2
Clean code   part 2Clean code   part 2
Clean code part 2
 
Testes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraTestes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração segura
 
Apresentacao teste
Apresentacao testeApresentacao teste
Apresentacao teste
 

Java cert programmer (assertions)

  • 2. Assertions Objetivos • Saber quando, como e em quais situações usar assertions. • Como compilar código-fonte, controlar a execução do programa, adicionar e remover assertions. @regismelo 2
  • 3. Assertions Por que usar Assertions? • Como programadores, devemos fazer mais do que checagem de erro. • Código de tratamento de erro inclui uma quantidade substancial de esforço de programação. • Não é possível eliminar todos os erros, mas podemos planejar à frente do inesperado. • Assertion pode ser usado para capturar condições que não esperávamos acontecer. @regismelo 3
  • 4. Assertions Por que usar Assertions? • Assertions vs. outro código de erro; • Design-by-Contract – Pré-condições; – Pós-condições; – Invariantes; @regismelo 4
  • 5. Assertions Sintaxe • assert expressao1; Exemplo: assert foo != null; Equivalente a if ( ! (foo != null) ) { throw new AssertionError(); } @regismelo 5
  • 6. Assertions Sintaxe • assert expressao1 : expressao2; Exemplo: assert foo != null : “Assertion”; Equivalente a if ( ! (foo != null) ) { throw new AssertionError(“Assertion”); } @regismelo 6
  • 7. Assertions Compilando com Assertions • java –source 1.3 – usa a sintaxe antiga. • java –source 1.4 – usa a sintaxe nova, com assertion. @regismelo 7
  • 8. Assertions Controlando Assertions • Linha de comando Símbolo Exemplo______________ -ea java –ea -da java –da -ea:<classname> java –ea:AssertClass -da:<classname> java –da:AssertClass -ea:<packagename> java –ea:Package0 -da:<packagename> java –da:Package0 @regismelo 8
  • 9. Assertions Controlando Assertions • Linha de comando Símbolo Exemplo______________ -esa java –esa -dsa java –das esa = enable system Assretion @regismelo 9
  • 10. Assertions Controlando Assertions • Programaticamente. • Habilita ou desabilita o uso de assertions para uma classe. – public void setClassAssertionStatus( String className, boolean enabled); - Habilita ou desabilita o uso de assertions para um pacote. – public void setPackageAssertionStatus( String packageName, boolean enabled); @regismelo 10
  • 11. Assertions Controlando Assertions • Programaticamente. • Habilita o uso de assertions como default. – public void setDefaultAssertionStatus( boolean enabled); • Desabilita o uso de todas as assertions. – public void clearAssertionStatus(); @regismelo 11
  • 12. Assertions Quando usar Assertions • Reforçar suposições sobre aspectos de estruturas de dados. • Reforçar constraints em argumentos de métodos private. • Checar condições que nunca deveriam ocorrer. • Checar condições que nunca deveriam ocorrer, mesmo que você esteja certo disso. @regismelo 12
  • 13. Assertions Quando usar Assertions • Checar condições relacionadas ao início de qualquer método. • Checar coisas no meio de loops grandes. • Qualquer assertion é melhor do que nada. @regismelo 13
  • 14. Assertions Quando não usar Assertions • Reforçar o uso na linha de comando. • Reforçar constraints em argumentos de métodos públicos. • Reforçar uso público de padrões ou protocolos. • Reforçar uma propriedade de qualquer informação de um usuário. @regismelo 14
  • 15. Assertions Quando não usar Assertions • Como se fosse o seguinte: – If (something) error(); • Como um controle condicional externo. • Checar a corretude de seu compilador, sistema operacional ou hardware. @regismelo 15
  • 16. Assertions Exemplos(regras de uso) Regra: não usar assertions para reforçar o uso da linha de comando. public class Application { public static void main(String[] args) { //BAD!! assert args.length == 3; } } @regismelo 16
  • 17. Assertions Exemplos(regras de uso) Regra: usar assertions para reforçar o uso de constraints de argumentos para métodos private. public class aClass { private void method(Object required, Object optional) { assert (required != null) : “method():required = null”; } } @regismelo 17
  • 18. Assertions Exemplos(regras de uso) Regra: não usar assertions para reforçar constraints de argumentos para métodos public. public class aClass { public void disconnect(Source required, Object optional) { //BAD!! assert (required != null) : “method():required = null”; } } @regismelo 18
  • 19. Assertions Exemplos(regras de uso) Regra: não usar assertions para reforçar uso público de padrões ou protocolos. public class Connection { private boolean isOpen = false; public void close() { //BAD!! assert isOpen : “Cannot close a connection!”; } } @regismelo 19
  • 20. Assertions Exemplos(regras de uso) Regra: não usar assertions para reforçar uma propriedade de uma informação de usuário. public void processZipCode(String zipCode) { if (zipCode.length() == 5) { //ok } else { //BAD!! assert false:”Only 5- and 9- digit supported!”; } } @regismelo 20
  • 21. Assertions Exemplos(regras de uso) Regra: usar assertions para reforçar suposições internas sobre aspectos de estruturas de dados. private void showDate(int array[]) { assert (array.length == 3); } @regismelo 21
  • 22. Assertions Exemplos(regras de uso) Regra: usar assertions para checar condições no fim de qualquer método. public void open() { //... isOpen = true; //... assert isOpen; } @regismelo 22
  • 23. Assertions Exemplos(regras de uso) Regra: usar assertions para checar condições que nunca aconteceriam. public void method() { int a = getValue(); //returns 0 if (a == 0) { //deal with 0 } else { assert false : “Impossible!!!” } } @regismelo 23
  • 24. Assertions Exemplos(regras de uso) Regra: usar assertions para checar condições que nunca aconteceriam, mesmo que você tenha certeza. public void method() { int a = getValue(); //returns 0 assert a < 0 || a > 0 : “Impossible!!!” } @regismelo 24
  • 25. Assertions Exemplos(regras de uso) Regra: usar assertions para checar condições relacionadas ao início de qualquer método. public void processZipCode(String zipCode) { assert zipCodeMapIsValid(); //..... } @regismelo 25
  • 26. Assertions Exemplos(regras de uso) Regra: usar assertions para checar coisas no meio de um loop grande. public void method() { while (true) { Socket socket = serverSocket.accept(); //long pause assert socketListIsValid(); } } @regismelo 26
  • 27. Assertions Exemplos(regras de uso) Regra: não usar assertions como algo do tipo: “if (something) error();” public class Server { private int port; public void listen() { //BAD!! assert port >= 1024 : “No permission to listen!”; } } @regismelo 27
  • 28. Assertions Exemplos(regras de uso) Regra: não usar assertions como uma condição de controle externa. public class App { static private boolean turnLoggingOn() { return true; } static public void main(String[] args) { //BAD!! assert turnLoggingOn(); } } @regismelo 28
  • 29. Assertions Exemplos(regras de uso) Regra: não usar assertions para checar a corretude de seu compilador, sistema operacional ou hadware, a não ser que você esteja depurando. public void method() { int a = 10; //REDUNDANT!! assert a == 10; } @regismelo 29

Notas do Editor

  1. Assertions podem ser usados para garantir pré-condições se e somente se o método não é público. Assertions são sempre bons para pós-condições. Invariantes são condições que devem ser sempre verdadeiras.
  2. expressao_2 pode ser qualquer tipo suportado pelos construtores da classe AssertionError, que são: object, boolean, char, int, long, float, double.
  3. expressao_2 pode ser qualquer tipo suportado pelos construtores da classe AssertionError, que são: object, boolean, char, int, long, float, double.
  4. Na opção java –source 1.4, assertion é uma nova keyword.
  5. Assertions são desabilitados por default. Pode-se usar combinações desses símbolos. Por exemplo, habilitar as assertions num pacote e desabilitar para uma classe em particular(java –da:pacoteX –ea:classeX).
  6. Os métodos pertencem à classe ClassLoader. className – nome da classe que o comando afetará. enabled - indica se a assertion será ou não aplicada.
  7. packageName – nome do pacote que o comando afetará. enabled - indica se a assertion será ou não aplicada. Lembre-se de setar esses flags antes de carregar as classes que você quer que sejam afetadas. Remover assertions é fortemente desencorajado, a não ser que se tenha uma boa razão.
  8. packageName – nome do pacote que o comando afetará. enabled - indica se a assertion será ou não aplicada. Lembre-se de setar esses flags antes de carregar as classes que você quer que sejam afetadas. Remover assertions é fortemente desencorajado, a não ser que se tenha uma boa razão.