Методы модульного тестирования файлового ввода-вывода - PullRequest
5 голосов
/ 10 августа 2010

Я все еще относительно новичок в модульном тестировании. Я написал в Ruby класс, который принимает файл, ищет в этом файле заданный шаблон Regex, заменяет его и сохраняет изменения обратно в файл. Я хочу писать модульные тесты для этого метода, но я не знаю, как бы я поступил так. Может кто-нибудь сказать мне, как мы используем методы модульного тестирования, которые работают с файловым вводом-выводом?

Ответы [ 3 ]

6 голосов
/ 10 августа 2010

Проверьте это Как мне сохранить файл на диск для модульного тестирования?

По сути, идея та же: файловая система является зависимостью для вашего класса.Итак, представьте роль / интерфейс, который можно смоделировать в ваших юнит-тестах (чтобы вы не зависели при юнит-тестировании);методы в роли должны быть всем, что вам нужно от FileSystem -

Read()  # returns file_contents as a string or string[]
Write(file_contents) # same as above

Теперь вы можете использовать макет для возврата массива консервированных строк - ваш класс может затем обработать этот массив.В производственном коде реальная реализация роли будет попадать в файловую систему и возвращать массив строк.

2 голосов
/ 10 августа 2010

Если вы передаете файловый объект в ваш метод;попробуйте создать фиктивный объект файла, используйте несколько потоков ввода-вывода, чтобы добавить содержимое к объекту файла и передать его тестируемому методу.

Если вы просто передаете содержимое объекта с использованием некоторого потока данных, создайте фиктивный поток данных и передайте его методу.

Вы также можете выбрать фиктивный файл и создать файл.Объект из этого пути к файлу и передать его тестируемому методу.

2 голосов
/ 10 августа 2010

Вы можете создать файл с известным содержимым, выполнить замену, а затем проверить содержимое измененного файла с желаемым результатом.

Я бы посоветовал использовать временные файлы http://ruby -doc.org / core / classes / Tempfile.html для каждого запуска и хорошо читать в рамках модульного тестирования http://ruby -doc.org/stdlib/libdoc/test/unit/rdoc/classes/Test/Unit.html

...