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
) — это исполняемая программа, которая генерирует файл с тестами на основе анализа вашего кода.
Тестируемый класс (Test
, а в начало имени метода — строка test_
. Иногда имена методов приходится «подправлять», например в случае с методом ==
(к имени которого нельзя добавлять никакой префикс) или если имя метода оканчивается на ?, ! или =. В листинге 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.
# 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