Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

 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
, имеющейся в UNIX; вызывать ее следует как фильтр после обычной тестовой программы.

ruby testfile.rb | unit_diff

Программа понимает следующие флаги:

– h Справка о порядке запуска

– v Номер версии

– b Не считать различными фрагменты, различающиеся только по количеству

пробелов

– c Выполнять контекстное сравнение

– k Не удалять временные файлы

– l Включать в дельту номера строк

– u Выполнять унифицированное сравнение

Программа

autotest
наблюдает за всеми вашими комплектами тестов и запускает те, которые были недавно изменены. Она предназначена для тех лентяев, которым трудно даже ввести имя файла для прогона тестов.

Для пользования этим инструментом нужно соблюдать некоторые соглашения об именах. Правила простые:

• все тесты должны находиться в каталоге

test
;

• имена всех файлов должны начинаться с

Test_
;

• имена классов должны начинаться с

Test
;

• подлежащий тестированию код должен находиться в каталоге

lib
;

• файлам в каталоге

lib
должны соответствовать файлы в каталоге
test
(их имена, конечно, должны начинаться с
test_
).

Будучи запущена, программа

autotest
прогоняет тесты по мере их обновления. Если какой-то тест завершается неудачно, она будет прогонять его снова и снова, пока вы не исправите ошибку. Она начнет «сверху», если нажать комбинацию клавиш Ctrl+C, и завершится, если нажать Ctrl+C во второй раз.

Программа

multiruby
позволяет тестировать код относительно разных версий Ruby. Она входит в комплект ZenTest, но пока еще работает не очень стабильно и плохо документирована.

16.3. Работа с отладчиком Ruby

Честно

говоря, отладчик Ruby не особенно популярен. Лично я им не пользуюсь и встречал не так уж много людей, которые с ним работали. Но сознавать, что он есть, приятно. Ниже приводится краткое описание работы с ним.

Для вызова отладчика нужно просто затребовать библиотеку

debug
— например, в командной строке:

ruby -rdebug rayfile.rb

В ответ на приглашение вида (

rdb:1
) вы можете вводить различные команды, например
list
для получения текста всей программы или ее части, step для пошагового исполнения метода и т.д. Некоторые команды перечислены в таблице 16.1 (полужирным шрифтом набраны сокращения).

Таблица 16.1. Наиболее употребительные команды отладчика

Команда Описание
break
Установить точку прерывания или получить их список.
delete
Удалить все или некоторые точки прерывания.
catch
Установить точку перехвата или получить их список.
step
Вход внутрь метода.
next
Перейти к следующей строке (без захода внутрь метода).
help
Справка (вывести список всех команд).
quit
Выйти из отладчика.

В листинге 16.4 приведен код простой программы (даже слишком простой, чтобы ее отлаживать).

Листинг 16.4. Простая программа для демонстрации работы отладчика

STDOUT.sync = true

def palindrome?(word)

 word == word.reverse

end

def signature(w)

 w.split("").sort.join

end

def anagrams?(w1,w2)

 signature(w1) == signature(w2)

end

print "Give me a word: "

w1 = gets.chomp

print "Give me another word: "

w2 = gets.chomp

verb = palindrome?(w1) ? "is" : "is not"

puts "'#{w1}' #{verb} a palindrome."

verb = palindrome?(w2) ? "is" : "is not"

puts "'#{w2}' #{verb} a palindrome."

Поделиться:
Популярные книги

Студент из прошлого тысячелетия

Еслер Андрей
2. Соприкосновение миров
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Студент из прошлого тысячелетия

Барон ломает правила

Ренгач Евгений
11. Закон сильного
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Барон ломает правила

Телохранитель Генсека. Том 2

Алмазный Петр
2. Медведев
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Телохранитель Генсека. Том 2

Инкарнатор

Прокофьев Роман Юрьевич
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Инкарнатор

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Печать зверя

Кас Маркус
7. Артефактор
Фантастика:
городское фэнтези
аниме
5.00
рейтинг книги
Печать зверя

Кодекс Крови. Книга IХ

Борзых М.
9. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IХ

Локки 2. Потомок бога

Решетов Евгений Валерьевич
2. Локки
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Локки 2. Потомок бога

Двойник Короля 4

Скабер Артемий
4. Двойник Короля
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Двойник Короля 4

Я до сих пор не царь. Книга XXVII

Дрейк Сириус
27. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор не царь. Книга XXVII

Я – Стрела. Трилогия

Суббота Светлана
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
6.82
рейтинг книги
Я – Стрела. Трилогия

Глубокий космос

Вайс Александр
9. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Глубокий космос

На границе империй. Том 10. Часть 10

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 10

Как я строил магическую империю 10

Зубов Константин
10. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
5.00
рейтинг книги
Как я строил магическую империю 10