Описание тестов в виде спецификации
Информация по теме
Цель: научиться описывать тесты в стиле спецификаций, оценивать степень покрытия тестами.
Материалы для подготовки
- Наикратчайшее введение в написание спецификаций Minitest.
- Список методов, доступных в режиме описания спецификаций.
- Спецификация метода
Kernel#describe
. - Описание метода expect для описания ожиданий
- Описание ожиданий для тестов.
- Описание эффективного подхода к использованию спецификаций RSpec.
- Домашная страница библиотеки Simplecov.
Презентация
Код, написанный на занятии от 07.11.2017 можно скачать по ссылке. Код, написанный на занятии 14.11.2017 можно скачать по ссылке. Для распаковки архива используйте команду 7z x 02-2017-09-code.7z
.
Настройка приложения для написания тестов
Для настройки проекта необходимо:
- Убедиться, что исходный код тестируемой бизнесс-логики находится в каталоге
lib
. - Установить
minitest
иrake
в качестве зависимостей проекта. - Настроить Rake для запуска тестов.
- Создать каталог
test
для размещения тестов. - Сформировать
test_helper.rb
, в который поместить общую конфигурацию. - Написать тесты в каталоге
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. Для её подключения к проекту необходимо выполнить следующие действия:
- Установить библиотеку с помощью Bundler.
- Настроить сборку статистики при запуске тестов.
Настройка сборки статистики
Необходимо в файл test_helper.rb
добавить следующие строчки:
require 'simplecov'
SimpleCov.start
Эту строчку надо добавить после подключения внешних библиотек и до подключения тестируемых файлов. Это связано с тем, что отслеживание будет происходить только для файлов, которые были подключены после начала отслеживания со стороны SimpleCov.
Отбрасывание тестовых файлов
Бывает, что в статистику по покрытию попадают также и тестовые файлы. Для того, чтобы этого не случалось, необходимо правильным образом настроить SimpleCov:
SimpleCov.start do
add_filter "/test/"
end
Практическое занятие
Решите задачу №4 пункта 2.1 задачника, текст задачи находится на странице 23.