Это зависит от модуля, но моя общая стратегия:
Убедитесь, что логика содержимого файла отделена на 100% - если она отличается от различных методов - от механики файла (например, выбор каталога / открытие файлов / закрытие файлов / обработка ошибок).
Убедитесь, что механика файлов на 100% гибкая, например, Вы можете выбрать каталог / имя файла из внешнего драйвера.
Записать тесты для файловой механики, просто открыв указанный файл в указанном каталоге, закрыв его, убедившись, что ошибок не было, и что ожидаемый файл существует и имеет нулевой размер
создать массив тестовых данных, каждый элемент которого состоит из 3 частей
Входные данные для логики содержимого файла, возможно, в сочетании с тестовой конфигурацией, указывающей, какие методы из логики содержимого файла следует вызывать для этих данных, если это оправдано.
Ожидаемое имя файла для установки
Ожидаемое содержимое файла в форме ожидаемых файлов с тар-тар-шлами (точные файлы с точным ожидаемым содержимым, которое будет сгенерировано, и правильное ожидаемое имя).
Архив ожидаемых результатов должен находиться в отдельном подкаталоге (скажем, «ожидаемые_результаты» в каталоге, где находится ваш тестовый скрипт.
Вам нужен tarball, если ваша логика генерации файла выдает> 1 файл.
1036 **
Затем выполните цикл для каждого теста в массиве тестов, который вы ранее создали:
Создайте новый временный каталог "фактических результатов" (или очистите тот из предыдущего теста)
Установить каталог в вашем модуле на временный каталог; установите имя файла вашего модуля на ожидаемое имя файла из тестовой информации.
Запустить метод открытия файлов (ранее проверенный)
Запустите логику генерации контента из модуля, используя логические указания теста (если применимо) и входные данные теста.
Запустить метод закрытия файла (ранее проверенный)
Создать временный каталог с ожидаемыми временными результатами (или очистить тот, что был в последнем тесте)
Скопировать тарбол "ожидаемые результаты" из подкаталога теста "Ожидаемые результаты" во временный каталог "ожидаемые результаты", созданный в последней точке маркера
распакуйте этот архив в временный каталог «ожидаемые результаты» и удалите из него архив.
directory-diff - временный каталог временных ожидаемых результатов с временным каталогом фактических результатов (например, убедитесь, что оба имеют 100% одинаковый список файлов и что содержимое каждого файла на 100% одинаковое, либо через собственный Perl или используя diff
через system()
звонки.
Поскольку приведенная выше логика является очень общей, я обычно абстрагирую большую ее часть в модуль «Test :: FileGenerator», повторно используемый всеми модульными и интеграционными тестами, которые проверяют возможность генерации файлов.