Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
require 'test/unit' unless defined? $ZENTEST and $ZENTEST
class TestAlpha < Test::Unit::TestCase
def test_process
raise NotImplementedError, 'Need to write test_process'
end
def test_process_bang
raise NotImplementedError, 'Need to write test_process_bang'
end
end
module TestAlpha
class TestBeta < Test::Unit::TestCase
def test_bar
raise NotImplementedError, 'Need to write test_bar'
end
def test_bar_equals
raise NotImplementedError, 'Need to write test_bar_equals'
end
def test_foo
raise NotImplementedError, 'Need to write test_foo'
end
def test_foo_eh
raise NotImplementedError, 'Need to write test_foo_eh'
end
def test_foo_equals
raise NotImplementedError, 'Need to write test_foo_equals'
end
end
end
# Number of errors detected: 9
Обратите внимание, что каждый тестовый метод возбуждает исключение (предложение
raise
Исходный файл почему-то не включается в тестовый. Можно поместить в начало тестового файла директиву
require 'file'
test/unit
В командной строке можно указать и второй параметр. Если добавить код в тестируемый класс, то тестовые классы окажутся устаревшими. Чем обновлять их вручную, можно сгенерировать только «обновления»:
zentest file.rb tfile.rb >tfile2.rb
В комплект входит еще одна полезная программа:
unit_diff
assert_equal ("foo", "bar")
1) Failure:
testme(Foo) [(irb):7]:
<"foo"> expected but was
<"bar">.
Тут все просто и понятно. Но предположим, что каждая из переданных строк (string) состояла из нескольких строчек (line), а различие начиналось только в седьмой строчке. Программа
unit_diff
diff
ruby testfile.rb | unit_diff
Программа понимает следующие флаги:
-h Справка о порядке запуска
-v Номер версии
-b Не считать различными фрагменты, различающиеся только по количеству
пробелов
-c Выполнять контекстное сравнение
-k Не удалять временные файлы
-l Включать в дельту номера строк
-u Выполнять унифицированное сравнение
Программа
autotest
Для пользования этим инструментом нужно соблюдать некоторые соглашения об именах. Правила простые:
• все тесты должны находиться в каталоге
test
• имена всех файлов должны начинаться с
Test_
• имена классов должны начинаться с
Test
• подлежащий тестированию код должен находиться в каталоге
lib
• файлам в каталоге
lib
test
test_
Будучи запущена, программа
autotest
Программа
multiruby
16.3. Работа с отладчиком Ruby
Честно говоря, отладчик Ruby не особенно популярен. Лично я им не пользуюсь и встречал не так уж много людей, которые с ним работали. Но сознавать, что он есть, приятно. Ниже приводится краткое описание работы с ним.
Для вызова отладчика нужно просто затребовать библиотеку
debug
ruby -rdebug rayfile.rb
В ответ на приглашение вида (
rdb:1
list
Таблица 16.1. Наиболее употребительные команды отладчика
Команда | Описание |
---|---|
<b>b</b>reak | Установить точку прерывания или получить их список. |
<b>del</b>ete | Удалить все или некоторые точки прерывания. |
<b>cat</b>ch | Установить точку перехвата или получить их список. |
<b>s</b>tep | Вход внутрь метода. |
<b>n</b>ext | Перейти к следующей строке (без захода внутрь метода). |
<b>h</b>elp | Справка (вывести список всех команд). |
<b>q</b>uit | Выйти из отладчика. |