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

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

Жанры

Программирование на языке 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

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

Защитник

Кораблев Родион
11. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Защитник

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

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

Позывной "Князь" 2

Котляров Лев
2. Князь Эгерман
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Позывной Князь 2

Искатель 1

Шиленко Сергей
1. Валинор
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Искатель 1

Лекарь Империи 10

Карелин Сергей Витальевич
10. Лекарь Империи
Фантастика:
городское фэнтези
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 10

Лекарь Империи 9

Карелин Сергей Витальевич
9. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
5.00
рейтинг книги
Лекарь Империи 9

Великий род

Сай Ярослав
3. Медорфенов
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Великий род

Отморозок 1

Поповский Андрей Владимирович
1. Отморозок
Фантастика:
попаданцы
5.00
рейтинг книги
Отморозок 1

Эммануэль

Арсан Эммануэль
1. Эммануэль
Любовные романы:
эро литература
7.38
рейтинг книги
Эммануэль

Изгой Проклятого Клана. Том 2

Пламенев Владимир
2. Изгой
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Изгой Проклятого Клана. Том 2

Последний наследник

Тарс Элиан
11. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний наследник

Младший сын

Балашов Дмитрий Михайлович
1. Государи московские
Научно-образовательная:
история
8.50
рейтинг книги
Младший сын

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

ЖЛ 8

Шелег Дмитрий Витальевич
8. Живой лед
Фантастика:
аниме
5.60
рейтинг книги
ЖЛ 8