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

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату