Je travaille sur un projet avec quelques formats de fichiers. Certains formats sont spécifiés par .xsds, d'autres par la documentation sur leurs sites Web respectifs, et certains sont des formats personnalisés personnalisés qui n'ont pas de documentation. Mwahahahaha.
Quel est le problème?
Je voudrais tester mes lecteurs de fichiers, mais je ne sais pas trop comment procéder. Le flux de l'application est en tant que tel:
file.___ ===> read by FileReader.java ===> which creates a Model object
où se trouve l' FileReader
interface
public interface FileReader {
public Model read(String filename);
}
Le Model
possède un certain nombre d'attributs qui sont remplis lors de la lecture du fichier. Cela ressemble à quelque chose
public class Model {
List<String> as;
List<String> bs;
boolean isAPain = true;
// ...
}
Qu'est-ce que j'ai essayé?
Ma seule idée était de créer des "générateurs" de fichiers pour chaque format de fichier. Ces générateurs sont essentiellement des constructeurs qui acceptent quelques variables (par exemple, le nombre de commentaires à générer dans un fichier) et produisent un exemple de fichier que je lis ensuite et compare le résultat Model
avec les variables que j'ai utilisées pour générer initialement le fichier.
Cela a cependant quelques problèmes:
- Les fichiers qu'il génère ne ressemblent pas à de vrais fichiers. Le générateur n'est en aucun cas conscient du contexte.
- Il est difficile de reconnaître si le générateur a généré des cas de bord, car c'est moi qui définit manuellement les variables. Cette méthode est à peine meilleure que moi pour créer une douzaine de fichiers d'exemple.
Existe-t-il de meilleures façons de procéder?
EDIT: unité changée en intégration puisque c'est ce que je veux dire.
EDIT2: Voici un exemple des cas marginaux que j'ai mentionnés.
Chaque fichier représente un graphique composé de sommets et d'arêtes. Ces sommets et arêtes peuvent être attachés de différentes manières, donc:
v1 -- e1 --> v2 <-- e2 -- v3
est différent de
v1 -- e1 --> v2 -- e2 --> v3
en ce que la direction des bords importe. Je ne suis pas sûr que cela soit dans la portée de la question, mais il est difficile de trouver tous les cas d'arête pertinents lorsque je règle manuellement le nombre de sommets, le nombre d'arêtes et que je génère simplement les connexions de manière aléatoire.
FileReader
mise en œuvre réelle )? Exemple: étant donné les cas marginaux trouvés dans les formats de fichier image , pour chaque entrée de table, si la combinaison de propriétés ligne / colonne est prise en charge, il devrait y avoir au moins un cas de test (un fichier de données) couvrant cette combinaison.