1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-02-10 19:41:26 +02:00

Упущенные описания

This commit is contained in:
alkoleft 2023-09-05 19:37:31 +03:00
parent 3b2c7b7a17
commit 9c6f94b683
4 changed files with 456 additions and 305 deletions

View File

@ -8,7 +8,7 @@ tags: [Начало, Утверждения]
Доступ к утверждениям обеспечивает метод `ЮТест.ОжидаетЧто`, который возвращает инициализированный модуль `ЮТУтверждения`, реализующий работу с утверждениями.
:::tip
:::tip
Не рекомендуется обращаться к модулю `ЮТУтверждения` напрямую, используйте `ЮТест.ОжидаетЧто`
:::
@ -29,63 +29,89 @@ tags: [Начало, Утверждения]
## Доступные методы
* Сравнить значение используя
* `Равно` - проверка на равенство конкретному значению. Для сериализуемых объектов идет сравнение по значению
* `НеРавно` - проверка на не равенство конкретному значению. Для сериализуемых объектов идет сравнение по значению
* `Больше` - проверяемое значение должно быть больше указанного
* `БольшеИлиРавно` - проверяемое значение должно быть больше или равно указанному
* `Меньше` - проверяемое значение должно быть меньше указанного
* `МеньшеИлиРавно` - проверяемое значение должно быть меньше или равно указанному
* `ЭтоНеопределено` - проверяемое значение должно быть равно `Неопределено`
* `ЭтоНеНеопределено` - проверяемое значение должно быть не равно `Неопределено`
* `ЭтоNull` - проверяемое значение должно быть равно `Null`
* `ЭтоНеNull` - проверяемое значение должно быть не равно `Null`
* `ЭтоИстина` - проверяемое значение должно быть истиной
* `ЭтоНеИстина` - проверяемое значение не должно быть истиной
* `ЭтоЛожь` - проверяемое значение должно быть ложью
* `ЭтоНеЛожь` - проверяемое значение не должно быть ложью
* Проверить заполненность
* `Заполнено` - проверяет заполненность значения
* `НеЗаполнено` - проверяет незаполненность значения
* `Существует` - проверяет существование (не равно `Null` и `Неопределено`) значения
* `НеСуществует` - проверяет не существование (не равно `Null` и `Неопределено`) значения
* Проверить длину строки (размер коллекции)
* `ИмеетДлину` - проверяет, что значение имеет указанную длину (размер)
* `ИмеетДлинуБольше` - проверяет, что значение имеет длину (размер), которая больше указанной
* `ИмеетДлинуМеньше` - проверяет, что значение имеет длину (размер), которая меньше указанной
* `НеИмеетДлину` - проверяет, что длина (размер) значения не равна указанной
* Проверить вхождения подстроки
* `Содержит` - проверяемая строка содержит указанную подстроку
* `НеСодержит` - проверяемая строка не содержит указанную подстроку
* `НачинаетсяС` - проверяемая строка начинается с указанной строки
* `ЗаканчиваетсяНа` - проверяемая строка заканчивается на указанную строку
* Проверить вхождения значения в интервал
* `МеждуВключаяГраницы` - проверяемое значение находиться в указанному интервале (включая границы)
* `МеждуИсключаяГраницы` - проверяемое значение находиться в указанному интервале (исключая границы)
* `МеждуВключаяНачалоГраницы` - проверяемое значение находиться в указанному интервале (включая левую границу и исключая правую)
* `МеждуВключаяОкончаниеГраницы` - проверяемое значение находиться в указанному интервале (исключая левую границу и включая правую)
* Проверить тип значения
* `ИмеетТип` - проверяемое значение должно иметь указанный тип
* `НеИмеетТип` - тип проверяемого значения должен отличаться от указанного
* Проверить выполнение метода
* `ВыбрасываетИсключение` - проверят, что указанный метод объекта выбрасывает исключение
* `НеВыбрасываетИсключение` - проверят, что указанный метод объекта не выбрасывает исключение
* Проверить наличие свойств/реквизитов
* `ИмеетСвойство` - проверяемый объект должен содержать указанное свойство
* `НеИмеетСвойства` - проверяемый объект не содержит указанное свойство
* `ИмеетСвойстваРавные` - проверяемый объект должен содержать указанный набор свойств/реквизитов и значений
* Проверить элементы коллекции
* `Содержит` - проверяемая коллекция должна содержать указанный элемент
* `НеСодержит` - проверяемая коллекция не должна содержать указанный элемент
* `КаждыйЭлементСодержитСвойство` - проверяет, что каждый элемент коллекции имеет указанное свойство
* `КаждыйЭлементСодержитСвойствоСоЗначением` - проверяет, что каждый элемент коллекции имеет указанное свойство, которое равно ожидаемому значению
* `ЛюбойЭлементСодержитСвойство` - проверяет, что в коллекции есть элемент содержащий указанное свойство
* `ЛюбойЭлементСодержитСвойствоСоЗначением` - проверяет, что в коллекции есть элемент содержащий указанное свойство, которое равно ожидаемому значению
:::tip
Полный и актуальный набор методов смотрите в описании API
:::
### Сравнение значений
* `Равно` - проверка на равенство конкретному значению. Для сериализуемых объектов идет сравнение по значению
* `НеРавно` - проверка на не равенство конкретному значению. Для сериализуемых объектов идет сравнение по значению
* `Больше` - проверяемое значение должно быть больше указанного
* `БольшеИлиРавно` - проверяемое значение должно быть больше или равно указанному
* `Меньше` - проверяемое значение должно быть меньше указанного
* `МеньшеИлиРавно` - проверяемое значение должно быть меньше или равно указанному
* `ЭтоНеопределено` - проверяемое значение должно быть равно `Неопределено`
* `ЭтоНеНеопределено` - проверяемое значение должно быть не равно `Неопределено`
* `ЭтоNull` - проверяемое значение должно быть равно `Null`
* `ЭтоНеNull` - проверяемое значение должно быть не равно `Null`
* `ЭтоИстина` - проверяемое значение должно быть истиной
* `ЭтоНеИстина` - проверяемое значение не должно быть истиной
* `ЭтоЛожь` - проверяемое значение должно быть ложью
* `ЭтоНеЛожь` - проверяемое значение не должно быть ложью
### Проверка заполненности
* `Заполнено` - проверяет заполненность значения
* `НеЗаполнено` - проверяет незаполненность значения
* `Существует` - проверяет существование (не равно `Null` и `Неопределено`) значения
* `НеСуществует` - проверяет не существование (не равно `Null` и `Неопределено`) значения
### Проверка строк
* `ИмеетДлину` - проверяет, что строка имеет указанную длину
* `ИмеетДлинуБольше` - проверяет, что длин строки больше указанной
* `ИмеетДлинуМеньше` - проверяет, что длина строки меньше указанной
* `НеИмеетДлину` - проверяет, что длина строки отличается от указанной
* `Содержит` - проверяемая строка содержит указанную подстроку
* `НеСодержит` - проверяемая строка не содержит указанную подстроку
* `НачинаетсяС` - проверяемая строка начинается с указанной строки
* `ЗаканчиваетсяНа` - проверяемая строка заканчивается на указанную строку
* `СодержитСтрокуПоШаблону` - проверяемая строка содержит подстроку, соответствующую регулярному выражению
* `НеСодержитСтрокуПоШаблону` - проверяемая строка не содержит подстроку, соответствующую регулярному выражению
### Проверка вхождения значения в интервал
* `МеждуВключаяГраницы` - проверяемое значение находиться в указанному интервале (включая границы)
* `МеждуИсключаяГраницы` - проверяемое значение находиться в указанному интервале (исключая границы)
* `МеждуВключаяНачалоГраницы` - проверяемое значение находиться в указанному интервале (включая левую границу и исключая правую)
* `МеждуВключаяОкончаниеГраницы` - проверяемое значение находиться в указанному интервале (исключая левую границу и включая правую)
### Проверка типа значения
* `ИмеетТип` - проверяемое значение должно иметь указанный тип
* `НеИмеетТип` - тип проверяемого значения должен отличаться от указанного
### Проверка выполнения метода
* `ВыбрасываетИсключение` - проверят, что указанный метод объекта выбрасывает исключение
* `НеВыбрасываетИсключение` - проверят, что указанный метод объекта не выбрасывает исключение
### Проверка наличия свойств/реквизитов
* `ИмеетСвойство` - проверяемый объект должен содержать указанное свойство
* `НеИмеетСвойства` - проверяемый объект не содержит указанное свойство
* `ИмеетСвойстваРавные` - проверяемый объект должен содержать указанный набор свойств/реквизитов и значений
### Проверка коллекции
* `ИмеетДлину` - проверяет, что коллекция имеет указанный размер
* `ИмеетДлинуБольше` - проверяет, что коллекция имеет размер, который больше указанного
* `ИмеетДлинуМеньше` - проверяет, что коллекция имеет размер, который меньше указанного
* `НеИмеетДлину` - проверяет, что размер коллекции отличается от указанного
* `Содержит` - проверяемая коллекция должна содержать указанный элемент
* `НеСодержит` - проверяемая коллекция не должна содержать указанный элемент
* `КаждыйЭлементСодержитСвойство` - проверяет, что каждый элемент коллекции имеет указанное свойство
* `КаждыйЭлементСодержитСвойствоСоЗначением` - проверяет, что каждый элемент коллекции имеет указанное свойство, которое равно ожидаемому значению
* `ЛюбойЭлементСодержитСвойство` - проверяет, что в коллекции есть элемент содержащий указанное свойство
* `ЛюбойЭлементСодержитСвойствоСоЗначением` - проверяет, что в коллекции есть элемент содержащий указанное свойство, которое равно ожидаемому значению
* `КаждыйЭлементСоответствуетПредикату` - проверяет, что элементы коллекции соответствуют переданным условиям
* `ЛюбойЭлементСоответствуетПредикату` - проверяет, что коллекция содержит элемент, который соответствует переданным условиям
### Проверка на соответствие набору условий, предикату
* `СоответствуетПредикату` - проверяет, что объект или его свойство соответствует набору условий
### Проверка методов объекта
Для проверки работы методов объекта есть набор утверждений среди описанных выше (`ВыбрасываетИсключение` и `НеВыбрасываетИсключение`), но для их работы необходимо выполнить предварительные настройки.
@ -106,53 +132,98 @@ tags: [Начало, Утверждения]
## Примеры
1. Базовые проверки
```bsl
ЮТест.ОжидаетЧто(2 + 3, "2 + 3") // Используя модуль утверждений установим проверяемое значение и пояснение
.ИмеетТип("Число") // Проверим тип
.Заполнено() // Заполненность проверяемого значения
.Больше(0) // Сравним с нулем
.Равно(5); // Проверим ожидаемый результат
```
### Базовые проверки
2. Проверка сложного объекта
```bsl
ЮТест.ОжидаетЧто(2 + 3, "2 + 3") // Используя модуль утверждений установим проверяемое значение и пояснение
.ИмеетТип("Число") // Проверим тип
.Заполнено() // Заполненность проверяемого значения
.Больше(0) // Сравним с нулем
.Равно(5); // Проверим ожидаемый результат
```
```bsl
Объект = ЮТОбщий.ЗначениеВМассиве("1", "2", "3");
ЮТУтверждения.Что(Объект, "Проверка элементов массива")
.Содержит("1")
.НеСодержит(1)
.Элемент(0).Равно("1")
.Элемент(1).Равно("2")
.Элемент(-1).Равно("3")
.Свойство("[00]").Равно("1")
.Свойство("[1]").Равно("2")
.Свойство("[-1]").Равно("3")
.НетСвойства(3)
.НеИмеетСвойства("[3]");
Объект.Добавить(Новый Структура("Первый, Второй", 1, ЮТОбщий.ЗначениеВМассиве(2)));
ЮТУтверждения.Что(Объект, "Проверка свойства элемента массива")
.Свойство("[3].Первый").Равно(1)
.Свойство("[3].Второй[-1]").Равно(2)
.Свойство("[3].Второй[0]").Равно(2)
```
### Проверка сложного объекта
3. Проверка вызова метода
```bsl
Объект = ЮТОбщий.ЗначениеВМассиве("1", "2", "3");
ЮТУтверждения.Что(Объект, "Проверка элементов массива")
.Содержит("1")
.НеСодержит(1)
.Элемент(0).Равно("1")
.Элемент(1).Равно("2")
.Элемент(-1).Равно("3")
.Свойство("[00]").Равно("1")
.Свойство("[1]").Равно("2")
.Свойство("[-1]").Равно("3")
.НетСвойства(3)
.НеИмеетСвойства("[3]");
```bsl
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
.Метод("МетодБезИсключение", ЮТОбщий.ЗначениеВМассиве("Исключение"))
.НеВыбрасываетИсключение()
.НеВыбрасываетИсключение("Ожидаемое исключение");
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
.Метод("МетодИсключение", ЮТОбщий.ЗначениеВМассиве("Исключение", 2))
.ВыбрасываетИсключение("Слишком много фактических параметров");
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
.Метод("МетодИсключение", ЮТОбщий.ЗначениеВМассиве("Исключение"))
.ВыбрасываетИсключение("Исключение");
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
.Метод("МетодБезИсключение")
.ВыбрасываетИсключение("Недостаточно фактических параметров");
```
Объект.Добавить(Новый Структура("Первый, Второй", 1, ЮТОбщий.ЗначениеВМассиве(2)));
ЮТУтверждения.Что(Объект, "Проверка свойства элемента массива")
.Свойство("[3].Первый").Равно(1)
.Свойство("[3].Второй[-1]").Равно(2)
.Свойство("[3].Второй[0]").Равно(2)
```
### Проверка вызова метода
```bsl
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
.Метод("МетодБезИсключение", ЮТОбщий.ЗначениеВМассиве("Исключение"))
.НеВыбрасываетИсключение()
.НеВыбрасываетИсключение("Ожидаемое исключение");
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
.Метод("МетодИсключение", ЮТОбщий.ЗначениеВМассиве("Исключение", 2))
.ВыбрасываетИсключение("Слишком много фактических параметров");
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
.Метод("МетодИсключение", ЮТОбщий.ЗначениеВМассиве("Исключение"))
.ВыбрасываетИсключение("Исключение");
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
.Метод("МетодБезИсключение")
.ВыбрасываетИсключение("Недостаточно фактических параметров");
```
### Проверка соответствия предикату
```bsl
Дата = ЮТест.Данные().СлучайнаяДата();
Объект = Новый Структура;
Объект.Вставить("Число", 1);
Объект.Вставить("Строка", "1");
Объект.Вставить("Дата", Дата);
Объект.Вставить("Массив", ЮТОбщий.ЗначениеВМассиве(1, "1"));
ПроверкаЧисла = ЮТест.Предикат().Реквизит("Число")
.ИмеетТип(Тип("Число"))
.БольшеИлиРавно(1)
.МеньшеИлиРавно(10)
.Получить();
ПроверкаДаты = ЮТест.Предикат().Реквизит("Дата")
.ИмеетТип(Новый ОписаниеТипов("Дата"))
.Равно(Дата)
.Получить();
ЮТест.ОжидаетЧто(Объект)
.СоответствуетПредикату(ЮТест.Предикат()
.Заполнено()
.ИмеетТип("Структура"))
.СоответствуетПредикату(ПроверкаЧисла)
.СоответствуетПредикату(ПроверкаДаты)
;
```
### Проверка элементов коллекции на соответствие предикату
```bsl
ТаблицаРезультатов = ЮТест.Данные().ЗагрузитьИзМакета("ОбщийМакет.ЮТ_МакетТестовыхДанных.R2C1:R5C11", ОписанияТипов);
Ютест.ОжидаетЧто(ТаблицаРезультатов)
.ИмеетТип("Массив")
.ИмеетДлину(3)
.КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
.Реквизит("Товар").Заполнено().ИмеетТип("СправочникСсылка.Товары")
.Реквизит("Период").Заполнено().ИмеетТип("Дата")
.Реквизит("Количество").Заполнено().ИмеетТип("Число")
.Реквизит("Цена").Заполнено().ИмеетТип("Число")
)
```

View File

@ -24,7 +24,7 @@ tags: [Начало, Тестовые данные]
В текущей версии тестовый движок предоставляет api для программного создания тестовых данных. За это отвечает общий модуль `ЮТТестовыеДанные`, к которому можно обратиться через метод `ЮТест.Данные()`.
:::tip
:::tip
Не рекомендуется обращаться к модулю `ЮТТестовыеДанные` напрямую, используйте `ЮТест.Данные()`
:::
@ -37,99 +37,99 @@ tags: [Начало, Тестовые данные]
* Использовать таблицы markdown в качестве макетов данных
* Генерировать таблицы значений из табличных документов и таблиц markdown
Примеры
## Примеры
1. Генерация фейкового документа
### Генерация фейкового документа
```bsl
#Если Сервер Тогда
Конструктор = ЮТест.Данные().КонструкторОбъекта(Документы.ПриходТовара);
#Иначе
Конструктор = ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара");
#КонецЕсли
```bsl
#Если Сервер Тогда
Конструктор = ЮТест.Данные().КонструкторОбъекта(Документы.ПриходТовара);
#Иначе
Конструктор = ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара");
#КонецЕсли
Конструктор
.Фикция("Поставщик")
.Фикция("Склад")
.Фикция("Валюта")
.Установить("Организация", ЮТест.Данные().КонструкторОбъекта("Справочники.Организации").Установить("КакойТоТамУчет", Истина))
.ТабличнаяЧасть("Товары");
Для Инд1 = 1 По ЮТест.Данные().СлучайноеЧисло(1, 5) Цикл
Конструктор.ДобавитьСтроку()
.Фикция("Товар")
.Установить("Цена", ЮТест.Данные().СлучайноеПоложительноеЧисло(9999, 2))
.Установить("Количество", ЮТест.Данные().СлучайноеПоложительноеЧисло(20))
.Установить("Сумма", Конструктор.ДанныеСтроки().Цена * Конструктор.ДанныеСтроки().Количество)
КонецЦикла;
Конструктор
.Фикция("Поставщик")
.Фикция("Склад")
.Фикция("Валюта")
.Установить("Организация", ЮТест.Данные().КонструкторОбъекта("Справочники.Организации").Установить("КакойТоТамУчет", Истина))
.ТабличнаяЧасть("Товары");
Для Инд1 = 1 По ЮТест.Данные().СлучайноеЧисло(1, 5) Цикл
Конструктор.ДобавитьСтроку()
.Фикция("Товар")
.Установить("Цена", ЮТест.Данные().СлучайноеПоложительноеЧисло(9999, 2))
.Установить("Количество", ЮТест.Данные().СлучайноеПоложительноеЧисло(20))
.Установить("Сумма", Конструктор.ДанныеСтроки().Цена * Конструктор.ДанныеСтроки().Количество)
КонецЦикла;
Ссылка = Конструктор.Провести();
```
Ссылка = Конструктор.Провести();
```
2. Генерация произвольных фейковых данных
### Генерация произвольных фейковых данных
```bsl
Функция ОписаниеСервера(Знач Идентификатор = Неопределено) Экспорт
Описание = БазовоеОписаниеОбъекта(Идентификатор, "СРВ");
Описание.Вставить("Адрес", ЮТТестовыеДанные.СлучайныйIPАдрес());
Описание.Вставить("ЧастотаЯдра", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(4, 3));
Описание.Вставить("КоличествоЯдер", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(10));
Описание.Вставить("КоличествоПотоков", Описание.КоличествоЯдер * 2);
Описание.Вставить("ПроизводительностьПроцессора", Описание.ЧастотаЯдра * Описание.КоличествоЯдер);
Описание.Вставить("ОбъемПамяти", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(1024, 3));
Описание.Вставить("Диски", Новый Массив());
Описание.Вставить("Кластер");
Для Инд = 1 По ЮТТестовыеДанные.СлучайноеЧисло(1, 3) Цикл
Описание.Диски.Добавить(ОписаниеДиска());
КонецЦикла;
Возврат Описание;
КонецФункции
```bsl
Функция ОписаниеСервера(Знач Идентификатор = Неопределено) Экспорт
Описание = БазовоеОписаниеОбъекта(Идентификатор, "СРВ");
Описание.Вставить("Адрес", ЮТТестовыеДанные.СлучайныйIPАдрес());
Описание.Вставить("ЧастотаЯдра", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(4, 3));
Описание.Вставить("КоличествоЯдер", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(10));
Описание.Вставить("КоличествоПотоков", Описание.КоличествоЯдер * 2);
Описание.Вставить("ПроизводительностьПроцессора", Описание.ЧастотаЯдра * Описание.КоличествоЯдер);
Описание.Вставить("ОбъемПамяти", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(1024, 3));
Описание.Вставить("Диски", Новый Массив());
Описание.Вставить("Кластер");
Для Инд = 1 По ЮТТестовыеДанные.СлучайноеЧисло(1, 3) Цикл
Описание.Диски.Добавить(ОписаниеДиска());
КонецЦикла;
Возврат Описание;
КонецФункции
Функция ОписаниеЗаявкиНаСозданиеВМ() Экспорт
Описание = Новый Структура();
Описание.Вставить("Наименование", "req-" + ЮТТестовыеДанные.СлучайнаяСтрока());
Описание.Вставить("ДатаДобавления", глПолучитьМосковскоеВремя());
Описание.Вставить("ДатаОкончанияАренды", глДобавитьКДате(глПолучитьМосковскоеВремя(), "ДЕНЬ", 2));
Описание.Вставить("Адрес", ЮТТестовыеДанные.СлучайныйIPАдрес());
Описание.Вставить("Проект", Проект());
Описание.Вставить("Мейнтейнер", ПараметрыСеанса.Сотрудник);
Описание.Вставить("КоличествоCPU", ЮТТестовыеДанные.СлучайноеЧисло(1, 4));
Описание.Вставить("КоличествоПамяти", ЮТТестовыеДанные.СлучайноеЧисло(1, 16));
Описание.Вставить("КоличествоДисков", ЮТТестовыеДанные.СлучайноеЧисло(1, 16));
Описание.Вставить("ОперационнаяСистема", ЮТТестовыеДанные.СоздатьЭлемент(Справочники.ОперационныеСистемы));
Описание.Вставить("СредаЭксплуатации", "");
Описание.Вставить("Назначение", ЮТТестовыеДанные.СоздатьЭлемент(Справочники.НазначенияВиртуальныхМашин));
Описание.Вставить("ТипСреды", Справочники.ТипыИнформационныхСред.BETA);
Описание.Вставить("КодСервиса", ЮТТестовыеДанные.СлучайнаяСтрока(1));
Возврат Описание;
КонецФункции
Функция ОписаниеЗаявкиНаСозданиеВМ() Экспорт
Описание = Новый Структура();
Описание.Вставить("Наименование", "req-" + ЮТТестовыеДанные.СлучайнаяСтрока());
Описание.Вставить("ДатаДобавления", глПолучитьМосковскоеВремя());
Описание.Вставить("ДатаОкончанияАренды", глДобавитьКДате(глПолучитьМосковскоеВремя(), "ДЕНЬ", 2));
Описание.Вставить("Адрес", ЮТТестовыеДанные.СлучайныйIPАдрес());
Описание.Вставить("Проект", Проект());
Описание.Вставить("Мейнтейнер", ПараметрыСеанса.Сотрудник);
Описание.Вставить("КоличествоCPU", ЮТТестовыеДанные.СлучайноеЧисло(1, 4));
Описание.Вставить("КоличествоПамяти", ЮТТестовыеДанные.СлучайноеЧисло(1, 16));
Описание.Вставить("КоличествоДисков", ЮТТестовыеДанные.СлучайноеЧисло(1, 16));
Описание.Вставить("ОперационнаяСистема", ЮТТестовыеДанные.СоздатьЭлемент(Справочники.ОперационныеСистемы));
Описание.Вставить("СредаЭксплуатации", "");
Описание.Вставить("Назначение", ЮТТестовыеДанные.СоздатьЭлемент(Справочники.НазначенияВиртуальныхМашин));
Описание.Вставить("ТипСреды", Справочники.ТипыИнформационныхСред.BETA);
Описание.Вставить("КодСервиса", ЮТТестовыеДанные.СлучайнаяСтрока(1));
Возврат Описание;
КонецФункции
Функция НовыйОбразDocker(Версия, ПоУмолчанию = Истина) Экспорт
Данные = Новый Структура("Адрес, ВерсияПлатформы, ТипПлатформы, ИспользоватьПоУмолчанию");
Данные.Адрес = "gitlab.ru/orais/ci_cd/1cws-apache24:" + Версия;
Данные.ВерсияПлатформы = Версия;
Данные.ТипПлатформы = Перечисления.ТипыСоединенияИсточникаДанных.Соединение1СПредприятие83Сервер;
Данные.ИспользоватьПоУмолчанию = ПоУмолчанию;
Возврат ЮТТестовыеДанные.СоздатьЭлемент(Справочники.ОбразыDocker, Версия, Данные);
КонецФункции
```
Функция НовыйОбразDocker(Версия, ПоУмолчанию = Истина) Экспорт
Данные = Новый Структура("Адрес, ВерсияПлатформы, ТипПлатформы, ИспользоватьПоУмолчанию");
Данные.Адрес = "gitlab.ru/orais/ci_cd/1cws-apache24:" + Версия;
Данные.ВерсияПлатформы = Версия;
Данные.ТипПлатформы = Перечисления.ТипыСоединенияИсточникаДанных.Соединение1СПредприятие83Сервер;
Данные.ИспользоватьПоУмолчанию = ПоУмолчанию;
Возврат ЮТТестовыеДанные.СоздатьЭлемент(Справочники.ОбразыDocker, Версия, Данные);
КонецФункции
```
3. Чтение из таблицы Markdown
### Чтение из таблицы Markdown
```bsl
Макет =
@ -174,11 +174,16 @@ tags: [Начало, Тестовые данные]
Возврат ТипыМетаданных;
```
4. Таблица значений из табличного документа (или таблицы markdown)
### Загрузка данных из макетов
**Пример № 1**
Для загрузки данных из макетов подойдет метод `ЮТест.Данные().ЗагрузитьИзМакета`
В качестве источника данных можно использовать весь табличный документ. В этом случае будет получена таблица значений, начиная с 1-ой строки и 1-ой колонки табличного документа до первой пустой строки.
Он позволяет:
* Загружать данные из табличных макет (`ТабличныйДокумент` или `ТекстовыйДокумент` с таблицей markdown)
* Загружать данные на клиенте и на сервер
* Загружать не весь макет, а конкретную область (в одном макете может находится несколько таблиц данных)
* Приводить значения к указанным типам и создавать записи в базе данных
Пример табличного документа:
@ -190,129 +195,156 @@ tags: [Начало, Тестовые данные]
| Товар 2 | Поставщик 1 | Товар | 2 000 | 1 | 2000 |
| Услуга | | Услуга | 300,5 | 1 | 300.5 |
Значение в колонке "Товар" является идентификатором ссылки. Для справочника значение этой колонки по умолчанию записывается в реквизит "Наименование" или "Код", в зависимости от того, какой из этих реквизитов является основным представлением. Для документа это значение никуда не записывается, оно лишь является идентификатором. Таким образом, если одному значению в колонке "Товар" соответствуют различные значения в других колонках, то в элемент справочника запишутся реквизиты из первой строки, а для других строк ссылка на этот элемент будет проставлена по соответствующему идентификатору:
Особенности:
* Создание данных
* Данные в базе всегда создаются, не выполняется поиск уже существующих ссылок. При необходимости вы можете найти данные сами и передать в параметрах `ЗаменяемыеЗначения` или `КэшЗначений`
:::tip
При преобразовании табличного документа в таблицу значений существующие объекты метаданных не изменяются, только создаются новые. Нужно проявлять внимательность в случаях, если в базе уже имеются данные с тем же кодом/наименованием (и по ним используется контроль уникальности), что и в табличном документе.
:::
* Можно указывать значения вложенных реквизитов в других колонках, например для колонки `Товар` можно добавить колонки с поставщиком и видом товара `Товар.Поставщик` и `Товар.Вид`, в которых указать нужные значения
* Переиспользование созданных данных, используется `КэшЗначений`, в который помещаются все созданные данные, если кэш содержит данные подходящего типа с указанным идентификатором, то используется ранее созданное значение из кэша. Например, в примере выше, для первой строки будет создан товар с идентификатором `Товар 1`. В строках 2 и 3 будет использовано значение из кэша - `Товар 1`, в 4й и 5й строке - созданы новые товары.
:::tip
Значение в колонке "Товар" является идентификатором ссылки. Для справочника значение этой колонки по умолчанию записывается в реквизит "Наименование" или "Код", в зависимости от того, какой из этих реквизитов является основным представлением. Для документа это значение никуда не записывается, оно лишь является идентификатором. Таким образом, если одному значению в колонке "Товар" соответствуют различные значения в других колонках, то в элемент справочника запишутся реквизиты из первой строки, а для других строк ссылка на этот элемент будет проставлена по соответствующему идентификатору
:::
#### Загрузка всего макета
В качестве источника данных можно использовать весь табличный документ. В этом случае будет получена таблица значений, начиная с 1-ой строки и 1-ой колонки табличного документа до первой пустой строки.
:::info
Этот код работает и на клиенте и на сервер. Для сервера результатом будет таблица значений, для клиента - массив структур
:::
_Исходные данные_
| Товар | Товар.Поставщик | Товар.Вид | Цена | Количество | Сумма |
|---------|-----------------|-----------|-------|------------|-------|
| Товар 1 | Поставщик 1 | Товар | 100 | 1 | 100 |
| Товар 1 | | | 100 | 2 | 200 |
| Товар 1 | Поставщик 2 | Товар | 100 | 3 | 300 |
| Товар 2 | Поставщик 1 | Товар | 2 000 | 1 | 2000 |
| Услуга | | Услуга | 300,5 | 1 | 300.5 |
```bsl
ИсходныеДанные = ПолучитьОбщийМакет("ЮТ_МакетТестовыхДанных");
ОписанияТипов = Новый Соответствие;
ОписанияТипов.Вставить("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары"));
ОписанияТипов.Вставить("Цена", Новый ОписаниеТипов("Число"));
ОписанияТипов.Вставить("Количество", Новый ОписаниеТипов("Число"));
ОписанияТипов.Вставить("Сумма", Новый ОписаниеТипов("Число"));
ТаблицаТоваров = ЮТест.Данные().ТаблицаЗначенийИзТабличногоДокумента(
ИсходныеДанные,
ОписанияТипов
);
ТаблицаТоваров = ЮТест.Данные().ЗагрузитьИзМакета("ОбщийМакет.ЮТ_МакетТестовыхДанных", ОписанияТипов);
Ютест.ОжидаетЧто(ТаблицаТоваров)
.ИмеетТип("ТаблицаЗначений")
.ИмеетДлину(5)
.ИмеетТип("ТаблицаЗначений")
.ИмеетДлину(5)
.Свойство("[0].Товар.Наименование").Равно("Товар 1")
.Свойство("[0].Товар.Поставщик.Наименование").Равно("Поставщик")
.Свойство("[0].Товар.Вид").Равно(Перечисления.ВидыТоваров.Товар)
.Свойство("[0].Количество").Равно(1)
.Свойство("[0].Цена").Равно(100)
.Свойство("[0].Сумма").Равно(100)
.Свойство("[0].Товар.Поставщик.Наименование").Равно("Поставщик")
.Свойство("[0].Товар.Вид").Равно(Перечисления.ВидыТоваров.Товар)
.Свойство("[0].Количество").Равно(1)
.Свойство("[0].Цена").Равно(100)
.Свойство("[0].Сумма").Равно(100)
.Свойство("[1].Товар").Равно(ТаблицаТоваров[0].Товар)
.Свойство("[1].Количество").Равно(2)
.Свойство("[1].Цена").Равно(100)
.Свойство("[1].Сумма").Равно(200)
.Свойство("[1].Количество").Равно(2)
.Свойство("[1].Цена").Равно(100)
.Свойство("[1].Сумма").Равно(200)
.Свойство("[2].Товар").Равно(ТаблицаТоваров[0].Товар)
.Свойство("[2].Количество").Равно(3)
.Свойство("[2].Цена").Равно(100)
.Свойство("[2].Сумма").Равно(300)
.Свойство("[2].Количество").Равно(3)
.Свойство("[2].Цена").Равно(100)
.Свойство("[2].Сумма").Равно(300)
.Свойство("[3].Товар.Наименование").Равно("Товар 2")
.Свойство("[3].Товар.Поставщик.Наименование").Равно("Поставщик")
.Свойство("[3].Товар.Вид").Равно(Перечисления.ВидыТоваров.Товар)
.Свойство("[3].Количество").Равно(1)
.Свойство("[3].Цена").Равно(2000)
.Свойство("[3].Сумма").Равно(2000)
.Свойство("[3].Товар.Поставщик.Наименование").Равно("Поставщик")
.Свойство("[3].Товар.Вид").Равно(Перечисления.ВидыТоваров.Товар)
.Свойство("[3].Количество").Равно(1)
.Свойство("[3].Цена").Равно(2000)
.Свойство("[3].Сумма").Равно(2000)
.Свойство("[4].Товар.Наименование").Равно("Услуга")
.Свойство("[4].Товар.Поставщик").НеЗаполнено()
.Свойство("[4].Товар.Вид").Равно(Перечисления.ВидыТоваров.Услуга)
.Свойство("[4].Количество").Равно(1)
.Свойство("[4].Цена").Равно(300.5)
.Свойство("[4].Сумма").Равно(300.5);
.Свойство("[4].Товар.Поставщик").НеЗаполнено()
.Свойство("[4].Товар.Вид").Равно(Перечисления.ВидыТоваров.Услуга)
.Свойство("[4].Количество").Равно(1)
.Свойство("[4].Цена").Равно(300.5)
.Свойство("[4].Сумма").Равно(300.5);
```
**Пример № 2**
#### Загрузка области из макета
Можно получить отдельную область из табличного документа и использовать ее в качестве источника данных для таблицы значений. Таким образом в одном табличном документе можно хранить несколько таблиц.
Можно получить отдельную область из табличного документа и использовать ее в качестве источника данных для таблицы значений. Таким образом в одном табличном документе можно хранить несколько таблиц.
Пример юнит-теста для проверки работы метода. На входе он получает таблицу значений, которую заполняет и/или возвращает. В одной области табличного документа - исходные данные, передаваемые в качестве входящего параметра, а в другой - таблица с ожидаемым значением.
_Исходные данные_:
_Исходные данные_
| Товар | Товар.Поставщик | Товар.Вид | Количество |
|---------|-----------------|-----------|------------|
| Товар 1 | Поставщик 1 | Товар | 1 |
| Товар 2 | Поставщик 1 | Товар | 1 |
| Услуга | | Услуга | 1 |
_Ожидаемое значение_:
| Товар | Цена | Количество | Сумма |
|---------|-------|------------|-------|
| Товар 1 | 100 | 1 | 100 |
| Товар 2 | 2 000 | 1 | 2000 |
| Услуга | 300,5 | 1 | 300.5 |
| Товар | Товар.Поставщик | Товар.Вид | Количество |
|---------|-----------------|------------|------------|
| Товар 1 | Поставщик 1 | Товар | 1 |
| Товар 2 | Поставщик 1 | Товар | 1 |
| Услуга | | Услуга | 1 |
| Товар | Цена | Количество | Сумма |
| Товар 1 | 100 | 1 | 100 |
| Товар 2 | 2 000 | 1 | 2000 |
| Услуга | 300,5 | 1 | 300.5 |
```bsl
ТабличныйДокумент = ПолучитьОбщийМакет("ЮТ_МакетТестовыхДанных");
ИсходныеДанные = ТабличныйДокумент.ПолучитьОбласть(2, 1, 5, 4);
ОжидаемоеЗначение = ТабличныйДокумент.ПолучитьОбласть(7, 1, 10, 4);
ОписанияТипов = Новый Соответствие;
ОписанияТипов.Вставить("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары"));
ОписанияТипов.Вставить("Цена", Новый ОписаниеТипов("Число"));
ОписанияТипов.Вставить("Количество", Новый ОписаниеТипов("Число"));
ОписанияТипов.Вставить("Сумма", Новый ОписаниеТипов("Число"));
// Для общего использования созданных значений используется переменная КешЗначений.
// В двух табличных документах одинаковый состав товаров.
// Чтобы в обеих таблицах этому товару соответствовало одно значение справочника -
// нужно передавать в параметре функции переменную, в которой будут храниться соответствия
// наименований к ссылкам на объекты.
КэшЗначений = Новый Соответствие;
ТаблицаИсходныхДанных = ЮТест.Данные().ТаблицаЗначенийИзТабличногоДокумента(
ИсходныеДанные,
ОписанияТипов,
КэшЗначений
ТаблицаИсходныхДанных = ЮТест.Данные().ЗагрузитьИзМакета(
"ОбщийМакет.ЮТ_МакетТестовыхДанных.R1C1R4C4",
ОписанияТипов,
КэшЗначений
);
ТаблицаОжидаемыхЗначений = ЮТест.Данные().ТаблицаЗначенийИзТабличногоДокумента(
ОжидаемоеЗначение,
ОписанияТипов,
КэшЗначений
ТаблицаИсходныхДанных = ЮТест.Данные().ЗагрузитьИзМакета(
"ОбщийМакет.ЮТ_МакетТестовыхДанных.R1C1R4C4",
ОписанияТипов,
КэшЗначений
);
ТаблицаОжидаемыхЗначений = ЮТест.Данные().ЗагрузитьИзМакета(
"ОбщийМакет.ЮТ_МакетТестовыхДанных.R5C1R8C4",
ОписанияТипов,
КэшЗначений
);
ТаблицаРезультата = ОбщийМодуль1.ТаблицаТоваровСЦенамиИзОстатков(ТаблицаИсходныхДанных);
Ютест.ОжидаетЧто(ТаблицаРезультата)
.Равно(ТаблицаОжидаемыхЗначений);
```
**Пример № 3**
#### Загрузка документа с табличной частью и проверка движений
Интеграционный-тест для проверки формирования движений документа по некоторому регистру. В первой таблице - табличная часть документа. Во второй - реквизиты самого документа. В третьей - ожидаемые движения по регистру, который нужно протестировать.
_Реквизиты документа_:
В макете мы создадим три именованные области с таблицами
Область `Реквизиты_документа`
| ПриходТовара | Дата | Поставщик | Валюта | Склад | Организация |
|--------------|------|-------------|--------|-------|-------------|
| Документ 1 | Дата | Поставщик 1 | Валюта | Склад | Организация |
_Табличная часть документа_:
Область `Табличная_часть_документа`
| Документ | Товар | Товар.Поставщик | Товар.Вид | Цена | Количество | Сумма |
|------------|---------|-----------------|-----------|-------|------------|-------|
| Документ 1 | Товар 1 | Поставщик 1 | Товар | 100 | 1 | 100 |
| Документ 1 | Товар 2 | Поставщик 1 | Товар | 2 000 | 1 | 2000 |
| Документ 1 | Услуга | | Услуга | 300,5 | 1 | 300.5 |
_Ожидаемые движения_:
Область `Ожидаемые_движения`
| Период | Активность | ВидДвижения | Регистратор | Склад | Товар | Количество |
|--------|------------|-------------|-------------|-------|---------|------------|
| Дата | Истина | Приход | Документ 1 | Склад | Товар 1 | 1 |
@ -320,10 +352,6 @@ _Ожидаемые движения_:
| Дата | Истина | Приход | Документ 1 | Склад | Услуга | 1 |
```bsl
ДанныеДокументов = ТабличныйДокумент.ПолучитьОбласть("Документы");
ДанныеТоваров = ТабличныйДокумент.ПолучитьОбласть("Товары");
ОжидаемыеДвижения = ТабличныйДокумент.ПолучитьОбласть("Движения");
КэшЗначений = Новый Соответствие;
Организация = Ютест.КонтекстМодуля().Организация;
@ -346,13 +374,13 @@ _Ожидаемые движения_:
ОписанияТипов.Вставить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады"));
ОписанияТипов.Вставить("Валюта", Новый ОписаниеТипов("СправочникСсылка.Валюты"));
ТаблицаДокументов = ЮТест.Данные().ТаблицаЗначенийИзТабличногоДокумента(
ДанныеДокументов,
ОписанияТипов,
КэшЗначений,
ЗаменяемыеЗначения
ТаблицаДокументов = ЮТест.Данные().ЗагрузитьИзМакета(
"ОбщийМакет.ЮТ_МакетТестовыхДанных.Реквизиты_документа"
ОписанияТипов,
КэшЗначений,
ЗаменяемыеЗначения
);
ОписанияТипов = Новый Соответствие;
ОписанияТипов.Вставить("Документ", Новый ОписаниеТипов("ДокументСсылка.ПриходТовара"));
ОписанияТипов.Вставить("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары"));
@ -360,11 +388,11 @@ _Ожидаемые движения_:
ОписанияТипов.Вставить("Количество", Новый ОписаниеТипов("Число"));
ОписанияТипов.Вставить("Сумма", Новый ОписаниеТипов("Число"));
ТаблицаТоваров = ЮТест.Данные().ТаблицаЗначенийИзТабличногоДокумента(
ДанныеТоваров,
ОписанияТипов,
КэшЗначений,
ЗаменяемыеЗначения
ТаблицаТоваров = ЮТест.Данные().ЗагрузитьИзМакета(
"ОбщийМакет.ЮТ_МакетТестовыхДанных.Табличная_часть_документа",
ОписанияТипов,
КэшЗначений,
ЗаменяемыеЗначения
);
ОписанияТипов = Новый Соответствие;
@ -376,36 +404,36 @@ _Ожидаемые движения_:
ОписанияТипов.Вставить("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары"));
ОписанияТипов.Вставить("Количество", Новый ОписаниеТипов("Число"));
ТаблицаДвижений = ЮТест.Данные().ТаблицаЗначенийИзТабличногоДокумента(
ОжидаемыеДвижения,
ОписанияТипов,
КэшЗначений,
ЗаменяемыеЗначения
ТаблицаДвижений = ЮТест.Данные().ЗагрузитьИзМакета(
"ОбщийМакет.ЮТ_МакетТестовыхДанных.Ожидаемые_движения",
ОписанияТипов,
КэшЗначений,
ЗаменяемыеЗначения
);
Для Каждого ДанныеДокументов Из ТаблицаДокументов Цикл
Отбор = Новый Структура("Документ", ДанныеДокументов.ПриходТовара);
ТоварыДокумента = ТаблицаТоваров.Скопировать(Отбор);
ДокументОбъект = ДанныеДокументов.Документ.ПолучитьОбъект();
ДокументОбъект.Товары.Загрузить(ТоварыДокумента);
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
ТоварныеЗапасы = ДокументОбъект.Движения.ТоварныеЗапасы;
ТоварныеЗапасы.Прочитать();
ТаблицаТоварныхЗапасов = ТоварныеЗапасы.Выгрузить();
Отбор = Новый Структура("Документ", ДанныеДокументов.ПриходТовара);
ТоварыДокумента = ТаблицаТоваров.Скопировать(Отбор);
ДокументОбъект = ДанныеДокументов.Документ.ПолучитьОбъект();
ДокументОбъект.Товары.Загрузить(ТоварыДокумента);
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
ТоварныеЗапасы = ДокументОбъект.Движения.ТоварныеЗапасы;
ТоварныеЗапасы.Прочитать();
ТаблицаТоварныхЗапасов = ТоварныеЗапасы.Выгрузить();
Отбор = Новый Структура("Регистратор", ДанныеДокументов.ПриходТовара);
ОжидаемыеТоварныеЗапасы = ТаблицаДвижений.Скопировать(Отбор);
Ютест.ОжидаетЧто(ТаблицаТоварныхЗапасов)
.Равно(ОжидаемыеТоварныеЗапасы);
Отбор = Новый Структура("Регистратор", ДанныеДокументов.ПриходТовара);
ОжидаемыеТоварныеЗапасы = ТаблицаДвижений.Скопировать(Отбор);
Ютест.ОжидаетЧто(ТаблицаТоварныхЗапасов)
.Равно(ОжидаемыеТоварныеЗапасы);
КонецЦикла;
```
**Пример № 4**
#### Заменяемые значения
Создание и заполнение объектов двойной вложенности и более (например, "Товар.Поставщик.ВидКонтрагента") не поддерживается. Если есть такая потребность, следует использовать переменную "ЗаменяемыеЗначения". Т.е. следует создать и заполнять нужный объект перед преобразованием табличного документа в таблицу значений, а затем передать его в функцию получения таблицы значений.
@ -413,13 +441,13 @@ _Ожидаемые движения_:
Поставщик = ЮТест.Данные().КонструкторОбъекта(Справочники.Контрагенты)
.Установить("ВидКонтрагента", ВидКонтрагента)
.Записать();
// В табличном документе должна быть колонка [Товар.Поставщик] со значением "Некий поставщик".
// В этом случае в таблицу значений проставится значение, полученное из соответствия
ЗаменяемыеЗначения = Новый Соответствие;
ЗаменяемыеЗначения.Вставить("Некий поставщик", Поставщик);
ТаблицаЗначений = ЮТест.Данные().ТаблицаЗначенийИзТабличногоДокумента(
ТаблицаЗначений = ЮТест.Данные().ЗагрузитьИзМакета(
ТабличныйДокумент,
ОписанияТипов,
Неопределено,
@ -430,7 +458,7 @@ _Ожидаемые движения_:
.Свойство("[0].Товар.Поставщик.ВидКонтрагента").Равно(ВидКонтрагента);
```
**Пример № 5**
#### Заменяемые значения и составные типы
Можно использовать составные типы в колонках таблицы значений, но создание объектов метаданных для такой колонки не поддерживается. Можно воспользоваться соответствием "ЗаменяемыеЗначения", если потребуется в одну колонку записать значения разных типов.
@ -442,24 +470,45 @@ _Ожидаемые движения_:
Поставщик = ЮТест.Данные().СоздатьЭлемент(Справочники.Контрагенты);
Товар = ЮТест.Данные().СоздатьЭлемент(Справочники.Товары);
ЗаменяемыеЗначения = Новый Соответствие;
ЗаменяемыеЗначения.Вставить("Аналитика (Поставщик)", Поставщик);
ЗаменяемыеЗначения.Вставить("Аналитика (Товар)", Товар);
ТаблицаЗначений = ЮТест.Данные().ТаблицаЗначенийИзТабличногоДокумента(
ТаблицаЗначений = ЮТест.Данные().ЗагрузитьИзМакета(
ТабличныйДокумент,
ОписанияТипов,
Неопределено,
ЗаменяемыеЗначения
);
ЮТест.ОжидаетЧто(ТаблицаЗначений)
.Свойство("[0].Аналитика").Равно(Поставщик)
.Свойство("[1].Аналитика").Равно(Товар)
;
```
**Некоторые особенности функционала**
#### Inline макеты, загрузка из Markdown
При преобразовании табличного документа в таблицу значений существующие объекты метаданных не изменяются, только создаются новые. Нужно проявлять внимательность в случаях, если в базе уже имеются данные с тем же кодом/наименованием (и по ним используется контроль уникальности), что и в табличном документе.
При необходимости вы можете разместить таблицу с данными прямо в коде.
:::tip
Если вы используете EDT, то удобнее редактировать многострочные строки в `Редакторе запроса`
:::
```bsl
ТаблицаMarkDown =
"| Товар | Цена | Количество | Сумма |
||---------|-------|------------|-------|
|| Товар 1 | 100 | 1 | 100 |
|| Товар 2 | 2 000 | 1 | 2000 |
|| Услуга | 300,9 | 1 | 300,9 |";
ОписанияТипов = Новый Соответствие;
ОписанияТипов.Вставить("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары"));
ОписанияТипов.Вставить("Цена", Новый ОписаниеТипов("Число"));
ОписанияТипов.Вставить("Количество", Новый ОписаниеТипов("Число"));
ОписанияТипов.Вставить("Сумма", Новый ОписаниеТипов("Число"));
Данные = ЮТест.Данные().ЗагрузитьИзМакета(ТаблицаMarkDown, ОписанияТипов);
```

View File

@ -868,6 +868,10 @@
КонецПроцедуры
// Выводит сообщение в консоль (stdout) приложения
//
// Параметры:
// Сообщение - Строка - Выводимое сообщение
Процедура ВывестиВКонсоль(Сообщение) Экспорт
Компонента = ЮТКомпоненты.Консоль();

View File

@ -83,6 +83,13 @@
КонецФункции
// Умный контекст, в который можно сохранять и получать из него промежуточные данные
// Этот контекст работает с см. КонтекстТеста, см. КонтекстТестовогоНабора и см. КонтекстМодуля.
// При получении значения оно ущется во всех 3 контекста поочереди.
// При установке значения, оно устанавливается в текущий контекст, например, в событии перед тестовым наборов в м. КонтекстТестовогоНабора
//
// Возвращаемое значение:
// ОбщийМодуль - см. ЮТКонтекстТеста
Функция Контекст() Экспорт
Возврат ЮТКонтекстТеста;
@ -149,4 +156,24 @@
КонецФункции
// Преостанавливает поток выполнения на указанное количество секунд
//
// Параметры:
// Время - Число - Продолжительность паузы в секундах, возможно указывать дробное значение
Процедура Пауза(Время) Экспорт
ЮТОбщий.Пауза(Время);
КонецПроцедуры
// Выводит сообщение в консоль (stdout) приложения
//
// Параметры:
// Сообщение - Строка - Выводимое сообщение
Процедура ВывестиВКонсоль(Сообщение) Экспорт
ЮТОбщий.ВывестиВКонсоль(Сообщение);
КонецПроцедуры
#КонецОбласти