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

на главную

Жанры

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

class MyTests < Test::Unit::TestCase

 # ...

end

# Явное указание исполнителя тестов...

runner = Test::Unit::UI::Console::TestRunner

runner.run(MyTests)

Параметром может быть любой объект, обладающий методом

suite
, который возвращает объект, представляющий комплект тестов. Что все это означает?

Познакомимся к понятием комплекта тестов ближе. Оказывается, комплект тестов может состоять из набора тестов или набора подкомплектов. Следовательно, можно сгруппировать тесты так, что будет прогоняться либо только один набор, либо сразу все.

Пусть, например, есть три набора тестов, и вы хотите прогнать их как единый комплект. Можно было бы поступить так:

require 'test/unit/testsuite'

require 'tc_set1'

require 'tc_set2'

require 'ts_set3'

class TS_MyTests

 def self.suite

mysuite = Test::Unit::TestSuite.new

mysuite << TC_Set1.suite

mysuite << TC_Set2.suite

mysuite << TS_Set3.suite

return mysuite

 end

end

Test::Unit::UI::Console::TestRunner.run(TS_MyTests)

Но такая сложность ни к чему. Имея отдельные наборы тестов, библиотека

Test::Unit
в состоянии просмотреть пространство объектов и объединить их все в один комплект. Поэтому следующий код тоже будет работать (и даже вызывать подразумеваемый по умолчанию исполнитель тестов):

require 'test/unit'

require 'tc_set1'

require 'tc_set2'

require 'ts_set3'

Библиотека

Test::Unit
располагает и другими возможностями, а в дальнейшем, вероятно, будет усовершенствована. Самую свежую информацию ищите в сети.

16.2. Комплект инструментов ZenTest

Этот великолепный инструментарий написал Райан Дэвис (Ryan Davis). Основной инструмент (

zentest
) — это исполняемая программа, которая генерирует файл с тестами на основе анализа вашего кода.

Тестируемый класс (class under test — CUT) служит основой тестового класса (test class — ТС). На каждом уровне области видимости в начало имени класса добавляется строка

Test
, а в начало имени метода — строка
test_
. Иногда имена методов приходится «подправлять», например в случае с методом
==
(к имени которого нельзя добавлять никакой префикс) или если имя метода оканчивается на ?, ! или =. В листинге 16.2 приведен пример подлежащего тестированию кода:

Листинг 16.2. Класс, подлежащий тестированию

class Alpha

 class Beta

attr_accessor :foo, :bar

def initialize

end

def foo?

@foo

end

 end

 def initialize

 end

 def process

 end

 def process!

 end

 def ==(other)

 end

 def ===(other)

 end

end

После запуска команды

zentest file.rb >tfile.rb
получится файл, показанный в листинге 16.3.

Листинг 16.3. Результат работы ZenTest

# Code Generated by ZenTest v. 3.2.0

# classname: asrt / meth = ratio%

# Alpha::Beta: 0 / 7 = 0.00%

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

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

Камень. Книга 4

Минин Станислав
4. Камень
Фантастика:
боевая фантастика
7.77
рейтинг книги
Камень. Книга 4

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

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

Арестант

Константинов Андрей Дмитриевич
7. Бандитский Петербург
Детективы:
боевики
8.29
рейтинг книги
Арестант

Я все еще граф. Книга IX

Дрейк Сириус
9. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я все еще граф. Книга IX

Воин-Врач

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

Я снова не князь! Книга XVII

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

Лютая

Шёпот Светлана Богдановна
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Лютая

Кодекс Императора V

Сапфир Олег
5. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора V

Тыл-фронт

Головин Андрей
Проза:
военная проза
проза прочее
5.00
рейтинг книги
Тыл-фронт

#Бояръ-Аниме. Газлайтер. Том 24

Володин Григорий Григорьевич
24. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 24

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

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

Я еще царь. Книга XXX

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

Ваше Сиятельство 3

Моури Эрли
3. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 3

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI