Mini test: IELTS Reading Practice Tests

Тест-Драйв MINI CABRIO.Блог MINI БорисХоф

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

ЭКСТЕРЬЕР


После рестайлинга четырехместный кабриолет Б класса получил новую платформу UKL, современную техническую начинку, а также расширенный список доступных опций. Габариты нового Кабрио немного изменились:

  • длина: 3821 мм;
  • ширина: 1727 мм;
  • высота: 1415 мм;
  • колесная база: 2495 мм;
  • клиренс: 115 мм.

Обновленный автомобиль стал просторнее и практичней. Модель сохранила все черты фирменного дизайна, но стала выглядеть современнее благодаря нескольким дополнениям:

  • округлые фары головного освещения с хромированной окантовкой и секциями дневных ходовых LED-огней по контуру;
  • шестиугольная решетка радиатора из множества тонких горизонтально ориентированных ребер;
  • воздухозаборник на переднем бампере;
  • обновленный логотип МИНИ стал компактней, а через его крылья теперь просматривается бампер;
  • по бокам на переднем бампере в углублениях разместили круглые блоки противотуманных фар.

Мягкая тканевая крыша с электроприводом практически не изменилась. Z-образный механизм раскладывания позволяет фиксировать крышу в трех положениях — открытом, закрытом и с притоком воздуха через люк в крыше. Полностью поднять или опустить верх можно за 18 сек, при скорости 30 км/ч. MINI оставляет возможность заказать тканевый верх с рисунком флага Union Jack.

 

САЛОН


Общая архитектура салона у нового поколения Кабрио сохранилась, но появились и некоторые дополнения. Во-первых, на центральной панели появился сенсорный экран мультимедийной системы с LED-подсветкой. Теперь владельцам этой модели доступны разнообразные интеллектуальные сервисы, с которыми ездить станет безопасней и веселей. В мультимедийный центр перенесли и фирменное устройство, считающее, сколько минут автомобиль проехал с открытым верхом. Раньше этот датчик находился на рулевой колонке.

Подсвечивающая окантовка дисплея – фирменная черта всех новых МИНИ. Цвет LED-кольца меняется в зависимости от действий водителя, режима езды и даже настроек климат-контроля. Также опционально салон может быть оснащен системой изменяемой подсветки MINI Excitement. Все это позволяет создать в салоне атмосферу, соответствующую вашему настроению.

Объем багажника при сложенной крыше составляет 160 л, а с поднятым верхом увеличивается до 215 л. Это вполне внушительные цифры для компактного городского кабриолета. Тем более, что при необходимости вместительность багажника можно увеличить, сложив спинки задних сидений в пропорции 50/50. Складные спинки доступны уже в базовой комплектации.

ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ


Переднеприводный кабриолет получил обновленную и более мощную линейку бензиновых и дизельных турбодвигателей. Автомобиль доступен с 6-ступенчатой механической КПП и с 6-ступенчатой коробкой-«автомат» Aisin.

Базовые комплектации кабриолетов ONE оснащаются рядным трехцилиндровым бензиновым турбодвигателем объемом 1,5 л и мощностью в 102 л.с. До 100 км/ машина разгоняется за 10,6 с. В более мощной комплектации автомобиль оснащен аналогичным, но уже 136-сильным двигателем с 220 НМ, который в зависимости от типа трансмиссии разгоняется до 100 км/ч всего за 8,8 либо за 8,7 с. Топовый MINI Cooper S оснащен 192-сильным двухлитровым турбодвигателем, который позволяет ему разгоняться до 100 км/ч за 7,2-7,1 с.

Дизельная линейка двигателей представлена двумя версиями. MINI Cooper D комплектуется 3-цилиндровым 1,5-литровым двигателем мощностью 116 л.с. SD – модель, которая идет только с автоматической КПП. Она оснащена 3-цилиндровым турбодвигателем объемом 1,5 л. Мощность силовой установки составляет 170 л.с. и 360 Нм, позволяя кабриолету набирать скорость в 100 км/ч за 7,7 с.

Хотя мощность и динамические характеристики третьего поколения Кабрио возросли, он остается достаточно экономичным. Тем более что регулировать расход топлива можно, выбрав один из трех режимов движения:

  • GREEN – это спокойный и экономичный режим, который идеально подходит для езды в условиях плотного городского трафика.
  • MID – сбалансированный режим для максимального комфорта в дороге.
  • SPORT – режим, в котором усиливается острота рулевого управления и отклик педали.

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

Что касается безопасности, то в каждом Кабрио есть активная система защиты от опрокидывания. За задними сиденьями смонтирована штанга, которая в случае опрокидывания авто за долю секунды поднимается, обеспечивая пассажирам и водителю защиту головы.

ПАКЕТЫ И ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ

Традиционно программа MINI YOURS предлагает огромные возможности для кастомизации автомобиля. Вы можете выбрать каждую деталь на свой вкус:

  • разные колесные диски;
  • полосы на капоте;
  • крыша с фирменным флагом Union Jack;
  • цвет крыши и корпусов зеркал;
  • цвета обивки салона;
  • эксклюзивная обивка сидений с флагом Union Jack;
  • новые поверхности для дверных панелей.


Все эти возможности для персонализации доступны для любого пакета комплектации. Этих пакетов традиционно три. Плюс спортивная модификация JOHN COOPER WORKS CHILI.

SALT. В этот базовый пакет входят:

  • бортовой компьютер;
  • набор креплений для размещения вещей в салоне;
  • велюровые напольные коврики;
  • косметические зеркала с подсветкой;
  • лампы для чтения.

PEPPER. В этой комплектации доступен полный набор пакета SALT с несколькими дополнениями:

  • кожаное спортивное рулевое колесо;
  • датчик дождя;
  • система автоматического управления фарами и стеклоочистителями.

CHILI. Топовая комплектация, как всегда, направлена на то, чтобы придать автомобилю более спортивный характер:

  • легкосплавные диски;
  • расширенная отделка;
  • светодиодные фары;
  • спортивные передние сидения;
  • кожаный спортивный руль.

JOHN COOPER WORKS CHILI. Самая спортивная и мощная версия Кабрио дополнена такими элементами:

  • аэродинамичный спойлер;
  • двухцветные 18-дюймовые легкосплавные диски;
  • спортивный кожаный руль;
  • 8-ступенчатая трансмиссия Steptronic;
  • полный пакет MINI Excitement.

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

  • Главная страница
  • БЛОГ MINI БОРИСХОФ
  • ТЕСТ-ДРАЙВ MINI CABRIO — БЛОГ MINI БОРИСХОФ

Обратный звонок

Цены носят информационный характер и ни при каких условиях не являются публичной офертой, определяемой положениями Статьи 435 ГК РФ.

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

© MINI 2021

Kodix Automotive

SL — Программа создания тестов и проведения тестирования

Общие сведения

Программа MiniTest-SL предназначена для индивидуальной проверки теоретических знаний по различным направлениям (Testing).
Программа является универсальной и может работать как в режиме тестирования, так и в режиме создания тестов.

Возможности программы.

  1. Количество тестов неограниченно
  2. Количество разделов в тесте неограниченно
  3. Количество вопросов в тесте неограниченно
  4. Размер текста вопроса неограничен
  5. Генерация защищенного файла теста на основе проекта
  6. Использование в вопросах форматированного текста
  7. Использование в вопросах изображений (в т.ч. анимированных)
  8. Использование в вопросах звукового сопровождения
  9. Возможность ограничения количества прохождений теста
  10. Возможность ограничения времени
  11. Выбор вопросов при тестировании в произвольном порядке
  12. Пропуск вопросов с возможностью их возврата в дальнейшем
  13. Возможность установки режима количества попыток ответа на вопрос
  14. Возможность изменения порядка следования вопросов
  15. Возможность выбора случайным образом определенного количества вопросов из общего числа при тестировании
  16. Выбор правильных ответов один из девяти
  17. Выбор правильных ответов несколько из девяти
  18. Ввод прямого ответа (текст, число, дата)
  19. Ввод правильной последовательности
  20. Установление соответствия
  21. Выбор правильного ответа из списка (ответы в списке перемешиваются)
  22. Подстановка значений (динамически изменяет содержание вопроса)
  23. Установка положения правильного ответа на изображении
  24. Создание подсказки к каждому вопросу
  25. Визуальный редактор тестов ( конструктор тестов )
  26. Индикация вопросов, на который был дан ответ (общий)
  27. Индикация вопросов, на который был дан ответ (с разбивкой верно — неверно)
  28. Учет затраченного времени в секундах на каждый вопрос
  29. Введение статистики прохождения теста
  30. Возможность расчета оценки по заданному алгоритму.
  31. Формирование протоколов результата
  32. Изменение форм протоколов результата тестирования
  33. Подключение к программе собственных форм протоколов тестирования
  34. Гибкая система настроек, позволяющая изменять режим тестирования
  35. Легкость установки тестов других авторов (достаточно скопировать файл теста в папку с тестами)
  36. Работа в многопользовательском режиме.
  37. Тестирование локально и со сменных носителей
  38. Не требует инсталляции и как следствие, не изменяет Вашу систему

Установка и запуск

Программа работает под управлением операционных систем Windows.
Требования к аппаратной части компьютера не превышают требований предъявляемой установленной операционной системы.
Для установки необходимо:
1. Создать новую папку. (Рекомендуется использовать в имени папки латинские буквы без пробелов).
2. Скопировать содержимое архива minitest.zip в эту папку.

Запуск программы файл MiniTest.exe.
Программа позволяет при запуске использовать дополнительный параметр.
— MiniTest.exe g — загрузится редактор тестов
— MiniTest.exe t — загрузится модуль тестирования.
При запуске без параметров загружаемый модуль выбирается вручную.
При многопользовательском режиме на компьютере, где установлена программа, необходимо установить на папку с программой полный доступ к папкам и файлам программы. Для этого может потребоваться права администратора.
На рабочих местах, где будет проходить тестирование, создать ярлык к файлу MiniTest.exe. В свойствах ярлыка в строке «Объект» добавить через пробел параметр t. В таком варианте на рабочих местах программа будет запускаться в режиме тестирования, а результаты будут сохраняться на «главном компьютере».
При проведении тестирования со сменного носителя (например, флеш-диск), нет необходимости устанавливать программу на компьютер. Запускайте программу со сменного носителя. Если тестирование производится в сети, также установите на папку с программой полный доступ. И в первом, и во втором случаях, результаты тестирования будут сохраняться на сменном носителе.
Программа позволяет работать также в режиме удаленного рабочего стола под управлением терминального сервера.
Программа не вносит никаких изменений в компьютер. Для удаления программы достаточно удалить папку с программой.

Программа при своей работе использует следующие папки.
\PROJECT — для хранения исходного материала тестов (проектов).
\TESTS — для хранения сгенерированных тестовых файлов.
\WRK — для хранения данных используемых в процессе работы.
\DOCUM — для хранения шаблонов и протоколов результатов тестирования.
\DOCUM\STD — индивидуальные протоколы результатов .
\DOCUM\TST — списочные протоколы результатов по каждому тесту.

Для удаленного управления процессом тестирования в сети используйте дополнительно программу RegTest-SL

Редактор тестов

Назначение редактора тестов, разработка и создание файла теста, в определенном формате, который используется при тестировании. Главное окно редактора тестов состоит из списка проектов в форме таблицы и визуального редактора проекта тестов со своими элементами управления. Редактор проектов тестов имеет два режима: просмотр и редактирование, что обеспечивает визуальную оценку созданных тестов. При выборе проекта, (двойной клик) проект теста будет загружен в редактор в режиме просмотра.
Для входа в режим редактирования служит кнопка [Редактировать].

Кнопки главного меню редактора тестов
Новый Создание нового проекта ( Открывает окно ввода данных нового проекта )
Удалить Удаление проекта ( Полностью удаляет проект с диска )
Копия Копирование проекта ( Создает копию с текущего проекта под новым именем )
Создать Генерация теста ( Создает на базе проекта рабочий тест для тестирования )
Справка Справочные данные по программе
Выход Завершение работы редактора
Что такое тест нам известно. Для создания используется визуальный редактор проекта тестов, который представляет собой текстовый редактор, специально созданный для разработки тестов.
Редактор имеет набор средств по управлению шрифтами, цветом, изображениями, таблицами.
Дополнительно имеются функции применительно к разработке тестов.
Все функции конструктора тестов объединены в панель инструментов, которая активна в режиме «Редактор».

Некоторые особенности редактора тестов.
Кнопки, изменяющие параметры текста действуют на выделенную область, если выделения нет, изменению подвергается целиком слово.
Кнопки (Копировать, вставить) работают только с текстом.
Установка цвета — клик на выбранном цвете в таблице цветов. Кнопки (Текст) (Фон)
Кнопка (Изображение) имеет дополнительное меню, которое действует на выделенный элемент и позволяет изменить положение изображения относительно текста.
Кнопка (Таблица) имеет дополнительное меню, которое действует на выделенный элемент и позволяет изменить положение таблицы на экране, а также изменять вид обрамления таблицы. При создании таблицы Вы описываете таблицу 2-мя параметрами:
— количество столбцов описывается шириной каждого столбца в процентах от ширины таблицы.
— количество строк
Размеры созданной таблицы потом можно будет изменить при этом ее надо выделить.
В таблице нет возможностей изменять параметры колонок и столбцов, при такой необходимости таблицу необходимо создавать заново.
Кнопка (Просмотр объекта) служит для просмотры объектов теста WAVE и PLAN, для этого полностью выделите строку с соответствующим объектом и нажмите кнопку.
Кнопка (Линия) служит для размещения горизонтальной линии. Линия может иметь разную толщину и цвет.
Кнопка (Символ) служит для вставки различных специальных символов.
Вставка дополнительных элементов производится в позицию курсора.
Дополнительные элементы ( линия, изображение, таблица), при выделении обрамляется рамкой из маленьких квадратов. При выделении эти элементы могут изменять размеры.

