Давным-давно мне пришлось тестировать программу, генерирующую изображение файла postscript. Одним из быстрых способов выяснить, выдает ли программа правильный ожидаемый результат, было выполнить md5 результата для сравнения с md5 «заведомо хорошего» вывода, который я проверил заранее.
К сожалению, Postscript содержит текущее время в файле. Это время, конечно, отличается в зависимости от того, когда выполняется тест, поэтому изменяется md5 результата, даже если получен ожидаемый результат. В качестве исправления я просто удалил дату с помощью sed.
Это хороший и простой сценарий. Нам не всегда так везет. Например, сейчас я программирую программу записи, которая создает большой толстый RDF-файл, содержащий кучу анонимных узлов и uuid. В принципе невозможно проверить функциональность всей программы с помощью простого md5, и единственным способом было бы прочитать файл с помощью ридера, а затем проверить вывод с помощью этого ридера. Как вы, вероятно, понимаете, это открывает новую банку червей: во-первых, вам нужно написать читатель (что может занять много времени), во-вторых, вы предполагаете, что читатель функционально корректен и в то же время синхронизирован с писателем. Если и читатель, и писатель синхронизированы, но исходят из неправильных предположений, читатель скажет «нет проблем», но формат файла на самом деле неправильный.
Это общая проблема, когда вам нужно выполнить функциональное тестирование формата файла, а формат файла не полностью воспроизводим с помощью предоставленных вами входных данных. Как вы относитесь к этому делу?