2
Before explaining my problem I will show my CSV file upload code.
public String uploadArquivo() {
try {
removeInSession(LISTA_TIPO_INDICIOS);
removeInSession(LISTA_INDICIOS);
removeInSession(LISTA_ERRO);
final File arquivoLeitura = new File(getArquivo());
final LineNumberReader linhaLeitura =
new LineNumberReader(new FileReader(arquivoLeitura));
linhaLeitura.skip(arquivoLeitura.length());
final int qtdLinha = linhaLeitura.getLineNumber() + 1;
final BufferedReader leitor = new BufferedReader(
new InputStreamReader(new FileInputStream(getArquivo())));
String linha = null;
leitor.readLine();
for (int indiceIndicio = 2; indiceIndicio <= qtdLinha; indiceIndicio++) {
statusMatricula = false;
linha = leitor.readLine();
if (linha == null) {
break;
}
final String[] dadosCSV = linha.split(VIRGULA);
final int numberPositions = dadosCSV.length;
setNumberPositions(numberPositions);
if (!dadosCSV[TIPO_DO_INDICIO].isEmpty()) {
tipoIndicio = new TipoIndicioEntity();
tipoIndicio.setCodigo(
Integer.parseInt(dadosCSV[TIPO_DO_INDICIO]));
tipoIndicio = tipoDeIndicioService
.getPorId(tipoIndicio.getCodigo());
}
if (!dadosCSV[CODIGO_UJ].isEmpty()) {
uJ = new PessoaJuridicaPublicaEntity();
uJ.setCodigo(Long.parseLong(dadosCSV[CODIGO_UJ]));
uJ = pessoaJuridicaPublicaService.pesquisarPorId(uJ);
}
final ValidaCPF validadorCPF = new ValidaCPF();
final Pattern pattern = Pattern.compile("^-?\\d*\\,\\d{2}$");
final Matcher matcher = pattern.matcher(dadosCSV[VALOR]);
if (!dadosCSV[NATUREZA].isEmpty()) {
naturezaIndicio
.setCodigo(Integer.parseInt(dadosCSV[NATUREZA]));
naturezaIndicio = naturezaIndicioService
.getPorId(naturezaIndicio.getCodigo());
}
if (!dadosCSV[CODIGO_DO_VINCULO].isEmpty()) {
tipoVinculo = new TipoVinculoEntity();
tipoVinculo.setCodigo(
Integer.parseInt(dadosCSV[CODIGO_DO_VINCULO]));
tipoVinculo = tipoVinculoService
.getPorId(tipoVinculo.getCodigo());
}
if (getNumberPositions() >= MATRICULA_PROPRIETARIO) {
if (!dadosCSV[MATRICULA_PROPRIETARIO].isEmpty()) {
usuarioCorporativo = new UsuarioCorporativoEntity();
usuarioCorporativo.setCodigoUsuario(Integer
.parseInt(dadosCSV[MATRICULA_PROPRIETARIO]));
usuarioCorporativo = usuarioCorporativoService.getPorId(
usuarioCorporativo.getCodigoUsuario());
}
}
final boolean expressaoInvalida = matcher.find() == false;
final boolean cpfInvalido = !validadorCPF.isCPF(dadosCSV[CPF]);
final boolean descricaoVazia = dadosCSV[DESCRICAO].isEmpty();
final boolean naturezaInvalida = naturezaIndicio == null;
boolean dataValidaEncontrada = false;
if (!dadosCSV[DATA_ADMISSAO].equals("")) {
final SimpleDateFormat format =
new SimpleDateFormat("dd/MM/yyyy");
format.setLenient(false);
try {
if (dadosCSV[DATA_ADMISSAO] != null
&& !dadosCSV[DATA_ADMISSAO].isEmpty()) {
final Date dataAdmissao =
format.parse(dadosCSV[DATA_ADMISSAO]);
}
} catch (final Exception e) {
dataValidaEncontrada = true;
}
}
final int qtdData = dadosCSV[DATA_ADMISSAO].length();
if (qtdData != 10) {
dataValidaEncontrada = true;
}
qtdMatriculo = dadosCSV[MATRICULA_PROPRIETARIO].length();
final char letra_anterior =
dadosCSV[MATRICULA_PROPRIETARIO].charAt(0);
final int vezes = 1;
int qtdCaracterMatriculaProprietario = 0;
for (qtdCaracterMatriculaProprietario =
1; qtdCaracterMatriculaProprietario < qtdMatriculo; qtdCaracterMatriculaProprietario++) {
final char letra_atual = dadosCSV[MATRICULA_PROPRIETARIO]
.charAt(qtdCaracterMatriculaProprietario);
}
if (qtdCaracterMatriculaProprietario != 4) {
statusMatricula = true;
}
if (getNumberPositions() <= 6) {
if (tipoIndicio == null
|| dadosCSV[TIPO_DO_INDICIO].isEmpty() || uJ == null
|| dadosCSV[CODIGO_UJ].isEmpty() || cpfInvalido
|| descricaoVazia || expressaoInvalida
|| naturezaIndicio == null) {
erroCSVList = ErroCSV.verificarErros6Linhas(dadosCSV,
tipoIndicio, uJ, naturezaIndicio,
expressaoInvalida, validadorCPF, erroCSVList,
indiceIndicio);
addInSession(LISTA_ERRO, erroCSVList);
} else {
verificarListaIndicios(listaTotalIndicio,
listaIndicioEntity, uJ, tipoIndicio, dadosCSV);
}
} else if (getNumberPositions() > 6
&& getNumberPositions() < 13) {
if (tipoIndicio == null
|| dadosCSV[TIPO_DO_INDICIO].isEmpty() || uJ == null
|| dadosCSV[CODIGO_UJ].isEmpty() || cpfInvalido
|| dadosCSV[DESCRICAO].isEmpty()
|| dadosCSV[DESCRICAO] == null || expressaoInvalida
|| descricaoVazia || naturezaIndicio == null
|| tipoVinculo == null || usuarioCorporativo == null
|| statusMatricula) {
erroCSVList = ErroCSV.verificarErros12Linhas(dadosCSV,
tipoIndicio, uJ, naturezaIndicio,
expressaoInvalida, validadorCPF, erroCSVList,
indiceIndicio, dataValidaEncontrada,
tipoVinculo, usuarioCorporativo);
addInSession(LISTA_ERRO, erroCSVList);
} else {
verificarListaIndicios(listaTotalIndicio,
listaIndicioEntity, uJ, tipoIndicio, dadosCSV);
}
} else if (getNumberPositions() >= 13) {
if (tipoIndicio == null
|| dadosCSV[TIPO_DO_INDICIO].isEmpty() || uJ == null
|| dadosCSV[CODIGO_UJ].isEmpty() || cpfInvalido
|| dadosCSV[DESCRICAO].isEmpty()
|| dadosCSV[DESCRICAO] == null || descricaoVazia
|| expressaoInvalida || naturezaIndicio == null
|| dadosCSV[NATUREZA].isEmpty()
|| dataValidaEncontrada || tipoVinculo == null
|| usuarioCorporativo == null || statusMatricula) {
erroCSVList = ErroCSV.verificarErros12Linhas(dadosCSV,
tipoIndicio, uJ, naturezaIndicio,
expressaoInvalida, validadorCPF, erroCSVList,
indiceIndicio, dataValidaEncontrada,
tipoVinculo, usuarioCorporativo);
addInSession(LISTA_ERRO, erroCSVList);
} else {
verificarListaIndicios(listaTotalIndicio,
listaIndicioEntity, uJ, tipoIndicio, dadosCSV);
}
}
}
leitor.close();
} catch (
final FileNotFoundException e) {
logger.error(e);
erroInterno();
e.printStackTrace();
} catch (final IOException e) {
logger.error(e);
erroInterno();
e.printStackTrace();
} catch (final NegocioException e) {
logger.error(e);
erroInterno();
e.printStackTrace();
} catch (final PrincipalException e) {
logger.error(e);
erroInterno();
e.printStackTrace();
}
return PAGE_IMPORTAR;
}
When the user selects the CSV file and clicks to send, this method is triggered, this code just above is working perfectly. What I need is to create a unit test for this method. The goal of the unit test is to test these validations below;
if (getNumberPositions() <= 6) {
if (tipoIndicio == null
|| dadosCSV[TIPO_DO_INDICIO].isEmpty() || uJ == null
|| dadosCSV[CODIGO_UJ].isEmpty() || cpfInvalido
|| descricaoVazia || expressaoInvalida
|| naturezaIndicio == null) {
erroCSVList = ErroCSV.verificarErros6Linhas(dadosCSV,
tipoIndicio, uJ, naturezaIndicio,
expressaoInvalida, validadorCPF, erroCSVList,
indiceIndicio);
addInSession(LISTA_ERRO, erroCSVList);
} else {
verificarListaIndicios(listaTotalIndicio,
listaIndicioEntity, uJ, tipoIndicio, dadosCSV);
}
Now I’ll explain my difficulty;
When unit testing is done it is necessary to create false records to perform simulation of the resources of an application.
But instead of creating fake records I would like to use the data from the CSV file itself in the act of running the tests for uploading the CSV file.
The way the system would behave would be that at the time the user was uploading the method uploadfile the test would be triggered at the same time using data from the CSV file itself.
For lack of experience in unit testing I’m having difficulty implementing. The same data being used in the CSV file and being able to get these records in my test class, I just need help to get records like the archiveLeitura!
What comes in my getArch()
What does the "getArchive()" method do? Just to understand what the input point of your code file is like.
– Dherik
Overall unit tests evaluate an expected output, not a block of code, your problem actually is that your file upload is all coupled with your validations, first you need to separate it from there
– Lucas Miranda