OneUnit
Фреймворк для тестирования приложений и библиотек OneScript
Install / Use
/learn @sfaqer/OneUnitREADME
OneUnit
Фреймворк для тестирования приложений и библиотек OneScript
1. Написание тестов
Следующий пример даёт представление о минимально необходимом наборе компонентов для написания тестов. В следующих разделах будет представлена дополнительная информация о возможностях фреймворка.
#Использовать asserts
&Тест
Процедура МойПервыйТест() Экспорт
// Дано
Калькулятор = Новый Калькулятор();
// Когда
Результат = Калькулятор.Сложить(1, 1);
// Тогда
Ожидаем.Что(Результат).Равно(2);
КонецПроцедуры
1.1 Аннотации
OneUnit поддерживает следующие аннотации для настройки тестов и расширения возможностей фреймворка.
|Аннотация|Описание|
|---|---|
| &ТестовыйНабор | Обозначает, что сценарий является тестовым набором, используется для настройки жизненного цикла тестового набора |
| &Тест | Обозначает, что метод является простым тестом. Эта аннотация не объявляет никаких параметров, тест исполняется как есть |
| &ПараметризованныйТест | Обозначает, что метод является параметризованным тестом |
| &ПовторяемыйТест | Обозначает, что метод является повторяемым тестом |
| &ОтображаемоеИмя | Объявляет пользовательское отображаемое имя для тестового метода |
| &Порядок | Используется для настройки порядка выполнения тестовых наборов и методов |
| &ПередКаждым | Обозначает, что аннотированный метод должен быть выполнен перед каждым &Тест, &ПараметризованныйТест или &ПовторяемыйТест методом в текущем наборе |
| &ПослеКаждого | Обозначает, что аннотированный метод должен быть выполнен после каждого &Тест, &ПараметризованныйТест или &ПовторяемыйТест методом в текущем наборе |
| &ПередВсеми | Обозначает, что аннотированный метод должен быть выполнен до всех &Тест, &ПараметризованныйТест или &ПовторяемыйТест методом в текущем наборе |
| &ПослеВсех | Обозначает, что аннотированный метод должен быть выполнен после всех &Тест, &ПараметризованныйТест или &ПовторяемыйТест методом в текущем наборе |
| &Тег | Используется для объявления тегов для фильтрации тестов на уровне набора или метода |
| &Выключен | Используется для отключения тестового набора или тестового метода |
| &Таймаут | Используется для провала &Тест, &ПараметризованныйТест или &ПовторяемыйТест метода, если его выполнение превышает заданную продолжительность. |
1.2 Тестовые методы и наборы
Тестовые методы и методы жизненного цикла должны быть объявлены локально в тестовом наборе, они не должны возвращать значение (любой результат будет проигнорирован).
Видимость методов.
Тестовые методы и методы жизненного цикла должны быть объявлены какЭкспорт
Следующий тестовый набор демонстрирует использование &Тест методов и всех поддерживаемых методов жизненного цикла.
#Использовать asserts
&ПередВсеми
Процедура ИнициализироватьВсе() Экспорт
КонецПроцедуры
&ПередКаждым
Процедура Инициализировать() Экспорт
КонецПроцедуры
&Тест
Процедура УспешныйТест() Экспорт
КонецПроцедуры
&Тест
Процедура ПадающийТест() Экспорт
Ожидаем.Что(Ложь, "Падающий тест").ЭтоИстина();
КонецПроцедуры
&Тест
&Выключен("Для демонстрации")
Процедура ПропущенныйТест() Экспорт
// Не будет выполнен
КонецПроцедуры
&ПослеКаждого
Процедура Завершение() Экспорт
КонецПроцедуры
&ПослеВсех
Процедура ЗавершениеВсех() Экспорт
КонецПроцедуры
Каждый сценарий с тестами по умолчанию представляет собой тестовый набор. Если по каким-либо причинам потребовалось определить конструктор ПриСозданииОбъекта,
его необходимо дополнить соответствующей аннотацией &ТестовыйНабор. В противном случае сценарий не будет зарегистрирован как тестовый набор,
и как следствие не будут обнаружены и тестовые методы данного сценария.
&ТестовыйНабор
Процедура ПриСозданииОбъекта() Экспорт
КонецПроцедуры
1.3 Отображаемые имена
Тестовые методы могут объявлять пользовательские отображаемые имена через &ОтображаемоеИмя, где можно использовать пробелы, специальные символы и даже эмодзи, которые будут отображаться в отчётах о тестировании и логе выполнения.
&Тест
&ОтображаемоеИмя("Произвольное имя теста содержащее пробелы")
Процедура ТестСОтображаемымИменемСодержащимПробелы() Экспорт
КонецПроцедуры
&Тест
&ОтображаемоеИмя("╯°□°)╯")
Процедура ТестСОтображаемымИменемСодержащимСпециальныеСимволы() Экспорт
КонецПроцедуры
&Тест
&ОтображаемоеИмя("😱")
Процедура ТестСОтображаемымИменемСодержащимЭмодзи() Экспорт
КонецПроцедуры
1.4 Неперехваченные исключения
В OneUnit если исключение выдаётся из тестового метода или метода жизненного цикла и не перехватывается в этом тестовом методе или методе жизненного цикла, то фреймворк пометит тест как Сломанный.
В следующем примере ПадениеПриНеперехваченномИсключении() методы вызывает исключение Деление на ноль. Поскольку исключение не перехватывается, тест будет помечен как Сломанный.
&Тест
Процедура ПадениеПриНеперехваченномИсключении() Экспорт
// Следующий код выбрасывает исключение деления на ноль, которое вызовет падение теста
Калькулятор = Новый Калькулятор();
Калькулятор.Разделить(1, 0);
КонецПроцедуры
При использовании библиотеки asserts, в случае если не проходит проверка утверждения, то фреймворк пометит тест как Ошибочный.
#Использовать asserts
&Тест
Процедура ПадениеПриУтверждении() Экспорт
Утверждения.ПроверитьИстину(Ложь, "Исключение, которое помечает тест ошибочным");
КонецПроцедуры
1.5 Отключение тестов
Целые тестовые наборы или отдельные тестовые методы можно отключить с помощью аннотации &Выключен, или с помощью одной из аннотаций, перечисленных в разделе Условное выполнение тестов.
При применении аннотации &Выключен на уровне набора, все методы тестирования и методы жизненного цикла в этом наборе также будут отключены.
Отключение через аннотацию &Выключен предотвращает вызов методов жизненного цикла на уровне метода, таких как &ПередКаждым, &ПослеКаждого. Однако это не предотвращает создание экземпляра тестового набора и не предотвращает выполнение методов жизненного цикла на уровне набора, таких как &ПередВсеми, &ПослеВсех.
Вот &Выключен тестовый набор
&Тест
Процедура ТестБудетПропущен() Экспорт
КонецПроцедуры
&Выключен("Выключен до устранения ошибки #42")
&ТестовыйНабор
Процедура ПриСозданииОбъекта()
КонецПроцедуры
А вот тестовый набор, в котором тестовый метод отключен с помощью аннотации &Выключен
&Выключен("Выключен до устранения ошибки #42")
&Тест
Процедура ТестБудетПропущен() Экспорт
КонецПроцедуры
&Тест
Процедура ТестБудетВыполнен() Экспорт
КонецПроцедуры
1.6 Условное выполнение тестов
В дополнение к аннотации &Выключен OneUnit также поддерживает несколько других условий, которые позволяют разработчикам включать или отключать тестовые наборы и методы декларативно. Если вы хотите предоставить сведения о том, почему тест отключен, используйте параметр Причина аннотаций, с помощью которого можете указать причину отключения.
Если зарегистрировано несколько условий, тест будет отключен, если хотя бы одно из условий истинно. Если тестовый набор отключен, все тестовые методы и методы жизненного цикла в этом наборе также будут отключены. Если тестовый метод отключен, то вызовы методов жизненного цикла на уровне метода, таких как &ПередКаждым, &ПослеКаждого, будут пропущены. Однако это не предотвращает создание экземпляра тестового набора и не предотвращает выполнение методов жизненного цикла на уровне набора, таких как &ПередВсеми, &ПослеВсех.
1.6.1 Условия на операционную систему
Набор или тест можно включить или отключить в определённой операционной системе с помощью аннотаций: &ВключенНаОС, &ВыключенНаОС.
Операционная система задаётся строкой, которая соответствует одной из следующих констант: Windows, Linux, MacOS
&Тест
&ВыключенНаОС("Windows")
Процедура ВыключенНаОСWindows() Экспорт
КонецПроцедуры
&Тест
&ВыключенНаОС("Linux")
Процедура ВыключенНаОСLinux() Экспорт
КонецПроцедуры
&Тест
&ВыключенНаОС("MacOS")
Процедура ВыключенНаОСMacOS() Экспорт
КонецПроцедуры
&Тест
&ВключенНаОС("Windows")
Процедура ВключенНаОСWindows() Экспорт
КонецПроцедуры
&Тест
&ВключенНаОС("Linux")
Процедура ВключенНаОСLinux() Экспорт
КонецПроцедуры
&Тест
&ВключенНаОС("MacOS")
Процедура ВключенНаОСMacOS() Экспорт
КонецПроцедуры
1.6.2 Условия на версию OneScript
Набор или тест можно включить или отключить в определённой версии OneScript с помощью аннотаций: &ВключенДляOneScript, &ВыключенДляOneScript.
Версия OneScript задаётся строкой, которая соответствует шаблону по правилам библиотеки semver.
&Тест
&ВыключенДляOneScript("<2")
Процедура ВыключенДляOneScriptМладшеДвойки() Экспорт
КонецПроцедуры
&Тест
&ВыключенДляOneScript("~2.0")
Процедура ВыключенДляOneScriptСтаршеДвойки() Экспорт
КонецПроцедуры
&Тест
&ВключенДляOneScript("<2")
Процедура ВключенДляOneScriptМладшеДвойки() Экспорт
Коне
Related Skills
node-connect
343.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
92.1kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
343.3kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
343.3kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
