RSpec - это инструмент тестирования компьютерного предметно-ориентированного языка (DSL) (конкретной области приложения) , написанный на языке программирования Ruby для тестирования кода Ruby. [4] Это среда разработки, управляемая поведением (BDD), которая широко используется в производственных приложениях. Основная идея, лежащая в основе этой концепции, заключается в разработке через тестирование (TDD), когда тесты пишутся первыми, а разработка основана на написании достаточного количества кода, который будет выполнять эти тесты с последующим рефакторингом . Он содержит собственный фреймворк mocking, который полностью интегрирован в фреймворк на основеJMock . [5] Простота синтаксиса RSpec делает его одним из популярных инструментов тестирования приложений Ruby. Инструмент RSpec можно использовать, установив rspec
гем, который состоит из трех других драгоценных камней, а именно rspec-core
, rspec-expectation
и rspec-mock.
[4]
Разработчики) | Дэвид Челимски, Майрон Марстон, Энди Линдеман, Джон Роу, Пол Касаретто, Сэм Фиппен, Брэдли Шефер [1] |
---|---|
Первый выпуск | 18 мая 2007 г . [2] |
Стабильный выпуск | 3.8.0 / 4 августа 2018 г. [3] |
Репозиторий | |
Операционная система | Кроссплатформенность |
Тип | Среда разработки, управляемая поведением / Инструмент тестирования |
Лицензия | Лицензия MIT |
Веб-сайт | rspec |
История
RSpec был начат как эксперимент Стивеном Бейкером в 2005 году вместе с членами его команды Дэйвом Астелсом, Аслаком Хеллесой и Дэвидом Челимски. Челимский отвечал за разработку RSpec-Rails, которая облегчила интеграцию с Ruby on Rails. Первоначальный выпуск, то есть RSpec 1.0, вышел в мае 2007 года и содержал множество основных функций RSpec, которые также включены в последние выпуски. Однако из-за некоторых технических проблем, таких как скорость тестирования, позже он был прекращен. Третья версия RSpec, то есть RSpec 3, была выпущена в июле 2014 года, и в ней было много новых функций, таких как проверочные дубли , составные сопоставления и многое другое. Последняя доступная в настоящее время версия RSpec - RSpec 3.7.
Применение
Описание поведения объектов
Как упоминалось выше, RSpec предоставляет предметно-ориентированный язык для описания поведения объектов . В ключевые слова , используемые в RSpec похожи на те , которые используются в других языках и / или рамки TDD. [6] Например, если рассматриваются ключевые слова, используемые в Test :: Unit, они могут быть сопоставлены с ключевыми словами RSpec следующим образом:
- Утверждение становится ожиданием
- Метод тестирования становится примером кода
- Тестовый пример становится группой примеров
Есть много таких ключевых слов, которые используются в одном контексте, но с похожими именами. Синтаксис RSpec обеспечивает легкость чтения и описывает поведение кода, тем самым предоставляя свободу программисту. Каждая среда тестирования работает в следующем потоке - с учетом некоторого контекста, когда происходит какое-либо событие, какой результат ожидается. Такие методы, как describe (), context () и it (), образуют аналогию и скелет соответственно тестового кода.
описывать()
Метод description () используется для описания класса, метода или группы примеров. Это внешний блок, который на самом деле содержит тестовый код и отображает характеристики заключенного в него кода. Этот метод принимает ряд аргументов и необязательный блок. [6] Однако обычно один или два аргумента используются для описания поведения группы примеров. Первый аргумент представляет собой ссылку на класс или модуль, тогда как второй аргумент является необязательным, тип данных которого будет String . [6] Примеры групп также могут быть вложенными. Пример использования метода описания выглядит следующим образом: [6]
описывает пользователь , «без остатка счета» { .... } => Пользователь с не счетами баланса
контекст ()
Блок context () используется для описания контекста, в котором используется класс или метод, упомянутые в блоке описания. Это можно рассматривать как псевдоним слова description () в данном сценарии, и оба они могут использоваться как взаимозаменяемые. Как правило, description () используется для вещей, а context () - для контекстов. Это помогает достичь разных результатов в разных сценариях. Упомянутый выше пример можно описать с помощью метода context () следующим образом: [6]
описать пользователя сделать контекст "нет баланса на счете" сделать .... конец конец
[6] Использование context () упрощает сканирование файла спецификации и дает понять, к чему он относится.
Это()
Это метод RSpec, который описывает спецификации образца в контексте. Блок it () принимает строку в качестве аргумента, а строку после ключевого слова it можно рассматривать как функцию, которую должен выполнять блок, или, другими словами, ее можно рассматривать как тестовый пример. Рассмотрим следующий пример: [6]
описать User do context "не имеет баланса на счете" do it "не разрешено санкционировать жилищный ссуду" do put "" На ссуду не могут быть применены санкции из-за отсутствия баланса на счете ". конец конец конец
RSpec :: Ожидания
В RSpec ожидание - это утверждение, выражающее состояние, в котором что-то ожидается, в определенный момент выполнения примера кода. RSpec использует простую структуру и ключевые слова, такие как should () и should_not (), чтобы выразить ожидания. Он поддерживает сопоставители, то есть объекты, которые пытаются сопоставить ожидаемый результат как для общих операций, так и для необычных выражений. Например, если ожидаемым результатом результата является, скажем, числовое значение 5, ожидание RSpec, в котором используется сопоставление, равное ему, будет записано следующим образом: [6]
result.should equal(5)
RSpec :: Моки
RSpec предоставляет библиотеку под названием RSpec :: Mocks для создания тестовых двойников, которые облегчают сосредоточение внимания на ролях, обнаружении интерфейсов , но, прежде всего, достигают прогресса без реализованных зависимостей, тем самым обеспечивая изоляцию от связывания и недетерминизма . [6]
Инструменты и интеграция
Есть много инструментов, которые поддерживают RSpec, например:
- Авто-тест
- RCov
- Редакторы, такие как Vim и Emacs
- IDE, такие как Aptana и RubyMine .
- RakeTask
- TextMate
RSpec также предоставляет ряд утилит и точек расширения для поддержки расширения RSpec для удовлетворения специфических потребностей домена. Например, использование метаданных, связанных с группами и примерами, для целей отчетности, использование глобальной конфигурации для назначения блоков до и после каждой группе примеров, использование макросов и т. Д.
Другие инструменты тестирования Ruby
- Тест :: Единица
- МиниТест
- Огурец
- Следует
- Капибара и др.
Рекомендации
- ^ Основная команда RSpec . Проверено 8 апреля 2013 года.
- ^ "все версии rspec" . rubygems.org . Проверено 11 февраля 2014 .
- ^ «Релизы - rspec / rspec» . Проверено 31 августа 2018 г. - через GitHub .
- ^ а б «Введение в RSpec | Проект Odin» . www.theodinproject.com . Проверено 18 февраля 2017 .
- ^ «jMock - выразительная библиотека имитирующих объектов для Java» . www.jmock.org . Проверено 18 февраля 2017 .
- ^ Б с д е е г ч я J K "Книга RSpec: разработка на основе поведения с RSpec, Cucumber и друзьями Дэвида Челимски, Дэйва Астелса, Зака Денниса, Аслака Хеллесоя, Брайана Хелмкампа, Дэна Норта | Прагматическая книжная полка" . pragprog.com . Проверено 11 февраля 2017 .
дальнейшее чтение
1. Начало работы с RSpec: (шаги по установке) http://rspec.info/
2. Бек, К. (2014). Разработка через тестирование на примере . Бостон: Эддисон-Уэсли.
Внешние ссылки
- Официальный веб-сайт
- RSpec-2
- За пределами разработки, основанной на тестировании - Разработка, основанная на поведении. Google TechTalk от Дэйва Астелса на BDD с использованием RSpec.
- Статья RSpec Best Practices от Джареда Кэрролла, полученная 24 апреля 2011 г.
- Поведенческое тестирование с использованием RSpec Статья Брюса Тейта, полученная 21 июля 2011 г.