mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-02-10 19:41:26 +02:00
Упущенные описания
This commit is contained in:
parent
3b2c7b7a17
commit
9c6f94b683
@ -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)
|
||||
.КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
|
||||
.Реквизит("Товар").Заполнено().ИмеетТип("СправочникСсылка.Товары")
|
||||
.Реквизит("Период").Заполнено().ИмеетТип("Дата")
|
||||
.Реквизит("Количество").Заполнено().ИмеетТип("Число")
|
||||
.Реквизит("Цена").Заполнено().ИмеетТип("Число")
|
||||
)
|
||||
```
|
||||
|
@ -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, ОписанияТипов);
|
||||
```
|
||||
|
@ -868,6 +868,10 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Выводит сообщение в консоль (stdout) приложения
|
||||
//
|
||||
// Параметры:
|
||||
// Сообщение - Строка - Выводимое сообщение
|
||||
Процедура ВывестиВКонсоль(Сообщение) Экспорт
|
||||
|
||||
Компонента = ЮТКомпоненты.Консоль();
|
||||
|
@ -83,6 +83,13 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Умный контекст, в который можно сохранять и получать из него промежуточные данные
|
||||
// Этот контекст работает с см. КонтекстТеста, см. КонтекстТестовогоНабора и см. КонтекстМодуля.
|
||||
// При получении значения оно ущется во всех 3 контекста поочереди.
|
||||
// При установке значения, оно устанавливается в текущий контекст, например, в событии перед тестовым наборов в м. КонтекстТестовогоНабора
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбщийМодуль - см. ЮТКонтекстТеста
|
||||
Функция Контекст() Экспорт
|
||||
|
||||
Возврат ЮТКонтекстТеста;
|
||||
@ -149,4 +156,24 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Преостанавливает поток выполнения на указанное количество секунд
|
||||
//
|
||||
// Параметры:
|
||||
// Время - Число - Продолжительность паузы в секундах, возможно указывать дробное значение
|
||||
Процедура Пауза(Время) Экспорт
|
||||
|
||||
ЮТОбщий.Пауза(Время);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Выводит сообщение в консоль (stdout) приложения
|
||||
//
|
||||
// Параметры:
|
||||
// Сообщение - Строка - Выводимое сообщение
|
||||
Процедура ВывестиВКонсоль(Сообщение) Экспорт
|
||||
|
||||
ЮТОбщий.ВывестиВКонсоль(Сообщение);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
Loading…
x
Reference in New Issue
Block a user