Создание нового проекта теста
Для создания нового проекта нажимаем кнопку [Новый].
В открывшемся окне «Новые проект» заполняем все поля
  • Поле «Наименование теста» — полное имя теста
  • Поле «Текст описания теста» — Текст, который выводится при начале тестирования
  • Поле «Количество разделов» — Число (больше нуля) разделов теста
  • Поле «Количество вопросов» — Число (больше нуля) вопросов в тесте
  • Поле «Разделитель вопросов» — Отделять каждый вопрос линией
  • Поле «Имя проекта» — Имя, под которым проект теста будет сохранен. Это имя является также именем папки, в которой размещены файлы проекта.
    Рекомендую в имени проекта использовать латинский шрифт и не использовать пробел.
На основании введенных данных программа сформирует новый проект теста, сохранит его на диске в папке . .\PROJECT и включит в список имеющихся проектов. Дальнейшая работа над проектом (дополнение, удаление, форматирование и т.д.) производится уже непосредственно в редакторе теста.
Откройте проект. В проекте общая часть будет заполнена. Сформированы секции вопросов.
Перейдите в режим редактирования и заполните секции вопросов, используя описание в разделе Структура проекта теста.
Для удаления вопроса просто удалите всю секцию вопроса.
Текстовые фрагменты можно переносить через буфер обмена из других приложений непосредствено в редактор тестов.
Для удобства в редакторе тестов предусмотрено автоматическое формирование различных секций вопросов.
Использование этих функций гарантирует правильную структуру вопроса в тесте.
Вставка различных секций
Новый вопрос
Выбрать раздел, в который входит вопрос.
Выбрать тип ответа, используемый в вопросе.
Установить число баллов за правильный ответ. Если расчет баллов не производится — оставить 0.
Ввести формулировку вопроса.
Введите номер вопроса.
Новый вопрос вставляется в позицию определенную номером вопроса.
Вставить вопрос можно путем копирования-вставки непосредственно в редакторе. Скопируйте целиком секцию вопроса в буфер обмена, затем вставьте в нужную позицию на пустую строку. ( Кнопки ). Не вставляйте внутрь имеющихся секций!
Для удаления вопроса просто удалите всю секцию вопроса.
При изменении количества вопросов, не забудьте исправить значения «Количество вопросов» в секции описания разделов. Таким образом, можно в любой момент изменить количество вопросов в тесте.

Дополнительные секции
Для вставки дополнительных секций ([HINT], [WAVE], [PLAN]), выделите вопрос целиком, включая обозначение секции [QUE]
Нажмите соответствующую кнопку.
Вставить подсказку.
Вставить звук.
Вставить дополнительное изображение.
После внесения необходимых данных, дополнительная секция будет вставлена в выделенный вопрос.
При вставке дополнительного изображения будет открыто окно с выбранным изображением На рисунке необходимо определить зону правильного ответа.
Для этого служит специальный маркер зоны, который можно перемещать по рисунку и изменять его пропорции и размеры.
Перемещение маркера осуществляется мышью при нажатой левой клавиши. Изменение размеров осуществляется также мышью при нажатой левой клавиши на границе маркера. После установки маркера в зону правильного ответа, вызываем контекстное меню (правая кнопка мыши на маркере)

  • «Зона правильного ответа» — Вывод на экран координат зоны правильного ответа
  • «Включить в вопрос план и выбор» — Включает в вопрос секцию [PLAN] и изменяет тип ответа в секции [DETAIL] на «Установление позиции»
  • «Включить в вопрос только план» — Включает в вопрос только секцию [PLAN] ( как дополнительное крупное изображение)
  • «Завершить без изменения» — Прерывает операцию
Для удаления дополнительных секций ([HINT], [WAVE], [PLAN]) в редакторе проектов теста удалите целиком секцию.
Для создания рабочего теста для тестирования можно использовать программу ExeTest-SL, где качестве редактора тестов используется редактор MS Word.

Управление программой

Программа имеет гибкую систему настройки, позволяющей независимо от теста изменять режим проведения тестирования в любой момент времени.
Окно раздела состоит из 4-х вкладок.
  1. Установка параметров
  2. Списки тестируемых лиц
  3. Список контрольных тестов
  4. Проведенные тесты

Назначение параметров настройки.
Наименование параметраОписание параметра
Порядок следования вопросов в списке. Позволяет отображать список вопросов при тестировании различными способами
— По номерам в тесте
— Перемешать с показом номеров по порядку
— Перемешать с показом номеров по тесту
Индикация отвеченных вопросов. Отображение отвеченных вопросов в списке различным цветом
— Без индикации
— Отвеченный вопрос
— Правильно — неправильно
Выбор вопросов. Отбор вопросов для тестирования
— Все вопросы
— Выбрать случайным образом
Установить ограничение времени Позволяет отключать ограничение времени, установленное в тесте
Автоматически выбирать следующий вопрос После ввода ответа автоматический переход на следующий вопрос
Разрешить пользоваться подсказкой Позволяет отключать вывод подсказки, если она имеется в тесте
Включить показ статистики Позволяет включать/отключать отображение на экране статистики тестирования
Ручной выбор раздела Разрешает самостоятельно выбрать разделы теста при тестировании (если тест разбит на разделы)
Показать результат тестируемому По окончанию тестирования на экран выводится общий результат теста
Разрешить ручной ввод группы и фамилии Поля выбора можно заполнять самостоятельно. Используется при отсутствии списков тестируемых.
Разрешить тестируемому прервать тест Разрешить (запретить) тестируемому самому прерывать тест.
Разрешенное количество попыток ответа на вопрос 0 — 3
0 — запрещен переход на следующий вопрос
Количество разрешенных попыток на каждый вопрос
Разрешенное количество прохождений теста 1 — 99
Количество разрешенных попыток на каждый тест
Протоколы тестирования Установка активных шаблонов выходных документов
— индивидуальный протокол (prti)
— списочный протокол (prts)
Номер шаблона протокола 1 — 99
Установить на файлы созданных протоколов атрибут «только для чтения» Ограничение возможности редактировать файл протоколов тестирования
Сменить пароль Вводится в дополнительном окне для ограничения доступа к настройке программы и редактору тестов
Размер рабочего окна программы 800х600 — 1024×768 — 1280×720 — Пропорционально высоте экрана — Во весь экран
Установка оптимального размера рабочего окна при тестировании
Ярлык на рабочий стол Устанавливает (удаляет) ярлыки запуска программы в различных режимах
Активизация программы В программе действует ограничение по числу вопросов в тесте. После активации программы ограничение снимается. Ключ активации высылается индивидуально по запросу E-Mail: [email protected]
При проведения тестирования в локальной сети активацию следует проводить с удаленного компьютера.

