Я работаю над проектом с несколькими форматами файлов. Некоторые форматы определяются .xsds, другие - документацией на соответствующих веб-сайтах, а некоторые являются собственными внутренними форматами, которые не имеют документации. Mwahahahaha.
В чем проблема?
Я хотел бы проверить свои программы для чтения файлов, но я не совсем уверен, как это сделать. Поток приложения таков:
file.___ ===> read by FileReader.java ===> which creates a Model object
где FileReader
интерфейс
public interface FileReader {
public Model read(String filename);
}
Model
Имеет ряд атрибутов , которые заполняются при чтении файла. Это выглядит примерно так
public class Model {
List<String> as;
List<String> bs;
boolean isAPain = true;
// ...
}
Что я пробовал?
Моя единственная идея состояла в том, чтобы создать файловые «генераторы» для каждого формата файла. Эти генераторы в основном являются компоновщиками, которые принимают несколько переменных (например, количество комментариев для генерации в файле) и выводят образец файла, который я затем читаю, и сравнивают полученный результат Model
с переменными, которые я использовал для первоначальной генерации файла.
Это имеет несколько проблем:
- Файлы, которые он генерирует, не похожи на реальные файлы. Генератор не знает контекста.
- Трудно распознать, сгенерирован ли генератор для граничных случаев, так как я задаю переменные вручную. Этот метод едва ли лучше, чем я, создающий дюжину примеров файлов.
Есть ли лучшие способы сделать это?
РЕДАКТИРОВАТЬ: изменение единицы для интеграции, поскольку это то, что я на самом деле имею в виду.
РЕДАКТИРОВАТЬ 2: Вот пример крайних случаев, которые я упомянул.
Каждый файл представляет собой граф, состоящий из вершин и ребер. Эти вершины и ребра могут быть присоединены по-разному, поэтому:
v1 -- e1 --> v2 <-- e2 -- v3
отличается от
v1 -- e1 --> v2 -- e2 --> v3
в этом направлении края имеют значение. Я не уверен, входит ли это в суть вопроса, но сложно придумать все подходящие случаи ребер, когда я вручную устанавливаю количество вершин, количество ребер и просто генерирую соединения случайным образом.
FileReader
реализации)? Пример: учитывая граничные случаи, найденные в форматах файлов изображений , для каждой записи таблицы, если поддерживается комбинация свойств строки / столбца, должен быть хотя бы один тестовый пример (файл данных), охватывающий эту комбинацию.