Estou trabalhando em um projeto com alguns formatos de arquivo. Alguns formatos são especificados por .xsds, outros pela documentação em seus respectivos sites, e alguns são formatos internos personalizados que não possuem documentação. Mwahahahaha.
Qual é o problema?
Gostaria de testar meus leitores de arquivos, mas não tenho muita certeza de como fazê-lo. O fluxo do aplicativo é assim:
file.___ ===> read by FileReader.java ===> which creates a Model object
onde a FileReader
interface está
public interface FileReader {
public Model read(String filename);
}
O Model
possui vários atributos preenchidos quando o arquivo é lido. Parece algo como
public class Model {
List<String> as;
List<String> bs;
boolean isAPain = true;
// ...
}
O que eu tentei?
Minha única idéia era criar "geradores" de arquivo para cada formato de arquivo. Esses geradores são basicamente construtores que recebem algumas variáveis (por exemplo, número de comentários a serem gerados em um arquivo) e emitem um arquivo de amostra que, em seguida, leio e comparo o resultado Model
com as variáveis que usei para gerar o arquivo inicialmente.
Isso tem alguns problemas, no entanto:
- Os arquivos que ele gera não se parecem com arquivos reais. O gerador não tem nenhuma consciência do contexto.
- É difícil reconhecer se o gerador gerou casos de borda, pois sou eu quem define manualmente as variáveis. Esse método é pouco melhor do que eu criando uma dúzia de arquivos de amostra.
Existem maneiras melhores de fazer isso?
EDIT: Mudança de unidade para integração, já que é isso que eu realmente quero dizer.
EDIT2: Aqui está um exemplo dos casos extremos que mencionei.
Cada arquivo representa um gráfico composto de vértices e arestas. Esses vértices e arestas podem ser anexados de diferentes maneiras, portanto:
v1 -- e1 --> v2 <-- e2 -- v3
é diferente de
v1 -- e1 --> v2 -- e2 --> v3
em que a direção das bordas é importante. Não tenho certeza se isso está no escopo da pergunta, mas é difícil pensar em todos os casos de arestas pertinentes quando defino manualmente o número de vértices, o número de arestas e apenas giro as conexões aleatoriamente.
FileReader
implementação real )? Exemplo: considerando os casos extremos encontrados nos formatos de arquivo de imagem , para cada entrada da tabela, se a combinação de propriedades de linha / coluna for suportada, deve haver pelo menos um caso de teste (um arquivo de dados) que cubra essa combinação.