Ruby Юнит тесты и Continuous Integration

Из коробки с Ruby идет великолепный модуль для написания тестов для ваших программ:

Test::Unit - Ruby Unit Testing Framework

Вот как выглядит самый простой теcт:

require 'test/unit'

class TC_Sample < Test::Unit::TestCase
  def test_It
    assert( false )
  end
end

Результаты выполнения тестов печатаются на экран и по коду возврата можно узнать о том были ли ошибки, этого уже достаточно что бы подцепить запуск тестов к Continuous Integration серверу, например к CruiseControl, веб сайт проекта -- http://cruisecontrol.sourceforge.net/

Что можно улучшить?

Практически все Continuous Integration серверы поддерживают просмотр репортов по выполненым юнит тестам. Что нам это дает:

  1. Название теста неудачника
  2. Местонахождение источника ошибки

Форматов репортов несколько, самый распространенный - это JUnit. В Test::Unit тоже имеется возможность сохранять результат в этом формате, но для этого необходимо установить ci_reporter, давайте это сделаем:

$ gem install ci_reporter

И перепишем приведенный выше тест следующим образом:

require 'ci/reporter/rake/test_unit_loader'

class TC_Sample < Test::Unit::TestCase
  def test_It
    assert( false )
  end
end

Изменилась только одна строчка -- require 'ci/reporter/rake/test_unit_loader'

Теперь, после запуска, в той папке откуда был вызван тест будет создан файл test/reports/TEST-TC-Sample.xml, его и необходимо подсовывать CI серверу.

Если по какой либо причине вас не устраивает, что ci_reporter кладет свои репорты в папку test/reports, вы можете переопределить ее имя, выставив переменную окружения CI_REPORTS в нужное значение.

На этом все, появились вопросы, задавайте.