Списки тестируемых лиц систематизированы по группам и отображаются в двух таблицах.
Использование списков при тестировании позволяет осуществлять выбор фамилии из списка.
Клик правой кнопкой мыши на таблице, вызывает контекстного меню, с помощью которого осуществляются действия в соответствующей таблицы:
— добавление группы, фамилии
— удаление группы, фамилии
— редактирование группы, фамилии
Список контрольных тестов содержит список готовых к проведению контроля тестов.
Раздел оперирует готовыми тестами. ( Загружать готовые тесты из других источников, удалять тесты ).
Клик правой кнопкой мыши на таблице, вызывает контекстного меню, с помощью которого осуществляются действия:
— добавление готового теста
— блокировка, управляет видимостью теста при тестировании
— удаление теста из списка
— получение информации о тесте
Проведенные тесты содержит базу проведенных программой тестов.
Клик правой кнопкой мыши на таблице, вызывает контекстного меню, с помощью которого осуществляются действия:
— удаление выбранного результата тестирования
— полностью очистить базу проведенных тестов
— формирование индивидуального протокола тестирования
— формирование списочного протокола тестирования
— удаление всех сформированных документов индивидуальных протоколов тестирования (очистка папки PRTI)
— удаление всех сформированных документов списочных протоколов тестирования(очистка папки PRTS)
Индивидуальный протокол формируется по выбранной строке.
Списочный протокол формируется из списка отмеченных строк. Метка устанавливается (снимается) двойнным кликом на выбранной строке.
Индивидуальные протоколы сохраняются в папке ..\DOCUM\PRTI.
Списочные протоколы сохраняются в папке ..\DOCUM\PRTS.

Обратите внимания. Удалить результат можно только по истечению суток с момента проведения тестирования.

Проведение тестирования


Перед началом тестирования необходимо ввести (или выбрать) номер группы, Фамилию И О, и выбрать тест из списка.
Если тест содержит более одного раздела то, в зависимости от установки параметра «Ручной выбор раздела», будет предложено выбрать разделы. Нажать кнопку [Старт тест]. Начнется отсчет времени проведения теста.
Выбор вопроса осуществляется двойным нажатием левой кнопки мыши в списке вопросов.
После выбора правильных ответов или ввода ответа необходимо нажать кнопку [Ответ готов]
До нажатия кнопки [Ответ готов] можно отменить выбор повторным вводом ответа.
Если вопрос содержит звуковое сопровождение, кнопка [Звук] будет активна.
Если вопрос содержит дополнительный рисунок, кнопка [План] будет активна.
В левом нижнем углу ведется статистика прохождения теста.
Для досрочного прекращения тестирования нажать кнопку [Стоп тест]
Формы ввода (выбора) правильных ответов

Одиночный выбор правильного ответа
Нажатие кнопки меняет ее статус на противоположный.

Множественный выбор правильных ответов
Нажатие кнопки меняет ее статус на противоположный.

Ввод прямого ответа (число)
Число десятичных разрядов определяется установленным правильным ответом.

Ввод прямого ответа (текст)
Вводится произвольный текст.

Выбор правильной последовательности
Каждое нажатие кнопки изменяет ее номер.

Установление соответствия
Каждое нажатие кнопки изменяет значение соответствия.

Выбор из списка
Из раскрывающегося списка выбрать правильный ответ.

Установка положения правильного ответа
Необходимо открыть дополнительное изображение (кнопка [План]), на котором установить маркер на место правильного ответа и нажать кнопку «Ok».
После установки маркера обязательно подтвердить кнопкой [Ответ готов]

Создание и редактирование форм протоколов тестирования

Результаты тестирования (протоколы) программа формирует на основе заранее подготовленных шаблонов.
Формы протоколов можно создавать и редактировать в редакторе MS Word в формате RTF.
Формируется два типа протокола:
— Индивидуальный
— Списочный
Имя файла шаблона индивидуального протокола имеет вид prtiN. rtf.
Имя файла списочного протокола шаблона списочного протокола имеет вид prtsN.rtf.
Где N — номер шаблона протокола, например prts3.rtf, prts17.rtf, prti2.rtf, prti1.rtf
Шаблон протокола может содержать как общую часть, так и табличную.
Выделенные слова в шаблонах являются ключевыми, вводятся в верхнем регистре и заключаются в квадратные скобки [ ].
В процессе работы программы они заменяются фактическими значениями.
Номер шаблона, который будет активный в данный момент, определяется в настройке программы.
Число шаблонов каждого вида ограничено числом 99.
Список условных обозначений используемых в шаблонах протоколов результатов тестирования.
Общая часть протокола.
DATETESTДата тестирования
SURNAMEФамилия имя отчество
DOPAДополнительные данные тестируемого лица
GROUPГруппа
NAMETESTНаименование темы теста
QUEALLКоличество вопросов для тестирования
TIMETESTВремя, ограничивающее тест
TIMESTARTВремя начала тестирования
TIMEENDВремя окончания тестирования
QUETRUEКоличество правильных ответов
QUEFALSEКоличество неправильных ответов
QUEMISSEDКоличество вопросов оставленных без ответа
PERCENTПроцент правильных ответов
BALLTКоличество полученных баллов
RESULTРезультат тестирования по описанию секции [RESULT] в тесте
TABLEAНачало и конец таблицы
Настроечные данные
MIXERПорядок следования вопросов в списке
INDICATIONИндикация ответов
TIMERОграничение времени
ALLOWATTЧисло разрешенных попыток на вопрос
HINTONВключена/отключена подсказка
Табличные данные (только для индивидуальных протоколов)
NUMTESTНомер вопроса по тесту
NUMTHEMEНомер вопроса по теме
SECTIONНомер раздела теста
TEXTQUEТекст вопроса (без изображения)
BALLQЦена вопроса в баллах
TYPEANSТип ответа (правильно, неправильно, без ответа)
FACTANSФактически выбранный или введенный ответ
COUNTATTКоличество затраченных попыток
TIMEQUEВремя (в секундах) потраченное на вопрос
HINTUSИспользование подсказки при ответе на вопрос
Табличные данные по секциям (только для индивидуальных протоколов)
TABLESНачало и конец таблицы секции
SECTNAMEНаименование раздела (секции) теста
SECTQUEКоличество вопросов в разделе
SECTTRUEКоличество правильных ответов в разделе
SECTFALSEКоличество неправильных ответов в разделе
SECTMISSКоличество вопросов оставленных без ответа
SECTPERCПроцент правильных ответов по разделу
SECTBALLЧисло набранных баллов в разделе
SECTTIMEВремя (в секундах) потраченное на вопросы раздела
SECTHINTКоличество используемых подсказок в разделе
Примеры шаблонов протоколов располагаются в папке . .\DOCUM
Перед началом редактирования шаблонов рекомендуется сделать их резервные копии.

Полезные программы для компьютера на сайте — http://minisoft.tora.ru

Начало работы с Minitest — Учебное пособие по семафору

Что такое Minitest?

