Как проверить каталог? - PullRequest
       2

Как проверить каталог?

0 голосов
/ 20 сентября 2011

У меня есть метод помощник, который читает файлы и каталоги и создает представление HTML.Например:

def build_segment(path)
    html = ""
    Dir.new(path).each do |f|
      next if f == "." or f == ".."
      html << "<li>"
      if File.ftype(f) == 'directory'
        html << "<span class=folder>#{h(f.to_s)}</span>"
        html << "<ul>"
        html << build_segment(Dir.new(f))
        html << "</ul>"
      elsif File.ftype(f) == 'file'
        html << "<span class=file>#{h(f.to_s)} </span>"
      end
      html << "</li>"
    end
    html
  end

Обычно для проверки какого-либо метода мы используем фиктивные объекты - для отправки поддельного объекта в метод тестирования.Но вот настоящая файловая система.Я могу изобрести только один вариант - создать поддельные файлы в ОС, а затем протестировать метод.

Есть ли более аккуратный и умный способ проверить этот метод?Спасибо

Ответы [ 3 ]

2 голосов
/ 20 сентября 2011

Трудность заключается в том, насколько тесно связан ваш код.Тот же код перебирает структуры каталогов и генерирует html.

В идеале, ваш код должен быть отделен так, чтобы у вас было:

  1. синтаксический анализатор каталогов, который строит структуру данных из данного каталогасостав;затем
  2. средство визуализации для создания вашего HTML
1 голос
/ 10 декабря 2011

Это более элегантный способ. Поддельная файловая система - fakefs

0 голосов
/ 22 сентября 2011

Я предлагаю заглушить и смоделировать поведение внутренних вещей: что-то вроде

Dir.stub(:new).with(path).and_return([list of File mocks?])

Таким образом, вы можете быть уверены, что тестируете только свой код, а не код из различных библиотек ruby.вы используете.

Я обнаружил, что делаю это с такими вещами, как поведение на основе http.Если я использую библиотеки ruby ​​http, я не только не хочу тратить время на тестирование этих вещей, но и дорого обходить запросы http и ждать ответов.Уничтожение этих вещей позволяет мне проверить, как мой код реагирует на определенные типы ответов.

Я думаю, что все дело в изоляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...