РСпец
![]() | Эта статья может быть слишком технической для понимания большинства читателей . ( февраль 2017 г. ) |
Разработчик(и) | Стивен Бейкер, Дэвид Челимски, Майрон Марстон, Энди Линдеман, Джон Роу, Пол Казаретто, Сэм Фиппен, Брэдли Шефер [1] |
---|---|
Первоначальный выпуск | 18 мая 2007 г [2] |
Стабильная версия | 3.13.0 [3] ![]() |
Репозиторий | |
Операционная система | Кросс-платформенный |
Тип | Платформа разработки, основанная на поведении / Инструмент тестирования |
Лицензия | МОЯ лицензия |
Веб-сайт | rspec |
RSpec компьютерного доменного языка (DSL) (определенного домена приложения), — это инструмент тестирования написанный на языке программирования Ruby для тестирования кода Ruby. [4] Это разработки на основе поведения (BDD) среда , которая широко используется в производственных приложениях. Основная идея этой концепции заключается в разработке через тестирование (TDD), при которой сначала пишутся тесты, а разработка основана на написании ровно такого количества кода, которое будет выполнять эти тесты, после чего следует рефакторинг . Он содержит собственный фреймворк для макетирования , который полностью интегрирован в фреймворк, основанный на JMock . [5] Простота синтаксиса RSpec делает его одним из популярных инструментов тестирования приложений Ruby. Инструмент RSpec можно использовать, установив rspec
драгоценный камень , который состоит из трех других драгоценных камней, а именно rspec-core
, rspec-expectation
и rspec-mock.
[4]
История
[ редактировать ]RSpec был запущен в качестве эксперимента Стивеном Бейкером в 2005 году вместе с членами его команды Дэйвом Астелсом, Аслаком Хеллесой и Дэвидом Челимски. Челимский отвечал за разработку RSpec-Rails, который облегчил интеграцию с Ruby on Rails. Первоначальный выпуск, то есть RSpec 1.0, вышел в мае 2007 года и содержал множество основных функций RSpec, которые также включены в последние выпуски. Однако из-за некоторых технических проблем, таких как скорость тестирования, позже его прекратили. Третья версия RSpec, то есть RSpec 3, была выпущена в июле 2014 года и содержала множество новых функций, таких как проверка двойников, составные сопоставления и многое другое.
Использование
[ редактировать ]Описание поведения объектов
[ редактировать ]Как упоминалось выше, RSpec предоставляет предметно-ориентированный язык для описания поведения объектов . Ключевые слова, используемые в RSpec, аналогичны тем, которые используются в других языках и/или средах TDD. [6] Например, если учитывать ключевые слова, используемые в Test::Unit, их можно сопоставить с ключевыми словами RSpec следующим образом:
- Утверждение становится ожиданием
- Метод тестирования становится примером кода
- Тестовый пример становится группой примеров
Существует множество таких ключевых слов, которые используются в одном и том же контексте, но со схожими названиями. Синтаксис RSpec обеспечивает простоту чтения и описывает поведение кода, тем самым предоставляя свободу программисту. Каждая среда тестирования работает по следующему принципу: с учетом некоторого контекста, когда происходит какое-то событие, какой результат ожидается. Такие методы, как описывать() , контекст() и it() образует аналогию и скелет соответственно тестового кода.
описывать()
[ редактировать ]Метод описать() используется для описания класса, метода или группы примеров. Это внешний блок, который фактически содержит тестовый код и отображает характеристики заключенного в нем кода. Этот метод принимает несколько аргументов и необязательный блок. [6] Однако обычно для описания поведения группы примеров используются один или два аргумента. Первый аргумент представляет ссылку на класс или модуль, тогда как второй аргумент является необязательным и имеет тип данных String . [6] Группы примеров также могут быть вложенными. Пример использования метода описания выглядит следующим образом: [6]
describe User, "with no account balance" {....}
=> User with no account balance
контекст()
[ редактировать ]Блок context() используется для описания контекста, в котором используется класс или метод, упомянутый в блоке описания. Это можно рассматривать как псевдоним слова описать() в этом сценарии, и они оба могут использоваться как взаимозаменяемые. В целом, описать() используется для вещей и context() используется для контекстов. Это помогает добиться разных результатов в разных сценариях. Упомянутый выше пример можно описать с помощью context() следующим образом: [6]
describe User do
context "has no account balance" do
....
end
end
[6] С использованием context() упрощает сканирование файла спецификации и дает понять, к чему он относится.
это()
[ редактировать ]Это метод RSpec, который описывает характеристики образца в контексте. Блок it() принимает строку в качестве аргумента, а строку после ключевого слова 'it' можно рассматривать как функцию, которую ожидается от блока, или, другими словами, ее можно рассматривать как тестовый пример. Рассмотрим следующий пример: [6]
describe User do
context "has no account balance" do
it "is not allowed to sanction a housing loan" do
puts "The loan cannot be sanctioned due to no balance in the account."
end
end
end
RSpec::Ожидания
[ редактировать ]В RSpec ожидание — это оператор, выражающий состояние, в котором ожидается что-то в определенный момент выполнения примера кода. RSpec использует простую структуру и ключевые слова, такие как must() и must_not(), для выражения ожиданий. Он поддерживает средства сопоставления, то есть объекты, которые пытаются сопоставить ожидаемый результат как для обычных операций, так и для необычных выражений. Например, если ожидаемым результатом результата является, скажем, числовое значение 5, ожидание RSpec, которое использует эквивалентное для того же самого сопоставителя, будет записано следующим образом: [6]
result.should equal(5)
RSpec::Mocks
[ редактировать ]RSpec предоставляет библиотеку под названием RSpec::Mocks для создания тестовых двойников , которые облегчают сосредоточение внимания на ролях, обнаружении интерфейсов , но, прежде всего, достижение прогресса без реализованных зависимостей , тем самым обеспечивая изоляцию от связанности и недетерминизма . [6]
Инструменты и интеграция
[ редактировать ]RSpec поддерживается многочисленными текстовыми редакторами и пакетами покрытия. RSpec также предоставляет ряд утилит и точек расширения для поддержки расширения RSpec для удовлетворения потребностей конкретной предметной области. Например, использование метаданных, связанных с группами и примерами, для целей отчетности, использование глобальной конфигурации для назначения блоков до и после каждой группе примеров, использование макросов и т. д.
Другие инструменты тестирования Ruby
[ редактировать ]Ссылки
[ редактировать ]- ^ Основная команда RSpec . Проверено 8 апреля 2013 г.
- ^ «все версии rspec» . Rubygems.org . Проверено 11 февраля 2014 г.
- ^ «Выпуск 3.13.0» . 4 февраля 2024 г. Проверено 20 февраля 2024 г.
- ^ Jump up to: а б «Введение в RSpec | Проект Odin» . www.theodinproject.com . Проверено 18 февраля 2017 г.
- ^ «jMock — выразительная библиотека макетов объектов для Java» . www.jmock.org . Проверено 18 февраля 2017 г.
- ^ Jump up to: а б с д и ж г час я дж к «Книга RSpec: разработка, основанная на поведении, с RSpec, Cucumber и друзьями Дэвида Челимски, Дэйва Астелса, Зака Денниса, Аслака Хеллесоя, Брайана Хелмкампа, Дэна Норта | Прагматичная книжная полка» . pragprog.com . Проверено 11 февраля 2017 г.
Дальнейшее чтение
[ редактировать ]1. Начало работы с RSpec: (этапы установки) http://rspec.info/
2. Бек, К. (2014). Разработка через тестирование на примере . Бостон: Аддисон-Уэсли.
Внешние ссылки
[ редактировать ]- Официальный сайт
- РСпец-2
- За пределами разработки через тестирование — разработка через поведение. Google TechTalk Дэйва Астелса о BDD с использованием RSpec.
- Статья Джареда Кэрролла о лучших практиках RSpec , получена 24 апреля 2011 г.
- Тестирование на основе поведения с помощью RSpec . Статья Брюса Тейта, полученная 21 июля 2011 г.