Tempo de leitura: menos de 1 minuto

E aí pessoal, alguém, um dia, já teve a necessidade de criar teste para uma funcionalidade ou serviço de dedução de códigos? Normalmente nesses serviços a quantidade de parâmetros a serem considerados é grande, gerando muitas combinações.
Nesse caso, um teste unitário para o serviço não é satisfatório, deixando muitos cenários descobertos, podendo gerar bugs na dedução desses códigos. Na empresa onde trabalho, isso ocorre frequentemente, sempre estamos criando serviços desse tipo.
Para aumentar a confiabilidade e qualidade do serviço, uma boa alternativa é usar Test Tables.
Numa Test Table, cada linha da planilha ou arquivo texto, torna se um cenário de teste, facilitando a escrita das tables, podendo ser escrita inclusive pelo funcional/especialista de negócio.
Como o funcional/especialista do negócio cuidará de escrever os cenário, nosso trabalho é fazer com que a aplicação entenda a Test Table, para que os cenários escritos possam ser validados pela aplicação.
Vejamos um exemplo de uma test Table:
|modeloDof|cfop|cst|tipoOperacao|resultado| |01|1101|01|1|101| |01|5102|50|2|501| |01|1101|03|1|301| ...
Nesse exemplo temos 4 parâmetros e 1 resultado, cada linha dessa tabela é um cenário.
A interface do serviço dedutor de código é a seguinte:
[code language=”java”]
interface DedutorCodigoService {
public String deduzir(String pModeloDof, String pCfop, String pCst, String pTipoOperacao);
}
[/code]
Agora vamos criar o teste para o serviço:
[code language=”java”]
public class DedutorCodigoServiceTest {
@Test
public void testDeduzirCodigo(){
final DedutorCodigoService dedutorService = new DedutorCodigoServiceImpl();
// leio o arquivo texto, e transformo-o em uma lista de strings
final File testTable = new File("/home/…/testTable.txt");
final FileInputStream inputStream = new FileInputStream(testTable);
final List linhasTestTable = IOUtils.readLines(inputStream, ISO88591);
// os erro serão adicionados nessa lista
final List<String> erros = new ArrayList<String>();
for(String linhaTxt : linhasTestTable){
final String[] linha = StringUtils.splitPreserveAllTokens(linhaTxt.substring(1, linhaTxt.length() – 1), ‘|’);
final String modeloDof = linha[0];
final String cfop = linha[1];
final String cst = linha[2];
final String tipoOperacao = linha[3];
final String resultadoEsperado = linha[3];
final String codigoDeduzido = dedutorService.deduzir(modeloDof, cfop, cst, tipoOperacao);
// caso resultado esperado seja diferente do deduzido, adiciono a linha a lista de erros
if(!codigoDeduzido.equals(resultadoEsperado){
erros.add(linhaTxt);
}
}
// se lista de erros contiver algum item, então falho o teste e exibo os erros.
if(!erros.isEmpty()){
Assert.fail("Os Seguintes cenários de teste falharam: \n" + StringUtils.join(erros,"\n"));
}
}
}
[/code]
Nesse teste utilizo da biblioteca Apache Commons, para facilitar a vida na hora de ler o arquivo .txt, e para tratamento de Strings.
A versão original desse teste, foi escrita em Groovy , e era mais extenso, pois tratava alguns Exceptions, rodava mais que uma test table e um registro fake (Nf), era criado, mas resolvi rescrever em Java e resumir para facilitar o entendimento.
Espero que tenham gostado.
Valeu pessoal.