Информация по теме

Цель: научиться описывать тесты в стиле спецификаций, оценивать степень покрытия тестами.

Материалы для подготовки

Презентация

Код, написанный на занятии от 07.11.2017 можно скачать по ссылке. Код, написанный на занятии 14.11.2017 можно скачать по ссылке. Для распаковки архива используйте команду 7z x 02-2017-09-code.7z.

Настройка приложения для написания тестов

Для настройки проекта необходимо:

  1. Убедиться, что исходный код тестируемой бизнесс-логики находится в каталоге lib.
  2. Установить minitest и rake в качестве зависимостей проекта.
  3. Настроить Rake для запуска тестов.
  4. Создать каталог test для размещения тестов.
  5. Сформировать test_helper.rb, в который поместить общую конфигурацию.
  6. Написать тесты в каталоге test.

Настройка Rake для запуска тестов

В Rakefile необходимо добавить следующее содержимое:

Rake::TestTask.new(:test) do |t|
  t.libs << "test"
  t.libs << "lib"
  t.test_files = FileList['test/**/*_test.rb']
end

Эти строки формируют задачу для запуска тестов, которые расположены в каталоге test и имеют суффикс _test.rb. Все остальные файлы, расположенные в данном каталоге не будут запускаться данной задачей, в частности файл test_helper.rb.

Данная задача также модифицирует путь для подключения внешних документов. Таким образом в рамках тестов вы можете подключать тестируемые файлы с помощью require, а не require_relative. При этом это относится как каталогу lib, так и каталогу test. Последнее можно использовать для подключения заглушек.

Если вы правильно скопировали тесты, тогда их можно запускать с помощью команды rake test.

Формирование файла test_helper.rb

Базовая настройка данного файла заключается в подключении Minitest, для чего достаточно подключить файл minitest/autorun:

require 'minitest/autorun'

Эта строчка подключает Minitest в режиме автоматического запуска. Это позволит в будущем вручную запускать все файлы, в которых находятся тесты и видеть результат.

Созданный файл необходимо подключать во всех файлах с тестами. Рекомендуется подключать тестируемые файлы сразу в test_helper.rb, хотя можете и в конкретных тестирующих файлах.

Оценка степени покрытия тестами

В реальности точно оценить степень покрытия тестами достаточно сложно, так как интерпретатор Ruby самостоятельно исполняет любой код в подключённых файлах, а также по ряду других причин. В результате базовые цифры по покрытию кода тестами изначально достаточно высоки. Значит будем их поднимать к наивысшим результатам.

Для оценки степени покрытия мы будем использовать библиотеку SimpleCov. Для её подключения к проекту необходимо выполнить следующие действия:

  1. Установить библиотеку с помощью Bundler.
  2. Настроить сборку статистики при запуске тестов.

Настройка сборки статистики

Необходимо в файл test_helper.rb добавить следующие строчки:

require 'simplecov'
SimpleCov.start

Эту строчку надо добавить после подключения внешних библиотек и до подключения тестируемых файлов. Это связано с тем, что отслеживание будет происходить только для файлов, которые были подключены после начала отслеживания со стороны SimpleCov.

Отбрасывание тестовых файлов

Бывает, что в статистику по покрытию попадают также и тестовые файлы. Для того, чтобы этого не случалось, необходимо правильным образом настроить SimpleCov:

SimpleCov.start do
  add_filter "/test/"
end

Практическое занятие

Решите задачу №4 пункта 2.1 задачника, текст задачи находится на странице 23.