Minitest — это инструмент для тестирования Ruby, предоставляющий полный набор средств тестирования. Он также поддерживает разработку, основанную на поведении, имитацию и бенчмаркинг. С выпуском Ruby 1.9 он был добавлен в стандартную библиотеку Ruby, что повысило его популярность. Несмотря на то, что на первый взгляд он производит впечатление очень маленького инструмента тестирования, он обладает очень богатым набором функций, которые делают его мощным инструментом, который нужно иметь под рукой.

В этом руководстве мы рассмотрим, как установить Minitest, использовать его в своих проектах и ​​начать разработку через тестирование в Ruby.

Создание небольшого проекта

Мы изучим основы Minitest, создав небольшую библиотеку Magic 8 Ball. Как и любой Magic 8 Ball, он будет отвечать на вопросы «да» или «нет» заранее заданными ответами. Мы создадим этот проект, используя разработку через тестирование (TDD), используя подход «сначала тестирование». Если вы не уверены, что означают эти фразы, вы можете перейти к руководству по разработке, ориентированному на поведение, чтобы узнать больше об этих концепциях, а затем вернуться, чтобы завершить это руководство.

Настройка Minitest

Давайте начнем новый проект Ruby, в котором мы настроим Minitest как зависимость через Bundler, добавив его в наш Gemfile.

Создайте новый каталог и поместите в свой Gemfile следующий код:

 # Gemfile
источник "https://rubygems.org"
gem "minitest" 

Затем откройте каталог вашего проекта в терминале и запустите bundle install , чтобы установить последнюю версию Minitest в вашем комплекте. Результат должен быть примерно таким:

 Получение метаданных драгоценного камня с https://rubygems.org/.........
Получение метаданных версии с https://rubygems.org/..
Разрешение зависимостей...
Использование минитеста 5.8.2
Использование упаковщика 1.10.6
Комплектация полная! 1 зависимость Gemfile, теперь установлено 2 гема.
Используйте bundle show [имя драгоценного камня], чтобы увидеть, где установлен драгоценный камень в комплекте. 

Ваш первый модульный тест

Давайте создадим новый файл с именем magic_ball.rb и напишем в нем наш первый тест. Мы начнем с написания тестового и производственного кода в одном файле. Класс будет отделен от теста на более поздних этапах этого руководства. Мы будем использовать подход «сначала тест», что означает, что сначала мы напишем тест, а затем производственный код.

Начните с открытия magic_ball.rb в вашем любимом редакторе и введите следующее:

 # magic_ball.rb
требуется «минитест/автозапуск»
класс MagicBallTest < Minitest::Test
end 

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

Давайте добавим наш первый тестовый пример:

 # magic_ball.rb
требуется «минитест/автозапуск»
класс MagicBallTest < Minitest::Test
  защита test_ask_returns_an_answer
    magic_ball = MagicBall.new
    утверждать magic_ball.ask("Что угодно") != ноль
  конец
конец 

Наш первый метод или тест состоит в том, что мы ожидаем, что метод MagicBall#ask вернет значение. Другими словами, он никогда не должен возвращать nil .

Давайте запустим наш тест. Запустите файл со своего терминала, набрав ruby ​​magic_ball.rb . Вывод должен быть примерно таким:

 Параметры запуска: --seed 10646
# Бег:
Е
Завершено за 0,001484 с, 674,0230 запусков/с, 0,0000 утверждений/с.
  1) Ошибка:
MagicBallTest#test_ask_returns_an_answer:
NameError: неинициализированная константа MagicBallTest::MagicBall
    magic_ball. rb:5: в `test_ask_returns_an_answer'
1 запуск, 0 утверждений, 0 сбоев, 1 ошибок, 0 пропусков 

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

Наш тестовый пример не пройден, потому что класс MagicBall не существует. Добавим класс и перезапустим тесты:

 # magic_ball.rb
требуется «минитест/автозапуск»
класс MagicBallTest < Minitest::Test
  защита test_ask_returns_an_answer
    magic_ball = MagicBall.new
    утверждать magic_ball.ask("Что угодно") != ноль
  конец
конец
класс MagicBall
конец 

Мы добавим только класс, без каких-либо методов. Вся идея подхода «сначала тестирование» состоит в том, чтобы выполнять работу небольшими шагами (добавляя лишь немного кода), а затем повторно запускать тесты до тех пор, пока написанный вами тест не пройдет. Давайте снова запустим тест с ruby ​​magic_ball. rb :

 Параметры запуска: --seed 55028
# Бег:
Е
Завершено за 0,001323 с, 755,8619 запусков/с, 0,0000 утверждений/с.
  1) Ошибка:
MagicBallTest#test_ask_returns_an_answer:
NoMethodError: неопределенный метод `спросить' для #
    magic_ball.rb:6:в `test_ask_returns_an_answer'
1 запуск, 0 утверждений, 0 сбоев, 1 ошибок, 0 пропусков 

Как видите, ошибка изменилась. Вместо ошибки неопределенного класса мы теперь получаем ошибку неопределенного метода. Добавим метод и перезапустим тест:

 # magic_ball.rb
требуется «минитест/автозапуск»
класс MagicBallTest < Minitest::Test
  защита test_ask_returns_an_answer
    magic_ball = MagicBall.new
    утверждать magic_ball.ask("Что угодно") != ноль
  конец
конец
класс MagicBall
  задать вопрос
  конец
end 

Повторный запуск теста покажет результат, аналогичный следующему:

 Параметры запуска: --seed 23565
# Бег:
Ф
Завершено за 0,001138 с, 878,9169 запусков/с, 878,9169 утверждений/с. 
  1) Неудача:
MagicBallTest#test_ask_returns_an_answer [magic_ball.rb:5]:
Неудачное утверждение, сообщение не выдано.
1 запуск, 1 утверждение, 1 сбой, 0 ошибок, 0 пропусков 

Опять же, наш тест не пройден, но теперь мы получаем другую ошибку. В TDD получение другой ошибки означает прогресс.

Теперь ошибка указывает, что утверждение не выполнено. На языке Minitest это означает, что 9Метод 0021 assert в тесте ничего не получил. Другими словами, ему не было доставлено никакого сообщения. Пройти этот тест легко — мы можем заставить метод MagicBall#ask возвращать что-либо, кроме nil .

Давайте пропустим:

 # magic_ball.rb
требуется «минитест/автозапуск»
класс MagicBallTest < Minitest::Test
  защита test_ask_returns_an_answer
    magic_ball = MagicBall.new
    утверждать magic_ball.ask("Что угодно") != ноль
  конец
конец
класс MagicBall
  задать вопрос
    "Что бы ни"
  конец
конец 

Поскольку метод ask вернет строку «Что угодно», тест будет пройден, поскольку возвращаемое значение не равно nil . Запуск теста возвращает следующий результат:

 Параметры запуска: --seed 34802
# Бег:
.
Завершено за 0,001434 с, 697,4182 запусков/с, 697,4182 утверждений/с.
1 запуск, 1 утверждение, 0 сбоев, 0 ошибок, 0 пропусков 

Наш первый тест пройден, но наш код все еще не работает должным образом. С этой реализацией он будет возвращать «Что угодно» для любого вопроса. Давайте исправим это. Нам нужен дополнительный тест, который будет более конкретным и заставит наш код возвращать осмысленный ответ.

Чтобы сделать наш Magic Ball более значимым, давайте добавим несколько ответов, чтобы он возвращался. Согласно Википедии, у каждого Magic 8 Ball есть стандартные предопределенные ответы. Мы поместим эти ответы в массив, который будет константой с именем ANSWERS в нашем классе MagicBall .

Напишем для этого тест:

 # magic_ball.rb
требуется «минитест/автозапуск»
класс MagicBallTest < Minitest::Test
  защита test_ask_returns_an_answer
    magic_ball = MagicBall. new
    утверждать magic_ball.ask("Что угодно") != ноль
  конец
  определение test_predefined_answers_is_array
    assert_kind_of Массив, MagicBall:: ANSWERS
  конец
конец
класс MagicBall
  задать вопрос
    "Что бы ни"
  конец
конец 

Добавляя новый тестовый пример, мы заставляем класс иметь константу массива с именем ANSWERS . Запустим тест еще раз:

 Параметры запуска: --seed 56425
# Бег:
.Э
Завершено за 0,001249 с, 1601,3862 запусков/с, 800,6931 утверждений/с.
  1) Ошибка:
MagicBallTest#test_predefined_answers:
NameError: неинициализированная константа MagicBall::ANSWERS
    magic_ball.rb:10:в `test_predefined_answers'
2 запуска, 1 утверждение, 0 отказов, 1 ошибка, 0 пропусков 

Как видите, тест провален. Это потому, что константа MagicBall::ANSWERS отсутствует. Добавим его в наш класс:

 # magic_ball.rb
требуется «минитест/автозапуск»
класс MagicBallTest < Minitest::Test
  защита test_ask_returns_an_answer
    magic_ball = MagicBall. new
    утверждать magic_ball.ask("Что угодно") != ноль
  конец
  определение test_predefined_answers_is_array
    assert_kind_of Массив, MagicBall:: ANSWERS
  конец
конец
класс MagicBall
  ОТВЕТЫ = []
  задать вопрос
    "Что бы ни"
  конец
end 

Если мы повторим тест, он будет пройден. Но должно ли? Массив ANSWERS пуст, поэтому нам это не поможет. Добавим еще один тест, который подтвердит, что массив ANSWERS не пуст:

 # magic_ball.rb
требуется «минитест/автозапуск»
класс MagicBallTest < Minitest::Test
  защита test_ask_returns_an_answer
    magic_ball = MagicBall.new
    утверждать magic_ball.ask("Что угодно") != ноль
  конец
  определение test_predefined_answers_is_array
    assert_kind_of Массив, MagicBall:: ANSWERS
  конец
  определение test_predefined_answers_is_not_empty
    refute_empty MagicBall::ОТВЕТЫ
  конец
конец
класс MagicBall
  ОТВЕТЫ = []
  задать вопрос
    "Что бы ни"
  конец
конец 

Мы добавили новое утверждение. Мы использовали опровергнуть вместо утвердить , потому что опровергнуть ожидает значение false(y), в то время как assert ожидает значение true(y). В нашем случае refute_empty завершится ошибкой, если объект, переданный в качестве аргумента, пуст, а это именно то, что нам нужно. С помощью этого теста мы хотим убедиться, что массив ANSWERS будет иметь хотя бы один предопределенный ответ, чтобы мы могли использовать его в нашем методе MagicBall#ask .

Давайте снова запустим тесты:

 Параметры запуска: --seed 16504
# Бег:
..Ф
Завершено за 0,001200 с, 2500,7502 запусков/с, 3334,3336 утверждений/с.
  1) Неудача:
MagicBallTest#test_predefined_answers_is_not_empty [magic_ball.rb:64]:
Ожидается, что [] не будет пустым.
3 запуска, 4 утверждения, 1 сбой, 0 ошибок, 0 пропусков 

Наше новое сообщение об ошибке показывает, что Minitest ожидал, что [] не будет пустым. Это означает, что теперь нам нужно добавить несколько ответов в массив, чтобы тест прошел.

Так и сделаем. Сначала добавим предустановленные ответы из статьи Википедии:

 # magic_ball.rb
требуется «минитест/автозапуск»
класс MagicBallTest < Minitest::Test
  защита test_ask_returns_an_answer
    magic_ball = MagicBall.new
    утверждать magic_ball.ask("Что угодно") != ноль
  конец
  определение test_predefined_answers_is_array
    assert_kind_of Массив, MagicBall:: ANSWERS
  конец
  определение test_predefined_answers_is_not_empty
    refute_empty MagicBall::ОТВЕТЫ
  конец
конец
класс MagicBall
  ОТВЕТЫ = [
    "Это точно",
    "Это решительно так",
    "Без сомнения",
    "Определенно да",
    "Вы можете положиться на него",
    «Как я вижу, да»,
    "Более вероятный",
    "Перспектива хорошая",
    "Да",
    «Знаки указывают на да»,
    "Ответить туманно, попробуйте еще раз",
    "Спросить позже",
    «Лучше не говорить тебе сейчас»,
    «Не могу предсказать сейчас»,
    «Сконцентрируйся и спроси еще раз»,
    «Не рассчитывай на это»,
    "Мой ответ - нет",
    «Мои источники говорят нет»,
    «Перспектива не очень»,
    "Очень сомнительно"
  ]
  задать вопрос
    "Что бы ни"
  конец
конец 

Если мы снова запустим тест, он будет пройден:

 Параметры запуска: --seed 42118
# Бег:
. ..
Завершено за 0,002505 с, 1197,5895 запусков/с, 1596,7860 утверждений/с.
3 запуска, 4 подтверждения, 0 сбоев, 0 ошибок, 0 пропусков 

Теперь вернемся к первому тесту. Хотя он проходит, это то, что мы называем «ложноположительным тестом». Вроде работает, но логика теста на самом деле нарушена. Если вы прочитаете тест, то увидите, что мы ожидаем, что ответ на вопрос будет отличаться от ноль . На самом деле нам нужно, чтобы ответ всегда производился из массива MagicBall::ANSWERS .

Проведем рефакторинг нашего теста:

 class MagicBallTest < Minitest::Test
  защита test_ask_returns_an_answer
    magic_ball = MagicBall.new
    assert_includes MagicBall:: ANSWERS, magic_ball.ask("Что угодно")
  конец
  определение test_predefined_answers_is_array
    assert_kind_of Массив, MagicBall:: ANSWERS
  конец
  определение test_predefined_answers_is_not_empty
    refute_empty MagicBall::ОТВЕТЫ
  конец
конец
класс MagicBall
  # ОТВЕТЫ пропущены... 
  задать вопрос
    "Что бы ни"
  конец
конец 

Наш первый тест теперь утверждает, что ответ, возвращаемый методом MagicBall#ask , должен быть включен в массив MagicBall::ANSWERS .

Мы опустим массив ANSWERS в приведенных ниже примерах кода для экономии места.

Теперь запустим тесты:

 Параметры запуска: --seed 62725
# Бег:
..Ф
Завершено за 0,001448 с, 2071,9978 запусков/с, 3453,3296 утверждений/с.
  1) Неудача:
MagicBallTest#test_ask_returns_an_answer [magic_ball.rb:7]:
Ожидаемый ["Несомненно", "Решительно так", "Без сомнения", "Да, определенно", "Вы можете на это положиться", "Как я вижу, да", "Скорее всего", " Прогноз хороший», «Да», «Признаки указывают на «да», «Ответ туманный, попробуйте еще раз», «Спросите еще раз позже», «Лучше не говорить вам сейчас», «Не могу предсказать сейчас», «Сконцентрируйтесь и спросите еще раз», « Не рассчитывайте на это», «Мой ответ — нет», «Мои источники говорят «нет», «Перспективы не очень хорошие», «Очень сомнительно»] и «Что угодно». 
3 запуска, 5 утверждений, 1 сбой, 0 ошибок, 0 пропусков 

Как видите, наш тест действительно работает. В нем говорится, что ожидалось, что массив ответов будет содержать «Что угодно». Однако это невозможно, поскольку мы жестко закодировали «Что угодно» в качестве ответа. Давайте изменим наш код, чтобы он действительно возвращал случайный элемент из массива:

 class MagicBall
  задать вопрос
    ОТВЕТЫ.образец
  конец
end 

Метод Array#sample делает именно это — он берет элемент выборки из массива. Если мы запустим тесты, они все пройдут:

 Параметры запуска: --seed 54975
# Бег:
...
Завершено за 0,001436 с, 2088,9750 запусков/с, 3481,6250 утверждений/с.
3 прогона, 5 утверждений, 0 сбоев, 0 ошибок, 0 пропусков 

Мы завершили одну часть библиотеки, но наш файл magic_ball.rb стал довольно большим. Давайте разделим его на два разных файла. Создайте файл magic_ball_test.rb и переместите класс MagicBallTest во вновь созданный файл.

Далее нам потребуется magic_ball.rb в верхней части файла, чтобы тест мог использовать класс MagicBall .

Вот как должны выглядеть ваши два файла:

 # magic_ball_test.rb
требуется "минитест/автозапуск"
require_relative "волшебный_шар"
класс MagicBallTest < Minitest::Test
  защита test_ask_returns_an_answer
    magic_ball = MagicBall.new
    assert_includes MagicBall:: ANSWERS, magic_ball.ask("Что угодно")
  конец
  определение test_predefined_answers_is_array
    assert_kind_of Массив, MagicBall:: ANSWERS
  конец
  определение test_predefined_answers_is_not_empty
    refute_empty MagicBall::ОТВЕТЫ
  конец
конец 
 # magic_ball.rb
класс MagicBall
  задать вопрос
    ОТВЕТЫ.образец
  конец
end 

Как видите, нам потребовался файл magic_ball.rb в начале файла magic_ball_test.rb с помощью метода require_relative , поскольку расположение файла в файловой системе относительно файла что требует этого.

Мы должны задать вопрос

При вызове метода MagicBall#ask мы должны задать вопрос. Вопрос — это строка, оканчивающаяся знаком вопроса. Однако наша текущая реализация Метод MagicBall#ask не проверяет правильность вопроса. Добавим этот функционал.

Во-первых, нам нужен тестовый пример. Откройте magic_ball_test.rb и добавьте новый тестовый пример:

 # magic_ball_test.rb
требуется "минитест/автозапуск"
require_relative "волшебный_шар"
класс MagicBallTest < Minitest::Test
  защита test_ask_returns_an_answer
    magic_ball = MagicBall.new
    assert_includes MagicBall:: ANSWERS, magic_ball.ask("Что угодно")
  конец
  определение test_predefined_answers_is_array
    assert_kind_of Массив, MagicBall:: ANSWERS
  конец
  определение test_predefined_answers_is_not_empty
    refute_empty MagicBall::ОТВЕТЫ
  конец
  защита test_raises_error_when_question_is_number
    assert_raises "Вопрос имеет недопустимый формат." делать
      magic_ball = MagicBall. new
      magic_ball.ask(1)
    конец
  конец
конец 

В тестовом примере test_raises_error_when_question_is_number используется новое утверждение, которое мы раньше не использовали. Утверждение assert_raises ожидает, что код в полученном блоке вызовет ошибку. В нашем случае он ожидает, что сообщение об ошибке будет «Вопрос имеет неверный формат».

Давайте запустим тест и посмотрим, какую ошибку мы получим:

 Параметры запуска: --seed 9870
# Бег:
...Ф
Завершено за 0,001582 с, 2528,0487 запусков/с, 3792,0731 утверждений/с.
  1) Неудача:
MagicBallTest#test_raises_error_when_question_is_number [magic_ball_test.rb:20]:
Вопрос имеет недопустимый формат..
Ожидалась стандартная ошибка, но ничего не было поднято.
4 запуска, 6 утверждений, 1 сбой, 0 ошибок, 0 пропусков 

Сбой указывает, что ожидается StandardError с сообщением, но ничего не возникло. Давайте добавим производственный код в наш класс MagicBall .

 # magic_ball.rb
класс MagicBall
  задать вопрос
    поднять «Вопрос имеет недопустимый формат». если question.is_a?(String) && question[-1] == "?"
    ОТВЕТЫ.образец
  конец
end 

Наш метод MagicBall#ask проверяет вопрос, проверяя, является ли он строкой и является ли его последний символ вопросительным знаком.

Давайте снова запустим тесты:

 Параметры запуска: --seed 3383
# Бег:
...Э
Завершено за 0,002405 с, 1662,8774 запусков/с, 1662,8774 утверждений/с.
  1) Ошибка:
MagicBallTest#test_ask_returns_an_answer:
RuntimeError: Вопрос имеет недопустимый формат.
    /Users/ie/dev/community-ile-eftimov-getting-started-with-minitest/project/magic_ball.rb:27:in `ask'
    magic_ball_test.rb:8: в `test_ask_returns_an_answer'
4 запуска, 4 утверждения, 0 сбоев, 1 ошибка, 0 пропусков 

Мы получили еще одну ошибку. Если вы присмотритесь, тест-кейс, который не пройден, — это самый первый, который мы написали — 9.0021 MagicBallTest#test_ask_returns_an_answer .

Давайте еще раз взглянем на тестовый пример:

 def test_ask_returns_an_answer
  magic_ball = MagicBall.new
  assert_includes MagicBall:: ANSWERS, magic_ball.ask("Что угодно")
end 

Тестовый пример выглядит нормально, но с ним есть небольшая проблема. Вместо того, чтобы задавать вопрос методу MagicBall#ask , мы просто отправляем строку — «Что угодно». Давайте изменим это на актуальный вопрос:

 # magic_ball_test.rb
требуется "минитест/автозапуск"
require_relative "волшебный_шар"
класс MagicBallTest < Minitest::Test
  защита test_ask_returns_an_answer
    magic_ball = MagicBall.new
    assert_includes MagicBall::ANSWERS, magic_ball.ask("Минитест классный?")
  конец
  определение test_predefined_answers_is_array
    assert_kind_of Массив, MagicBall:: ANSWERS
  конец
  определение test_predefined_answers_is_not_empty
    refute_empty MagicBall::ОТВЕТЫ
  конец
  защита test_raises_error_when_question_is_number
    assert_raises "Вопрос имеет недопустимый формат. " делать
      magic_ball = MagicBall.new
      magic_ball.ask(1)
    конец
  конец
конец 

Когда мы проведем тесты, все они пройдут. В соответствии с циклом TDD (красный-зеленый-рефакторинг) мы можем реорганизовать наш код теперь, когда мы прошли тесты. Одна вещь, которая выделяется в коде, — это предикат , если только в методе MagicBall#ask . Давайте извлечем эту логику в приватный метод:

 # magic_ball.rb
класс MagicBall
  задать вопрос
    поднять «Вопрос имеет недопустимый формат». если is_question_valid?(вопрос)
    ОТВЕТЫ.образец
  конец
  частный
  def is_question_valid?(вопрос)
    question.is_a?(String) && question[-1] == "?"
  конец
конец 

Смысл линии рейза в методе аск теперь совершенно ясен. Название приватного метода показывает, что если формат вопроса будет недопустимым, возникнет ошибка. Теперь, когда мы завершили рефакторинг, давайте запустим тесты:

 Параметры запуска: --seed 46746
# Бег:
....
Завершено за 0,001417 с, 2822,6063 запусков/с, 4233,9094 утверждений/с. 
4 запуска, 6 утверждений, 0 сбоев, 0 ошибок, 0 пропусков 

Наш код отлично работает. Нам удалось успешно создать небольшой проект, используя разработку через тестирование с помощью Minitest. Давайте кратко рассмотрим еще одну замечательную функцию Minitest.

Minitest::Spec

Для всех, кто привык использовать RSpec, в Minitest есть полезная функция Minitest::Spec. Это полноценный движок спецификаций, который работает поверх Minitest::Unit и плавно превращает тестовые утверждения в ожидаемые спецификации. По сути, это оболочка вокруг механизма модульного тестирования Minitest.

Давайте посмотрим, как мы можем преобразовать утверждения модульных тестов, которые мы написали в magic_ball_test.rb , в ожидания спецификации.

Создайте новый файл с именем magic_ball_spec.rb :

 # magic_ball_spec.rb
требуется "минитест/автозапуск"
требуется "минитест/спецификация"
require_relative "волшебный_шар"
описать MagicBall сделать
  описать "#спросить" сделать
    он "возвращает ответ" делать
      magic_ball = MagicBall. new
      assert_includes MagicBall::ANSWERS, magic_ball.ask("Минитест классный?")
    конец
    это "предопределенные ответы - это массив" сделать
      assert_kind_of Массив, MagicBall:: ANSWERS
    конец
    это "предопределенные ответы не пусты" делать
      refute_empty MagicBall::ОТВЕТЫ
    конец
    это "выдает ошибку, когда вопрос является числом"
      assert_raises "Вопрос имеет недопустимый формат." делать
        magic_ball = MagicBall.new
        magic_ball.ask(1)
      конец
    конец
  конец
конец 

Как видите, хотя синтаксис утверждений отличается от синтаксиса RSpec, он определенно чувствует себя как дома для пользователей RSpec.

Заключение

Несмотря на простоту и минимализм, Minitest является очень мощным инструментом для тестирования Ruby. В этом руководстве мы увидели, как разработать небольшой проект с помощью Minitest, используя разработку через тестирование в сочетании с подходом, основанным на тестировании. Это руководство только поверхностное — в Minitest есть еще много чего интересного, так что загляните в документацию Minitest, чтобы получить больше удовольствия.

Полный исходный код этого руководства доступен на Github.

Ссылки

Вот несколько ссылок на документацию Minitest и API, использованные при написании этого руководства:

  • Репозиторий Minitest Github
  • Минитестовая документация
  • API утверждений Minitest
  • Минитест::Spec API

П.С. Хотели бы вы научиться создавать устойчивые приложения Rails и выпускать их чаще? Недавно мы опубликовали электронную книгу, посвященную именно этому — «Руководство по тестированию Rails». Узнайте больше и загрузите бесплатную копию.

минитест | RubyGems.org | ваш хост сообщества gem

minitest предоставляет полный набор средств тестирования, поддерживающих TDD, BDD, насмешки и бенчмаркинг. «На прошлой неделе у меня был урок по тестированию с Джимом Вейрихом, и мы разрешено выбирать наши тестовые фреймворки. Кирк Хейнс и я были соединились, и мы взломали код для нескольких тестов рамки. .. Я ДОЛЖЕН сказать, что минитест *очень* читаем/понятен по сравнению с «двумя другими» вариантами, которые мы рассматривали. Красиво сделано и спасибо за то, что помогаете нам сохранять душевное равновесие». -- Уэйн Э. Сегин minitest/test — это небольшой и невероятно быстрый фреймворк для модульного тестирования. Он предоставляет богатый набор утверждений, чтобы сделать ваши тесты чистыми и удобочитаемый. minitest/spec — это функционально законченный механизм спецификаций. Он цепляется за minitest/test и плавно связывает тестовые утверждения со спецификацией ожидания. minitest/benchmark — отличный способ проверить производительность вашего алгоритмы повторяющимся образом. Теперь вы можете утверждать, что ваш newb коллега не заменяет ваш линейный алгоритм экспоненциальным один! minitest/mock от Стивена Бейкера, это красивая крошечная имитация (и заглушка) каркас объекта. minitest/pride демонстрирует гордость за тестирование и добавляет красок вашему тесту выход. Я думаю, это тоже пример того, как писать каналы ввода-вывода. :П minitest/test предназначен для чистой реализации языка разработчики, которым нужен минимальный набор методов для начальной загрузки работающего тестирование. Например, в тестовом примере нет никакой магии. открытие. «Опять же, я не могу нахваливать идею тестирования/спецификации фреймворк, который я могу прочитать полностью за один присест!» -- Петр Шотковский По сравнению с rspec: rspec — тестовый DSL. минитест рубиновый. -- Адам Хокинс, "Поклонись мини-тесту" minitest не изобретает ничего из того, что уже есть в ruby, например: классы, модули, наследование, методы. Это означает, что вам нужно только изучите ruby, чтобы использовать minitest и все ваши обычные практики объектно-ориентированного программирования, такие как рефакторинг метода извлечения по-прежнему применяется.

Версии:

  1. 5.16.3 - 17 августа 2022 г. (91 КБ)
  2. 5.16.2 - 03 июля 2022 г. (91 КБ)
  3. 5.16.1 - 20 июня 2022 г.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *