О Unit-тестах замолвите слово. Часть 2
Разработка - Инструментарий разработчика
Подготовка
Тесты будем писать с использованием фреймворка Vanessa-ADD.
Самый простой путь к его установке - менеджер пакетов OneScript. Скачать его можно тут: http://oscript.io/.
После того как будет установлен OneScript нам будет достаточно открыть командную строку и выполнить:
opm install add
После выполнения команды в папке с библиотеками OneScript (C:\Program Files (x86)\OneScript\Lib\) появится папка add. В ней будут лежать компоненты фреймворка Vanessa-Add.
Нас прежде всего интересуют файлы, относящиеся к части xUnit (фреймворк для Unit-тестирования):
- Внешняя обработка xddTestRunner.epf - обработка для запуска Unit-тестов
- Набор плагинов, который располагается в папке add/plugins
Подробнее о запуске тестов и использовании плагинов можно почитать в документации тут.
Организация хранения тестов и состав набора тестов
Для того чтобы практические примеры лучше читались, разберем как тесты хранятся и из чего состоят наборы тестов.
Тесты располагаются в модулях внешних обработок, каждая обработка может содержать несколько тестов, разделенных на группы.
Т.к. Unit-тесты пишутся на процедуры и функции, то удобно разбивать тесты на блоки со следующей иерархией:
- метаданные
-- модуль менеджера/модуль объекта либо функциональная область
Например, такая структура файлов и папок:
- Документ.Заказ клиента
-- Тест_ЗаказКлиентаОбъект.epf
-- Тест_ЗаказКлиентаМенеджер.epf
Каждая внешняя обработка состоит из следующих частей:
Инструментарий
В основном в тестах мы будем использовать следующие плагины:
- ТекучиеУтверждения - плагин предоставляющий методы для проверки утверждений
// Пример проверки значения
// Ожидаем - плагин ТекучиеУтверждениея
// Что() - передаем плагину значение для проверки
// Равно() - вызываем процедуру сравнения переданного значения с эталоном
Ожидаем.Что(ПроверямоеЗначение).Равно(1);
// Пример проверки метода
// Что() - передаем плагину расположения проверяемого метода
// Метод() - передаем плагину имя метода и его параметры
// ВыбрасываетИсключение() - провермя, что метод выбросил определенное исключение
Ожидаем.Что(ОбщийМодуль).Метод(ИмяМетода).ВыбрасываетИсключение("Наше исключение");
- Данные - плагин для генерации данных, необходимых для теста
// Данные - плагин
// НачатьСоздание() - Объявляем какой объект нужно создать Справочник, Документ, Набор записей регистра накопления или сведений
// Реквизит() - объявляем, что у нашего объекта будет заполнен реквизит определенным значением
// ШапкаТабличнойЧасти() - объявляем, что у создаваемого объекта будет заполнены табличная часть и некоторые из её колонок
// СтрокаТЧ() - описываем какими именно значениями будет заполнена строка табличной части
// Создать() - завершаем создание объекта, по умолчанию объект записывается в базу и возвращается ссылка на него
Данные.НачатьСоздание("Документ.ДокументСДвижениями")
.Реквизит("РеквизитПростойСправочник")
.ШапкаТабличнойЧасти("ТЧ","Реквизит1", "РесурсЧисло")
.СтрокаТЧ("Элемент1", 10)
.СтрокаТЧ("Элемент2", 15).Создать();
Более подробно о плагинах можно прочитать на страницах документации.
К сожалению не для всех плагинов есть документация, но в них можно легко разобраться, открыв сами плагины в каталоге add/plugins =)
Пример теста: Распределение значений по базе
У нас реализована собственная подсистема Бюджетирования. Нам была необходима функция, которая будет распределять затраты, которые были сформированы в одних подразделениях на другие подразделения, в зависимости от их показателей.
Рассмотрим пример проверки функции распределения:
// Создадим тестовые подразделения первичных затрат
Подразделение1 = Данные.СоздатьЭлементСправочника("СтруктураПредприятия");
Подразделение2 = Данные.СоздатьЭлементСправочника("СтруктураПредприятия");
// Тут мы подготавливаем описание колонок таблиц, которые будут передваться нашей функции
Колонка_АналитикаДоходовРасходов = Данные.ОписаниеКолонкиТЧ("АналитикаДоходовРасходов", Новый ОписаниеТипов("СправочникСсылка.СтруктураПредприятия"));
Колонка_Ресурс1 = Данные.ОписаниеКолонкиТЧ("Ресурс1", Новый ОписаниеТипов("Число"));
Колонка_Ресурс2 = Данные.ОписаниеКолонкиТЧ("Ресурс2", Новый ОписаниеТипов("Число"));
Колонка_АналитикаРасходов = Данные.ОписаниеКолонкиТЧ("АналитикаРасходов", Новый ОписаниеТипов("СправочникСсылка.СтруктураПредприятия"));
Колонка_Коэффициеннт = Данные.ОписаниеКолонкиТЧ("Коэффициент", Новый ОписаниеТипов("Число"));
// Создадим тестовые подразделения, на которые необходимо распределить затраты
ПодразделениеРаспределения3 = Данные.СоздатьЭлементСправочника("СтруктураПредприятия");
ПодразделениеРаспределения4 = Данные.СоздатьЭлементСправочника("СтруктураПредприятия");
// Формируем таблицу первоначальных затрат
ИсходнаяТаблица = Данные.НачатьСоздание("ТаблицаЗначений")
.ШапкаТабличнойЧасти(, Колонка_АналитикаДоходовРасходов, Колонка_Ресурс1, Колонка_Ресурс2)
.СтрокаТЧ(Подразделение1, 10, 10)
.СтрокаТЧ(Подразделение2, 20, 10).Создать();
// Формируем таблицу коэффициентов
ТаблицаКоэффицентов = Данные.НачатьСоздание("ТаблицаЗначений")
.ШапкаТабличнойЧасти(, Колонка_АналитикаРасходов, Колонка_Коэффициеннт)
.СтрокаТЧ(ПодразделениеРаспределения3, 0.4)
.СтрокаТЧ(ПодразделениеРаспределения4, 0.6).Создать();
// Формируем таблицу эталон, для проверки результата работы функции
Эталон = Данные.НачатьСоздание("ТаблицаЗначений")
.ШапкаТабличнойЧасти(, Колонка_АналитикаДоходовРасходов, Колонка_Ресурс1, Колонка_Ресурс2, "АналитикаДоходовРасходовИсточник")
.СтрокаТЧ(ПодразделениеРаспределения3, 4, 4, Подразделение1)
.СтрокаТЧ(ПодразделениеРаспределения4, 6, 6, Подразделение1)
.СтрокаТЧ(ПодразделениеРаспределения3, 8, 4, Подразделение2)
.СтрокаТЧ(ПодразделениеРаспределения4, 12, 6, Подразделение2).Создать();
// Выполняем функцию
Справочники.ИсточникиДанныхБюджета.РаспределитьПоКоэффициентам(ИсходнаяТаблица, ТаблицаКоэффицентов);
// Сравниваем эталон и результат работы нашей функции
СравнениеТаблиц.ПроверитьРавенствоТаблиц(Эталон, ИсходнаяТаблица);
Стоит отметить, что коэффициенты и значения затрат подобраны не очень хорошо, т.к. при таких значениях не возникает проблемы копеек.
Пример теста: разбор информации об обновлениях мобильного приложения
На складе компании используется приложение на мобильной платформе 1С. Из-за политики безопасности мы не можем распространять обновления через GooglePlay. Поэтому мы написали приложение, которое проверяет наличие обновлений на сервере (сравнение версии установленного приложения с настройками, хранящимися на сервере) и устанавливает обновление, если оно есть.
Мы рассмотрим тест на разбор файла настроек, которые загружаются с сервера:
Процедура Тест_ЧтениеИнформациисСервера_НесколькоНастроек() Экспорт
Настройка = ШаблонНастройки("version_несколько_настроек");
// Процедура читает файл переданной настройки и заполняет справочник "Конфигурации"
ОбновлениеКонфигурацийВызовСервера.ЗагрузитьОписаниеВерсийССервера(Настройка, Ложь);
// Проверяем, что настройка прочитана корректно
ЗагруженнаяНастройка = Справочники.Конфигурации.НайтиПоНаименованию("ru.yarvet.mw");
Ожидаем.Что(ЗагруженнаяНастройка.ИмяФайлаОбновления).Равно("тест")
.Что(ЗагруженнаяНастройка.ВерсияСервера).Равно("2.1.0");
ЗагруженнаяНастройка = Справочники.Конфигурации.НайтиПоНаименованию("ru.yarvet.launcher");
Ожидаем.Что(ЗагруженнаяНастройка.ИмяФайлаОбновления).Равно("тест2")
.Что(ЗагруженнаяНастройка.ВерсияСервера).Равно("1.1.0");
КонецПроцедуры
// Функция возвращает путь до файла с тетсовой настройки
Функция ШаблонНастройки(Настройка)
// ИспользуемоеИмяФайла - путь до обработки теста, стандартный реквзит внешней обработки
ОписаниеТеста = Новый Файл(ИспользуемоеИмяФайла);
Возврат ОписаниеТеста.Путь + ПолучитьРазделительПути() + Настройка+".json";
КонецФункции
Собственно сам файл настройки выглядит так:
[
{
"application": "ru.yarvet.mw",
"version":"2.1.0",
"updateFile":"тест"
},
{
"application": "ru.yarvet.launcher",
"version":"1.1.0",
"updateFile":"тест2"
}
]
Почему мы писали тест на казалось бы такой простой код - чтобы полностью проверить его в пользовательском режиме нужно было настроить: сервер, установить приложение на мобильное устройство, подключить его к нужной сети, ввести настройки сервера и загрузить настройки. В случае нахождения ошибки нужно было скомпилировать приложение, обновить его на устройстве и проверить еще раз. Поэтому намного легче было написать тест =)
P.S.
Рассуждение о том, в каких случаях лучше писать unit-тесты было тут.
Специальные предложения
См. также
Онлайн-курс "Технология выполнения проектов ERP-класса – процессный подход". Третий поток. Курс проходит с 21 января по 18 марта 2020 года. Промо
Курс разработан Внедренческим центром «Раздолье». Курс предназначен для подготовки аналитиков, архитекторов и руководителей проектов автоматизации процессов управления с использованием комплексных ИТ-систем (1С:ERP, 1С:УХ, 1С:КА, 1С:УТ). В основе курса лежит методика применения процессного подхода.
9000 рублей
Просмотр и анализ структуры базы данных (отчет на СКД) 121
5 стартмани
24.07.2019 8890 96 YPermitin 25
Перенос данных УПП 1.3 => ERP 2 (ЕРП) / УТ 11 / КА 2.х (обработка переноса документов, остатков и справочников из "1С:Управление производственным предприятием, ред. 1.3" в ERP / УТ 11 / КА 2). Обновлен до УПП 1.3.127.х, КА 2.4.10.х и ERP 2.4.10.х! Промо
Обработка позволяет переносить из УПП 1.3 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления при выходе новых релизов конфигураций 1С.
29700 руб.
Новый раздел на Инфостарте - Electronic Software Distribution Промо
Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.
- Низкие цены, без скрытых платежей и наценок
- Оперативная отгрузка
- Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
- Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)
Переводим рутину ручного тестирования 1C на рельсы Jenkins-а и ADD 142
1 стартмани
03.06.2019 11826 1 ripreal1 86
Универсальный HTTP-сервис на платформе 1С, аля HTTP-сервер с примером 197
1 стартмани
13.05.2019 18444 93 Diversus 38
Базовый курс для начинающих 1С-программистов. Пятый поток. Онлайн-курс с 12 февраля по 15 апреля 2020 г. Промо
Данный онлайн-курс является начальной ступенью по изучению базовых принципов программирования в системе “1С:Предприятие” и предназначен для обучения 1С-программированию “с нуля”.
4500/9500 рублей
Расширение "Быстрая проверка кода" для конфигурации 1С:Автоматизированная проверка конфигураций 92
1 стартмани
26.03.2019 11010 42 Bazil 25
Перенос данных КА 1.1 => ERP 2 (ЕРП) (обработка переноса документов, остатков и справочной информации из "1С:Комплексная автоматизация, ред. 1.1" в "1С:ERP Управление предприятием, ред 2"). Обновлен до КА 1.1.115.х и ERP 2.4.10.х Промо
Обработка позволяет переносить из КА 1.1 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления в случае выхода новых релизов конфигураций 1С.
29700 руб.
Методика оптимизации программного кода 1С: проведение документов 85
1 стартмани
19.03.2019 15598 14 dmitrydemenew 83
Перенос данных БП 2.0 => УТ 11 / КА 2 / ERP 2 (перенос остатков, документов и справочников из "1С:Бухгалтерия предприятия 8", ред. 2.0 в "1С:Управление торговлей 8", ред.11 / КА 2 / ERP 2). Обновлено до УТ 11.4.10.х, КА 2.4.10.х, ERP 2.4.10.х! Промо
Перенос позволяет загрузить в УТ 11 / КА 2 / ERP 2 документы за выбранный период, справочную информацию и остатки по счетам бух. учета. Переносятся остатки денежных средств, взаиморасчетов, остатки товаров и материалов на складах. Переносятся девятнадцать основных видов документов за выбранный период и вся нормативно-справочная информация. Есть фильтр по организации. Если нужно переносить что-то дополнительно, то обычно бесплатно дорабатываю правила (перед покупкой согласуйте необходимые доработки).
29700 руб.
Инструктор. Прототип инструмента создания быстрых пользовательских инструкций 71
1 стартмани
15.02.2019 7908 37 ROM_NN 8
Подборка решений для взаимодействия со ФГИС «Меркурий» Промо
С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.
Перенос документов, остатков и справочников КА 1.1 => КА 2 / УТ 11. Обновлено до КА 2.4.10.х и УТ 11.4.10.х! Промо
Более 130 компаний выполнили переход на КА 2 или УТ 11 с помощью нашей разработки! Позволяет перенести не только остатки и справочники (как типовая обработка), но и документы за нужный период времени. Предоставляем техподдержку, оперативно исправляем замечания, выпускаем обновления при выходе новых релизов программ 1С. Вы можете проверить разработку до покупки: сделаем бесплатный тестовый перенос из вашей базы КА 1.1 и предоставим доступ к базе-результату через веб-клиент!
29700 руб.
Конструктор мобильного клиента Simple WMS Client: способ создать полноценный ТСД без мобильной разработки. Теперь новая версия - Simple UI (обновлено 14.11.2019) 178
5 стартмани
09.01.2019 24850 228 informa1555 187
Управление задачами в 1С - готовая подсистема с открытым кодом и широким базовым функционалом. Версия 1.0.6 95
2 стартмани
17.12.2018 11594 82 for_sale 38
Готовые переносы данных из различных конфигураций 1C Промо
Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.
Go. Разбор лога технологического журнала. Достойная альтернатива perl'у 85
1 стартмани
24.10.2018 12069 4 lazarenko 39
С 2020 года сервис «Продление поддержки конфигурации 1С:УПП» подорожает вдвое Промо
Успейте продлить поддержку УПП до повышения цен! Фирма «1С» предупредила об изменении цен на сервис «Продление поддержки конфигурации "1С:Управление производственным предприятием"». С 1 января 2020 года сервис подорожает в два раза.
Пользовательское определение языка 1С для Notepad++ и пример использования списка функций для навигации под свои нужды 66
1 стартмани
10.09.2018 8016 43 albert.goncharov 23
Подборка программ для взаимодействия с ЕГАИС Промо
ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.
Очный семинар по регулярному менеджменту Александра Фридмана "Вы или Хаос", 12 декабря 2019 г. , Санкт-Петербург Промо
Семинар по регулярному менеджменту от Александра Фридмана для собственников, первых лиц и топов. Технология управленческого планирования, комплексного управления временем и другими ресурсами, выполнением поручений, делами, информацией, контактами (встречи-звонки-почта).
от 11000 до 29000 рублей
Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции 65
5 стартмани
09.08.2018 17353 23 informa1555 26