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

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

Жанры

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

Я также предпочитаю включать некий «заголовок» в имя метода (описывающий его область действия или назначение):

def test_053_default_to_current_directory

 # ...

end

def test_054_use_specified_directory

 # ...

end

Кроме прочего, неплохо оставлять хотя бы однострочный комментарий, касающийся цели и смысла теста. Вообще говоря, у каждого теста должна быть только одна цель.

А если нужно организовать некую среду выполнения, для чего требуется время? Неразумно делать это для каждого теста, и мы не вправе завести для данной цели отдельный метод (поскольку поведение не должно зависеть от порядка прогона).

Если всем тестам нужна особая среда, можно воспользоваться методами класса

setup
и
teardown
. Возможно, вам это покажется странным, но вызываются они для каждого теста. Если вы хотите выполнить настройку один раз, перед прогоном одного конкретного или всех тестов, то можете поместить соответствующий код в тело класса раньше всех тестовых методов (или даже до самого класса).

А если после выполнения всех тестов нужно разрушить созданную среду? По техническим причинам (так уж работает библиотека

Test::Unit
) сделать это трудно. «Самый лучший» способ — переопределить метод run всего комплекта тестов (но не метод класса
run
), обернув его функциональность. Рассмотрим пример в листинге 16.1.

Листинг 16.1. Подготовка и разрушение среды исполнения

require 'test/unit'

class MyTest < Test::Unit::TestCase

 def self.major_setup

# ...

 end

 def self.major_teardown

# ...

 end

 def self.suite

mysuite = super # Вызвать метод suite родителя.

def mysuite.run(*args) # Добавить синглетный метод

MyTest.major_setup

super

MyTest.major_teardown

end

mysuite # и вернуть новое значение.

 end

 def setup

# ...

 end

 def teardown

# ...

 end

 def test_001

# ...

 end

 def test_002

# ...

 end

 # ...

end

Вряд ли вы будете поступать так часто. О методе

suite
мы поговорим чуть позже, а пока продолжим рассмотрение отдельных тестов.

Что должно входить в тест? Нужно как-то решить, прошел он или нет. Для этой цели применяются утверждения.

Простейшее утверждение — это метод

assert
. Он принимает проверяемый параметр и еще один необязательный параметр (сообщение). Если значение параметра истинно (то есть все, кроме
false
и
nil
), тест прошел. В противном случае тест не прошел — тогда печатается сообщение, если оно было задано.

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

assert_equal(expected, actual) # assert(expected==actual)

assert_not_equal(expected, actual) # assert(expected!=actual)

assert_match(regex, string) # assert(regex =~ string)

assert_no_match(regex, string) # assert(regex string)

assert_nil(object) # assert(object.nil?)

assert_not_nil(object) # assert(!object.nil?)

Некоторые утверждения носят более объектно-ориентированный характер:

assert_instance_of(klass, obj) # assert(obj.instance_of? klass)

assert_kind_of(klass, obj) # assert(obj.kind_of? klass)

assert_respond_to(obj, meth) # assert(obj.respond_to? meth)

Другие относятся к исключениям и символам, которые генерируются методом

throw
. Понятно, что такие методы принимают блок.

assert_nothing_thrown { ... } # Не было throw.

assert_nothing_raised { ... } # Не было raise.

assert_throws(symbol) { ... } # Символ в результате throw.

assert_raises(exception) { ... } # Исключение в результате raise.

Есть еще несколько утверждений, но эти применяются чаще всего и отвечают почти всем потребностям. Дополнительную информацию можно найти в онлайновой документации на сайте http://ruby-doc.org.

Имеется еще метод

flunk
, который всегда завершается неудачно. Можно считать, что это некий вид заглушки.

Если при запуске тестового файла вы ничего специально не указываете, то по умолчанию вызывается консольный исполнитель тестов. Это возвращает нас к старой доброй технологии 1970-х годов. Имеются и другие исполнители, например графический

Test::Unit::UI::GTK::TestRunner
. Любой исполнитель тестов можно вызвать, обратившись к его методу
run
, которому передается специальный параметр, описывающий набор тестов:

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

Агенты ВКС

Вайс Александр
3. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Агенты ВКС

Двойник короля 17

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

Мастер 4

Чащин Валерий
4. Мастер
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Мастер 4

Последний Паладин. Том 2

Саваровский Роман
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 2

Двойник короля 21

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

Наследие Маозари 5

Панежин Евгений
5. Наследие Маозари
Фантастика:
фэнтези
юмористическое фэнтези
5.00
рейтинг книги
Наследие Маозари 5

Воин-Врач

Дмитриев Олег
1. Воин-Врач
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
6.00
рейтинг книги
Воин-Врач

Золотой ворон

Сакавич Нора
5. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Золотой ворон

Цикл "Отмороженный". Компиляция. Книги 1-14

Гарцевич Евгений Александрович
Отмороженный
Фантастика:
боевая фантастика
рпг
постапокалипсис
5.00
рейтинг книги
Цикл Отмороженный. Компиляция. Книги 1-14

Зодчий. Книга III

Погуляй Юрий Александрович
3. Зодчий Империи
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Зодчий. Книга III

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

INDIGO
11. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 7. Часть 5

Варяг

Мазин Александр Владимирович
1. Варяг
Фантастика:
альтернативная история
9.10
рейтинг книги
Варяг

Идеальный мир для Лекаря 15

Сапфир Олег
15. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 15

Ренегат космического флота

Борчанинов Геннадий
4. Звезды на погонах
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Ренегат космического флота