Skip to content

Instantly share code, notes, and snippets.

@cesarvasconcelos
Last active September 21, 2019 10:52
Show Gist options
  • Select an option

  • Save cesarvasconcelos/edb54f588b263f3fac9cdbf3f0a8f40e to your computer and use it in GitHub Desktop.

Select an option

Save cesarvasconcelos/edb54f588b263f3fac9cdbf3f0a8f40e to your computer and use it in GitHub Desktop.

Revisions

  1. cesarvasconcelos revised this gist Sep 21, 2019. 1 changed file with 3 additions and 4 deletions.
    7 changes: 3 additions & 4 deletions AssertionTest.java
    Original file line number Diff line number Diff line change
    @@ -40,7 +40,7 @@ public static void main( String[] args )
    usarAssertionsAppSomar();
    usarAssertionsInternalInvariant( 5 );
    usarAssertionsInternalInvariant( -5 );
    usarAssertionsControlInvariant();
    usarAssertionsControlInvariant( ESTADO_CIVIL.SOLTEIRO );
    }

    private static void usarAssertionsAppSomar()
    @@ -100,10 +100,9 @@ public static void usarAssertionsPostConditions( List<Integer> lista )
    assert lista.size() == size - 1 : "Houve erro na operação de remoção da lista";
    }

    public static void usarAssertionsControlInvariant()
    public static void usarAssertionsControlInvariant( ESTADO_CIVIL e )
    {
    ESTADO_CIVIL estadoCivil = ESTADO_CIVIL.SOLTEIRO;
    switch ( estadoCivil ){
    switch ( e ){
    case CASADO:
    break;
    case SOLTEIRO:
  2. cesarvasconcelos revised this gist Sep 21, 2019. 1 changed file with 53 additions and 6 deletions.
    59 changes: 53 additions & 6 deletions AssertionTest.java
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,4 @@
    package br.edu.ifpb;

    import java.util.List;
    import java.util.Scanner;
    // vide: https://pempek.net/articles/2013/11/16/assertions-or-exceptions/

    @@ -38,18 +37,28 @@ public static void main( String[] args )
    // at br.edu.ifpb.AssertionTest.main(br.edu.ifpb.AssertionTest.java)
    // não precisa recompilar o código para passar -ea

    usarAssertionsAppSomar();
    usarAssertionsInternalInvariant( 5 );
    usarAssertionsInternalInvariant( -5 );
    usarAssertionsControlInvariant();
    }

    private static void usarAssertionsAppSomar()
    {
    String e1 = lerEntrada( "Digite o número" );
    assert isEntradaNumérica( e1 ); // se for false, então java.lang.AssertionError
    assert isEntradaNumérica( e1 );
    // se for false, então java.lang.AssertionError

    String e2 = lerEntrada( "Digite outro número" );
    assert isEntradaNumérica( e2 ) : "A entrada " + e2 + " não é um número!"; // se for false, então java.lang.AssertionError
    assert isEntradaNumérica( e2 ) : String.join( " " , "A entrada", e2 , "não é um número!" );
    // se for false, então java.lang.AssertionError

    System.out.println( "A soma: " + Double.parseDouble( e1 ) + Double.parseDouble( e2 ) );
    System.out.println( "A soma: " + (Double.parseDouble( e1 ) + Double.parseDouble( e2 )) );

    System.out.println( "Fim" );
    }

    static String lerEntrada( String frase )
    private static String lerEntrada( String frase )
    {
    System.out.print( frase + ": " );
    Scanner s = new Scanner( System.in );
    @@ -68,4 +77,42 @@ static String lerEntrada( String frase )
    return false;
    }
    }

    public static void usarAssertionsInternalInvariant( int x )
    {
    if( x > 0 ){
    // faça algo com x
    }else{
    // assegurar que x == 0 e não é negativo
    assert( x == 0 ) : "x < 0!";
    // se x < 0; assertion error será gerado
    }
    }

    public static void usarAssertionsPostConditions( List<Integer> lista )
    {
    int size = lista.size();

    // assuma um processamento que precisa remover algo da lista
    lista.remove( 0 );

    // testar uma pós-condição
    assert lista.size() == size - 1 : "Houve erro na operação de remoção da lista";
    }

    public static void usarAssertionsControlInvariant()
    {
    ESTADO_CIVIL estadoCivil = ESTADO_CIVIL.SOLTEIRO;
    switch ( estadoCivil ){
    case CASADO:
    break;
    case SOLTEIRO:
    break;
    case DIVORCIADO:
    break;
    default: assert (false) : "Estado civil desconhecido";
    }
    }
    }

    enum ESTADO_CIVIL {SOLTEIRO, CASADO, DIVORCIADO};
  3. cesarvasconcelos revised this gist Sep 21, 2019. 1 changed file with 8 additions and 7 deletions.
    15 changes: 8 additions & 7 deletions AssertionTest.java
    Original file line number Diff line number Diff line change
    @@ -11,21 +11,22 @@ public static void main( String[] args )
    // assert <boolean_expression> : <detail_expression>;

    // enquanto exceções são usadas para testar situações que não temos controle,
    // asserções são usadas para documentar e verificar premissas quanto à lógica do código
    // asserções são usadas para documentar e verificar premissas quanto à lógica do código;
    // use para verificar/documentar situações que você sabe que nunca ou sempre devem acontecer
    // use para verificar/documentar pós e pré-condições
    // com assertções, fica mais fácil rastrear um erro em uma sessão de debug

    // se <boolean_expression> for false, um AssertionError é lançado
    // se <boolean_expression> for false, um AssertionError é lançado;
    // o segundo argumento é convertido para uma String e usada como texto
    // na mensagem de AssertionError
    // na mensagem de AssertionError, se for usado

    // não use assertions para:
    // testar parâmetros de métodos (pois assertions podem não estar habilitadas)
    // usar testes de assertions que produzam efeitos colaterais, e.g.
    // de desligadas, o programa rodará de uma forma; se ligadas, de outra forma
    // testar parâmetros de métodos (pois assertions podem estar desabilitadas);
    // não use assertions que produzam efeitos colaterais, e.g.,
    // se desligadas, o programa rodará de uma forma; se ligadas, de outra forma

    // asserções são desabilitadas por padrão e são voltadas para o desenvolvedor
    // devem ser não recuperáveis, fatais, e empregadas nas fases de desenv e teste
    // devem ser não recuperáveis, fatais, e empregadas nas fases de desenv. e teste
    // isto é, se na fase de testes um assert for false, podemos ter mais informações
    // quanto ao problema; deixe as assertions ligadas no teste e debug até ter certeza
    // de que aquela situação não acontecerá. Quando estiver satisfeito, desligue a assertion
  4. cesarvasconcelos revised this gist Sep 21, 2019. 1 changed file with 5 additions and 1 deletion.
    6 changes: 5 additions & 1 deletion AssertionTest.java
    Original file line number Diff line number Diff line change
    @@ -10,7 +10,8 @@ public static void main( String[] args )
    // assert <boolean_expression>;
    // assert <boolean_expression> : <detail_expression>;

    // use asserções para documentar e verificar premissas quanto à lógica do código
    // enquanto exceções são usadas para testar situações que não temos controle,
    // asserções são usadas para documentar e verificar premissas quanto à lógica do código
    // use para verificar/documentar situações que você sabe que nunca ou sempre devem acontecer
    // use para verificar/documentar pós e pré-condições

    @@ -25,6 +26,9 @@ public static void main( String[] args )

    // asserções são desabilitadas por padrão e são voltadas para o desenvolvedor
    // devem ser não recuperáveis, fatais, e empregadas nas fases de desenv e teste
    // isto é, se na fase de testes um assert for false, podemos ter mais informações
    // quanto ao problema; deixe as assertions ligadas no teste e debug até ter certeza
    // de que aquela situação não acontecerá. Quando estiver satisfeito, desligue a assertion

    // se não habilitar o -ea na VM options,
    // o programa rodará normalmente, sem exceções
  5. cesarvasconcelos revised this gist Sep 21, 2019. 1 changed file with 10 additions and 5 deletions.
    15 changes: 10 additions & 5 deletions AssertionTest.java
    Original file line number Diff line number Diff line change
    @@ -11,21 +11,26 @@ public static void main( String[] args )
    // assert <boolean_expression> : <detail_expression>;

    // use asserções para documentar e verificar premissas quanto à lógica do código
    // use para verificar pós e pré-condições
    // se <boolean_expression> for false, um AssertionError é lançado
    // use para verificar/documentar situações que você sabe que nunca ou sempre devem acontecer
    // use para verificar/documentar pós e pré-condições

    // se <boolean_expression> for false, um AssertionError é lançado
    // o segundo argumento é convertido para uma String e usada como texto
    // na mensagem de AssertionError

    // não use assertions para:
    // testar parâmetros de métodos
    // usar testes de assertions que produzam efeitos colaterais
    // testar parâmetros de métodos (pois assertions podem não estar habilitadas)
    // usar testes de assertions que produzam efeitos colaterais, e.g.
    // de desligadas, o programa rodará de uma forma; se ligadas, de outra forma

    // asserções são desabilitadas por padrão e são voltadas para o desenvolvedor
    // devem ser não recuperáveis, fatais, e empregadas nas fases de desenv e teste

    // se não habilitar o -ea na VM options,
    // o programa rodará normalmente, sem exceções
    // mas, se -ea for habilitado:
    // Exception in thread "main" java.lang.AssertionError
    // at br.edu.ifpb.AssertionTest.main(br.edu.ifpb.AssertionTest.java:10)
    // at br.edu.ifpb.AssertionTest.main(br.edu.ifpb.AssertionTest.java)
    // não precisa recompilar o código para passar -ea

    String e1 = lerEntrada( "Digite o número" );
  6. cesarvasconcelos revised this gist Sep 21, 2019. 1 changed file with 13 additions and 0 deletions.
    13 changes: 13 additions & 0 deletions AssertionTest.java
    Original file line number Diff line number Diff line change
    @@ -6,6 +6,19 @@
    public class AssertionTest {
    public static void main( String[] args )
    {
    // sintaxe:
    // assert <boolean_expression>;
    // assert <boolean_expression> : <detail_expression>;

    // use asserções para documentar e verificar premissas quanto à lógica do código
    // use para verificar pós e pré-condições
    // se <boolean_expression> for false, um AssertionError é lançado
    // o segundo argumento é convertido para uma String e usada como texto
    // na mensagem de AssertionError

    // não use assertions para:
    // testar parâmetros de métodos
    // usar testes de assertions que produzam efeitos colaterais
    // asserções são desabilitadas por padrão e são voltadas para o desenvolvedor
    // devem ser não recuperáveis, fatais, e empregadas nas fases de desenv e teste
    // se não habilitar o -ea na VM options,
  7. cesarvasconcelos revised this gist Nov 17, 2018. No changes.
  8. cesarvasconcelos created this gist Nov 17, 2018.
    48 changes: 48 additions & 0 deletions AssertionTest.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,48 @@
    package br.edu.ifpb;

    import java.util.Scanner;
    // vide: https://pempek.net/articles/2013/11/16/assertions-or-exceptions/

    public class AssertionTest {
    public static void main( String[] args )
    {
    // asserções são desabilitadas por padrão e são voltadas para o desenvolvedor
    // devem ser não recuperáveis, fatais, e empregadas nas fases de desenv e teste
    // se não habilitar o -ea na VM options,
    // o programa rodará normalmente, sem exceções
    // mas, se -ea for habilitado:
    // Exception in thread "main" java.lang.AssertionError
    // at br.edu.ifpb.AssertionTest.main(br.edu.ifpb.AssertionTest.java:10)
    // não precisa recompilar o código para passar -ea

    String e1 = lerEntrada( "Digite o número" );
    assert isEntradaNumérica( e1 ); // se for false, então java.lang.AssertionError

    String e2 = lerEntrada( "Digite outro número" );
    assert isEntradaNumérica( e2 ) : "A entrada " + e2 + " não é um número!"; // se for false, então java.lang.AssertionError

    System.out.println( "A soma: " + Double.parseDouble( e1 ) + Double.parseDouble( e2 ) );

    System.out.println( "Fim" );
    }

    static String lerEntrada( String frase )
    {
    System.out.print( frase + ": " );
    Scanner s = new Scanner( System.in );
    String entrada = s.nextLine();
    return entrada;
    }

    static boolean isEntradaNumérica( String entrada )
    {
    try
    {
    Double.parseDouble( entrada );
    return true;
    } catch ( NumberFormatException e )
    {
    return false;
    }
    }
    }