ERRATA: Artigo Testes Eficazes na Java Magazine 50

Caros leitores, confiram a errata do artigo “Testes Unitários Eficazes”, publicado na Java Magazine 50.

ERRATA: Artigo Testes Eficazes na Java Magazine 50

 

Caros leitores, no artigo “Testes Unitários Eficazes”, por André Dantas Rocha e Sérgio Oliveira Kubota, publicado na Edição 50, detectamos um erro grave: a última listagem (Listagem 6) não foi incluída na revista. Pedimos nossas sinceras desculpas e afirmamos que o erro foi da Editora e não dos autores. A seguir, são fornecidas a listagem original (para dar contexto) e a faltante.

 

Listagem 1. Conversão de números em extenso (contendo defeitos)

package br.com.jm.extenso;

 

public abstract class Extenso {

  private static String[] unidades = { "", "um", "dois", "três", "quatro",

"cinco", "seis", "sete", "oito", "nove" };

 

  private static String[] dezenas1 = { "", "onze", "doze", "treze", "catorze",

   "quinze", "dezesseis", "dezesete", "dezoito", "dezenove" };

 

  private static String[] dezenas2 = { "", "dez", "vinte", "trinta",

"quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa" };

 

  private static String[] centenas = { "", "cem", "duzentos", "trezentos",

"quatrocentos", "quinhentos", "seiscentos", "setecentos", "oitocentos",

"novecentos" };

 

  private int[] particao;

  private String[] texto;

 

  public abstract String extenso(String valor) throws ValorInvalidoException;

 

  protected boolean numeroValido(String numero) {

boolean ok = true;

if (numero.length() > 4) {

ok = false;

} else {

if (!"".equals(numero)) {

try {

Integer.parseInt(numero);

} catch (NumberFormatException e) {

ok = false;

}

}

}

return ok;

  }

 

  protected String numeroExtenso(String numero) {

if (numero == null || numero.trim().equals("")) {

throw new ValorInvalidoException(numero);

}

 

int tam = numero.length();

 

particao = new int[]{ 0, 0, 0, 0 };

texto = new String[]{ "", "", "", "" };

 

for (int i = 0, j = 4 - tam; i < tam; i++, j++) {

particao[j] = numero.charAt(i) - 48;

}

 

extensoMilhar();

extensoCentena();

extensoDezena();

 

tratarMilhar();

tratarCentena();

tratarUnidade();

 

return texto[0] + texto[1] + texto[2] + texto[3];

  }

 

  private void tratarMilhar() {

if (particao[0] > 0) {

// milhar e unidade

if (particao[1] == 0 && particao[2] == 0 && particao[3] > 0) {

texto[0] += " e ";

}

// milhar e dezena

else if (particao[1] == 0 && particao[2] > 0 && particao[3] == 0) {

texto[0] += " e ";

}

// milhar e centena

else if (particao[1] > 0 && particao[2] == 0 && particao[3] == 0) {

texto[0] += " e ";

}

// milhar, dezena e unidade

else if (particao[1] == 0 && particao[2] > 0 && particao[3] > 0) {

texto[0] += " e ";

}

// milhar, centena e dezena

else if (particao[1] > 0 && particao[2] > 0 && particao[3] == 0) {

texto[0] += " e ";

}

// milhar, centena, dezena e unidade

else if (particao[1] > 0 && particao[2] > 0 && particao[3] > 0) {

texto[0] += " ";

}

}

  }

 

  private void tratarCentena() {

if (particao[1] > 0) {

// centena e unidade

if (particao[2] == 0 && particao[3] > 0) {

texto[1] += " e ";

}

// centena e dezena

else if (particao[2] > 0 && particao[3] == 0) {

texto[1] += " e ";

}

// centena, dezena e unidade

else if (particao[2] > 0 && particao[3] > 0) {

texto[1] += " e ";

}

}

  }

 

  private void tratarUnidade() {

if (particao[2] > 0) {

// dezena e unidade

if (particao[3] > 0 && !"".equals(texto[3])) {

texto[2] += " e ";

}

}

  }

 

  private void extensoMilhar() {

if (particao[0] > 0) {

if (particao[0] == 1) {

texto[0] = "mil";

} else {

texto[0] = unidades[particao[0]] + " mil";

}

}

  }

 

  private void extensoCentena() {

if (particao[1] > 0) {

if (particao[1] == 1 && (particao[2] > 0 || particao[3] > 0)) {

texto[1] = "cento";

} else {

texto[1] = centenas[particao[1]];

}

}

  }

 

  private void extensoDezena() {

if (particao[2] > 0) {

if (particao[2] == 1) {

texto[3] = "";

if (particao[3] == 0) {

texto[2] = dezenas2[particao[2]];

} else {

texto[2] = dezenas1[particao[3]];

}

} else {

texto[2] = dezenas2[particao[2]];

texto[3] = unidades[particao[3]];

}

} else {

texto[2] = dezenas2[particao[2]];

texto[3] = unidades[particao[3]];

}

  }

}

 

 

Listagem 2. Conversão de valores monetários em extenso

package br.com.jm.extenso;

 

public class MoedaExtenso extends Extenso {

  public String extenso(String valor) {

String reais = "";

String centavos = "";

String texto_reais = "";

String texto_centavos = "";

 

int valor_reais = 0;

int valor_centavos = 0;

 

if (valor == null) {

throw new ValorInvalidoException(valor);

}

 

int indice = valor.indexOf(",");

if (indice >= 0) {

reais = valor.substring(0, indice);

centavos = valor.substring(indice + 1);

 

if (!numeroValido(reais)) {

throw new ValorInvalidoException(reais);

}

 

if (!numeroValido(centavos)

|| (centavos.length() == 1 && !"0".equals(centavos))

|| centavos.length() > 2) {

throw new ValorInvalidoException(centavos);

}

 

try {

valor_reais = Integer.parseInt(reais);

if (valor_reais > 0) {

texto_reais = numeroExtenso(reais);

}

} catch (NumberFormatException e) {

// tratar

}

 

try {

valor_centavos = Integer.parseInt(centavos);

if (valor_centavos > 0) {

texto_centavos = numeroExtenso(centavos);

}

} catch (NumberFormatException e) {

// tratar

}

} else {

reais = valor;

if (!numeroValido(reais) || "".equals(reais)) {

throw new ValorInvalidoException(reais);

}

 

if (reais != null) {

try {

valor_reais = Integer.parseInt(reais);

if (valor_reais > 0) {

texto_reais = numeroExtenso(reais);

}

} catch (NumberFormatException e) {

throw new ValorInvalidoException(reais);

}

}

else {

throw new ValorInvalidoException(reais);

}

}

 

return unir(valor_reais, valor_centavos,

 texto_reais, texto_centavos);

  }

 

  private String unir(int valor_reais, int valor_centavos,

String texto_reais, String texto_centavos)

  {

if (valor_reais > 1) {

texto_reais += " reais";

}

 

if (valor_centavos > 1) {

texto_centavos += " centavos";

}

 

if (valor_reais > 0 && valor_centavos > 0) {

  texto_reais += " e ";

}

return texto_reais + texto_centavos;

  }

}

 

Listagem 6. Conversão de números em extenso (corrigida)

package br.com.jm.extenso;

 

public abstract class Extenso {

 

  /* implementação original dos métodos e atributos */

 

  private String unir(int valor_reais, int valor_centavos, String texto_reais,

String texto_centavos) {

 

if (valor_reais == 0 && valor_centavos == 0) {

texto_reais = "zero";

} else {

if (valor_reais == 1) {

texto_reais += " real";

} else if (valor_reais > 1) {

texto_reais += " reais";

}

 

if (valor_centavos == 1) {

texto_centavos += " centavo";

} else if (valor_centavos > 1) {

texto_centavos += " centavos";

}

 

if (valor_reais > 0 && valor_centavos > 0) {

texto_reais += " e ";

}

}

return texto_reais + texto_centavos;

  } 

}

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados