mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2024-11-27 08:31:11 +02:00
Merge pull request #407 from bia-technologies/feature/305
305 / добавлен метод конструктора объекта/xdto `ФикцияРеквизитов`
This commit is contained in:
commit
43d688635d
@ -130,16 +130,15 @@ sidebar_position: 1
|
||||
* В более компактной форме заполнять объект
|
||||
* Имеет методы записи и проведения
|
||||
* При возникновении ошибки оборачивает их в более понятные человеку описания
|
||||
* Киллер фича - `Фикция` и `ФикцияОбязательныхПолей`. Устанавливает случайно сгенерированные значения реквизитов. Таким образом делается акцент на важных для теста реквизитах и экономит "строки" на генерацию ненужных значений
|
||||
* Киллер фича - `Фикция`, `ФикцияРеквизитов` и `ФикцияОбязательныхПолей`. Устанавливает случайно сгенерированные значения реквизитов. Таким образом делается акцент на важных для теста реквизитах и экономит "строки" на генерацию ненужных значений
|
||||
* Умеет создавать данные с клиента и [удалять их по окончании теста](test-data-deletion.md)
|
||||
|
||||
```bsl
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара")
|
||||
.Фикция("Поставщик")
|
||||
.Фикция("Склад")
|
||||
.ФикцияРеквизитов("Поставщик, Склад")
|
||||
.ФикцияОбязательныхПолей()
|
||||
.ТабличнаяЧасть("Товары");
|
||||
|
||||
.ТабличнаяЧасть("Товары")
|
||||
|
||||
ОбщиеДанные = Новый Структура("ВидЦены, Поставщик", Закупочная, Конструктор.ДанныеОбъекта().Поставщик);
|
||||
|
||||
Для Инд = 1 По 3 Цикл
|
||||
@ -181,8 +180,7 @@ sidebar_position: 1
|
||||
.УстановитьРеквизиты(Реквизиты)
|
||||
.Фикция("Покупатель")
|
||||
.ДобавитьНовый("Товары")
|
||||
.Фикция("Цена")
|
||||
.Фикция("Количество")
|
||||
.ФикцияРеквизитов("Цена, Количество")
|
||||
.ДанныеОбъекта();
|
||||
```
|
||||
|
||||
@ -197,6 +195,7 @@ sidebar_position: 1
|
||||
* Для коллекций - генерируется случайно количество случайных элементов (на основании типа)
|
||||
* `ФикцияОбязательныхПолей()` - на основании типа создаваемого объекта определяет список обязательных полей и для каждого из них вызывается метод `Фикция`.
|
||||
* `ФикцияНезаполненных()` - для всех незаполненных полей создаваемого объекта вызывает метод `Фикция`.
|
||||
* `ФикцияРеквизитов()` - для перечисленных полей создаваемого объекта вызывает метод `Фикция`.
|
||||
* `ДобавитьНовый(ИмяРеквизита)` - Добавляет новый объект в указанную реквизит-коллекцию. Все последующие вызовы установки реквизитов будут относится к этому добавленному объекту.
|
||||
* `ПерейтиКВладельцу()` - используется после метода `ДобавитьНовый` для переключения контекста заполнения на родительский объект. Например вам необходимо добавить две строки в табличную часть.
|
||||
```bsl
|
||||
@ -206,8 +205,7 @@ sidebar_position: 1
|
||||
.Фикция("Количество")
|
||||
.ПерейтиКВладельцу()
|
||||
.ДобавитьНовый("Товары")
|
||||
.Фикция("Цена")
|
||||
.Фикция("Количество")
|
||||
.ФикцияРеквизитов("Цена, Количество")
|
||||
.ДанныеОбъекта();
|
||||
```
|
||||
Здесь перед добавлением второй строки нужно переключится (`ПерейтиКВладельцу`) на основной объект и после этого можно добавить строку.
|
||||
@ -225,9 +223,7 @@ sidebar_position: 1
|
||||
#КонецЕсли
|
||||
|
||||
Конструктор
|
||||
.Фикция("Поставщик")
|
||||
.Фикция("Склад")
|
||||
.Фикция("Валюта")
|
||||
.ФикцияРеквизитов("Поставщик, Склад, Валюта")
|
||||
.Установить("Организация", ЮТест.Данные().КонструкторОбъекта("Справочники.Организации").Установить("КакойТоТамУчет", Истина))
|
||||
.ТабличнаяЧасть("Товары");
|
||||
|
||||
|
@ -27,8 +27,7 @@
|
||||
.ТабличнаяЧасть("Товары")
|
||||
.ДобавитьСтроку()
|
||||
.Установить("Номенклатура", Товар)
|
||||
.Фикция("Количество")
|
||||
.Фикция("Цена")
|
||||
.ФикцияРеквизитов("Количество, Цена")
|
||||
.Записать();
|
||||
|
||||
КонецФункции
|
||||
@ -59,8 +58,7 @@
|
||||
.ТабличнаяЧасть("Товары")
|
||||
.ДобавитьСтроку()
|
||||
.Установить("Номенклатура", Товар)
|
||||
.Фикция("Количество")
|
||||
.Фикция("Цена")
|
||||
.ФикцияРеквизитов("Количество, Цена")
|
||||
.Записать();
|
||||
|
||||
КонецФункции
|
||||
@ -74,8 +72,7 @@
|
||||
.ТабличнаяЧасть("Товары")
|
||||
.ДобавитьСтроку()
|
||||
.Установить("Номенклатура", Товар)
|
||||
.Фикция("Количество")
|
||||
.Фикция("Цена")
|
||||
.ФикцияРеквизитов("Количество, Цена")
|
||||
.Записать();
|
||||
|
||||
КонецФункции
|
||||
@ -89,8 +86,7 @@
|
||||
.ТабличнаяЧасть("Товары")
|
||||
.ДобавитьСтроку()
|
||||
.Установить("Номенклатура", Товар)
|
||||
.Фикция("Количество")
|
||||
.Фикция("Цена")
|
||||
.ФикцияРеквизитов("Количество, Цена")
|
||||
.Записать();
|
||||
|
||||
КонецФункции
|
||||
|
@ -11,8 +11,7 @@
|
||||
.Установить("Поставщик", Поставщик) // Устанавливает значение реквизита документа.
|
||||
.Фикция("Дата") // Генерирует случайную дату.
|
||||
.Фикция("Номер") // Генерирует случайный номер.
|
||||
.Фикция("Склад") // Создает "пустышку" склада.
|
||||
.Фикция("Валюта") // Создает "пустышку" валюты.
|
||||
.ФикцияРеквизитов("Склад, Валюта") // Создает "пустышки" склада и валюты.
|
||||
.ТабличнаяЧасть("Товары") // Переключает контекст на работу с табличной частью "Товары".
|
||||
.ДобавитьСтроку() // Добавляет строку табличной части.
|
||||
.Фикция("Товар", Новый Структура("Поставщик", Поставщик)) // Создает "пустышку" товары от конкретного поставщика.
|
||||
@ -52,10 +51,7 @@
|
||||
```bsl title="Или вариант используя конструктора, но без цепочки вызовов"
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта(Документы.ПриходТовара);
|
||||
Конструктор.Установить("Поставщик", Поставщик);
|
||||
Конструктор.Фикция("Дата");
|
||||
Конструктор.Фикция("Номер");
|
||||
Конструктор.Фикция("Склад");
|
||||
Конструктор.Фикция("Валюта");
|
||||
Конструктор.ФикцияРеквизитов("Дата, Номер, Склад, Валюта");
|
||||
Конструктор.ТабличнаяЧасть("Товары");
|
||||
Конструктор.ДобавитьСтроку();
|
||||
Конструктор.Фикция("Товар", Новый Структура("Поставщик", Поставщик));
|
||||
|
@ -63,14 +63,36 @@
|
||||
Реквизиты = Реквизиты(Контекст);
|
||||
ТекущаяЗапись = ТекущаяЗапись(Контекст);
|
||||
|
||||
ОписаниеРеквизитов = Новый Структура;
|
||||
Для Каждого Элемент Из Реквизиты Цикл
|
||||
Реквизит = Элемент.Значение;
|
||||
Если Реквизит.Обязательный И НЕ ТекущаяЗапись.Свойство(Реквизит.Имя) Тогда
|
||||
Значение = ЮТТестовыеДанныеСлужебный.Фикция(Реквизит.Тип);
|
||||
ТекущаяЗапись.Вставить(Реквизит.Имя, Значение);
|
||||
ОписаниеРеквизитов.Вставить(Реквизит.Имя, Реквизит.Тип);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
ФикцияРеквизитовЗаписи(ТекущаяЗапись, ОписаниеРеквизитов);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ФикцияРеквизитов(Контекст, ИменаРеквизитов) Экспорт
|
||||
|
||||
ТекущаяЗапись = ТекущаяЗапись(Контекст);
|
||||
ОписаниеРеквизитов = Новый Структура;
|
||||
|
||||
Если ТипЗнч(ИменаРеквизитов) = Тип("Строка") Тогда
|
||||
КоллекцияИменРеквизитов = ЮТСтроки.РазделитьСтроку(ИменаРеквизитов, ",");
|
||||
Иначе
|
||||
КоллекцияИменРеквизитов = ИменаРеквизитов;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого ИмяРеквизита Из КоллекцияИменРеквизитов Цикл
|
||||
Реквизит = ОписаниеРеквизита(Контекст, ИмяРеквизита);
|
||||
ОписаниеРеквизитов.Вставить(ИмяРеквизита, Реквизит.Тип);
|
||||
КонецЦикла;
|
||||
|
||||
ФикцияРеквизитовЗаписи(ТекущаяЗапись, ОписаниеРеквизитов);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТабличнаяЧасть(Контекст, ИмяТабличнойЧасти) Экспорт
|
||||
@ -309,4 +331,11 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ФикцияРеквизитовЗаписи(ТекущаяЗапись, ОписаниеРеквизитов)
|
||||
|
||||
ЗначенияРеквизитов = ЮТТестовыеДанныеСлужебный.ФикцияЗначений(ОписаниеРеквизитов);
|
||||
ЮТКоллекции.ДополнитьСтруктуру(ТекущаяЗапись, ЗначенияРеквизитов);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -72,6 +72,37 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ФикцияЗначений(Реквизиты, РеквизитыЗаполнения = Неопределено) Экспорт
|
||||
|
||||
#Если ТонкийКлиент Тогда
|
||||
НеобходимВызовСервера = Ложь;
|
||||
|
||||
Для Каждого Реквизит Из Реквизиты Цикл
|
||||
СодержитСсылочныйТип = ?(ТипЗнч(Реквизит.Значение) = Тип("Тип"),
|
||||
ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(Реквизит.Значение),
|
||||
ЮТТипыДанныхСлужебный.СодержитСсылочныйТип(Реквизит.Значение));
|
||||
Если СодержитСсылочныйТип Тогда
|
||||
НеобходимВызовСервера = Истина;
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Если НеобходимВызовСервера Тогда
|
||||
Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.ФикцияЗначений(Реквизиты, РеквизитыЗаполнения);
|
||||
КонецЕсли;
|
||||
#КонецЕсли
|
||||
|
||||
Значения = Новый Структура;
|
||||
|
||||
Для Каждого Реквизит Из Реквизиты Цикл
|
||||
Значение = Фикция(Реквизит.Значение, РеквизитыЗаполнения);
|
||||
Значения.Вставить(Реквизит.Ключ, Значение);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Значения;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#Если Не ВебКлиент Тогда
|
||||
|
||||
// см. ЮТТестовыеДанные.НовоеИмяВременногоФайла
|
||||
|
@ -267,6 +267,12 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ФикцияЗначений(Знач Реквизиты, Знач РеквизитыЗаполнения) Экспорт
|
||||
|
||||
Возврат ЮТТестовыеДанныеСлужебный.ФикцияЗначений(Реквизиты, РеквизитыЗаполнения);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
@ -66,6 +66,18 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СодержитСсылочныйТип(ОписаниеТипов) Экспорт
|
||||
|
||||
Для Каждого Тип Из ОписаниеТипов.Типы() Цикл
|
||||
Если ОписаниеТиповЛюбаяСсылка().СодержитТип(Тип) Тогда
|
||||
Возврат Истина;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоМенеджерЗаписи(ТипЗначения) Экспорт
|
||||
|
||||
ПредставлениеТипа = ПредставлениеТипа(ТипЗначения);
|
||||
|
@ -178,7 +178,7 @@
|
||||
|
||||
Если НЕ ЮТФильтрацияСлужебный.ЭтоПодходящийМодуль(ОписаниеМодуля) Тогда
|
||||
ЮТЛогирование.Отладка(" Пропущен, не подходит под отбор");
|
||||
ИначеЕсли НЕ ЭтоТестовыйМодуль(ОписаниеМодуля) Тогда
|
||||
ИначеЕсли НЕ ЭтоТестовыйМодуль(ОписаниеМодуля) Тогда
|
||||
ЮТЛогирование.Отладка(" Пропущен, это не тестовый модуль");
|
||||
Иначе
|
||||
ЮТЛогирование.Отладка(" Добавлен");
|
||||
@ -196,8 +196,8 @@
|
||||
// TODO Фильтрация по путям
|
||||
ОписаниеМодуля = Неопределено;
|
||||
|
||||
#Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
|
||||
Если МетаданныеМодуля.КлиентОбычноеПриложение ИЛИ МетаданныеМодуля.КлиентУправляемоеПриложение Тогда
|
||||
#Если ТолстыйКлиентОбычноеПриложение Тогда
|
||||
Если МетаданныеМодуля.КлиентОбычноеПриложение Тогда
|
||||
|
||||
ОписаниеМодуля = ИсполняемыеСценарииМодуля(МетаданныеМодуля);
|
||||
|
||||
|
@ -85,6 +85,36 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Устанавливает фиктивные значение реквизитов объекта.
|
||||
//
|
||||
// На основании типа реквизита генерируется фиктивное значение.
|
||||
//
|
||||
// * Для примитивных значение генерируется случайное значение
|
||||
// * Для объектных типов создается новый объект
|
||||
// * Для коллекций - генерируется случайно количество случайных элементов (на основании типа)
|
||||
//
|
||||
// Параметры:
|
||||
// ИменаРеквизитов - Строка - Имена реквизитов объекта или табличной части разделенные запятыми
|
||||
// - Массив из Строка - Имена реквизитов объекта или табличной части
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.ЮТКонструкторОбъектаXDTO - Конструктор
|
||||
Функция ФикцияРеквизитов(ИменаРеквизитов) Экспорт
|
||||
|
||||
Если ТипЗнч(ИменаРеквизитов) = Тип("Строка") Тогда
|
||||
КоллекцияИменРеквизитов = ЮТСтроки.РазделитьСтроку(ИменаРеквизитов, ",");
|
||||
Иначе
|
||||
КоллекцияИменРеквизитов = ИменаРеквизитов;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого ИмяРеквизита Из КоллекцияИменРеквизитов Цикл
|
||||
Фикция(ИмяРеквизита);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Заполняет обязательные реквизиты объекта фиктивными значениями
|
||||
//
|
||||
// На основании типа объекта определяются обязательные поля.
|
||||
|
@ -90,6 +90,30 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Устанавливает фиктивные значения реквизитов создаваемого объекта.
|
||||
//
|
||||
// Если метод вызывается после вызова см. ТабличнаяЧасть, то устанавливается значения реквизитов строки табличной части.
|
||||
//
|
||||
// На основании менеджера и имени реквизита вычисляется его тип, а по типу генерируется фиктивное значение.
|
||||
//
|
||||
// * Для примитивных значение генерируется случайное значение
|
||||
// * Для ссылочных типов создается новый объект
|
||||
// * Для перечислений (в том числе системных) выбирается случайно значение перечисления
|
||||
//
|
||||
// Параметры:
|
||||
// ИменаРеквизитов - Строка - Имена реквизитов объекта или табличной части разделенные запятыми
|
||||
// - Массив из Строка - Имена реквизитов объекта или табличной части
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбщийМодуль - Конструктор
|
||||
&НаКлиенте
|
||||
Функция ФикцияРеквизитов(ИменаРеквизитов) Экспорт
|
||||
|
||||
ЮТКонструкторТестовыхДанныхСлужебный.ФикцияРеквизитов(Контекст, ИменаРеквизитов);
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Заполняет обязательные поля объекта фиктивными значениями
|
||||
//
|
||||
// Если метод вызывается после вызова см. ТабличнаяЧасть, то устанавливаются значения реквизитов строки табличной части.
|
||||
|
@ -86,6 +86,29 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Устанавливает фиктивные значения реквизитов создаваемого объекта.
|
||||
//
|
||||
// Если метод вызывается после вызова см. ТабличнаяЧасть, то устанавливается значения реквизитов строки табличной части.
|
||||
//
|
||||
// На основании менеджера и имени реквизита вычисляется его тип, а по типу генерируется фиктивное значение.
|
||||
//
|
||||
// * Для примитивных значение генерируется случайное значение
|
||||
// * Для ссылочных типов создается новый объект
|
||||
// * Для перечислений (в том числе системных) выбирается случайно значение перечисления
|
||||
//
|
||||
// Параметры:
|
||||
// ИменаРеквизитов - Строка - Имена реквизитов объекта или табличной части разделенные запятыми
|
||||
// - Массив из Строка - Имена реквизитов объекта или табличной части
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор
|
||||
Функция ФикцияРеквизитов(ИменаРеквизитов) Экспорт
|
||||
|
||||
ЮТКонструкторТестовыхДанныхСлужебный.ФикцияРеквизитов(Контекст, ИменаРеквизитов);
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Заполняет обязательные поля объекта фиктивными значениями
|
||||
//
|
||||
// Если метод вызывается после вызова см. ТабличнаяЧасть, то устанавливаются значения реквизитов строки табличной части.
|
||||
|
@ -31,6 +31,7 @@
|
||||
.ДобавитьТест("Фикция_Типизированная")
|
||||
.ДобавитьТест("Фикция_ОбщийРеквизит")
|
||||
.ДобавитьТест("ФикцияОбязательныхПолей")
|
||||
.ДобавитьТест("ФикцияРеквизитов")
|
||||
.ДобавитьТест("СоздатьГруппу")
|
||||
.ДобавитьТест("УстановитьРеквизиты")
|
||||
.ДобавитьТест("УстановитьСсылкуНового")
|
||||
@ -284,6 +285,21 @@
|
||||
.Свойство("Период").Заполнено()
|
||||
.Свойство("Валюта").Заполнено()
|
||||
.Свойство("Курс").Заполнено();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ФикцияРеквизитов() Экспорт
|
||||
|
||||
Данные = ЮТест.Данные().КонструкторОбъекта("РегистрыСведений.КурсыВалют")
|
||||
.ФикцияРеквизитов("Период, Валюта, Курс")
|
||||
.ДанныеОбъекта();
|
||||
|
||||
ЮТест.ОжидаетЧто(Данные)
|
||||
.ИмеетДлину(3)
|
||||
.Свойство("Период").Заполнено()
|
||||
.Свойство("Валюта").Заполнено()
|
||||
.Свойство("Курс").Заполнено();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СоздатьГруппу() Экспорт
|
||||
|
@ -28,6 +28,7 @@
|
||||
.ДобавитьТест("ФикцияНезаполненных")
|
||||
.ДобавитьТест("ДобавитьНовый")
|
||||
.ДобавитьТест("ПерейтиКВладельцу")
|
||||
.ДобавитьТест("ФикцияРеквизитов")
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
@ -164,6 +165,21 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ФикцияРеквизитов() Экспорт
|
||||
|
||||
Объект = НовыйКонструктор()
|
||||
.ФикцияРеквизитов("Number, Сумма, Покупатель")
|
||||
.ДанныеОбъекта();
|
||||
|
||||
ЮТест.ОжидаетЧто(Объект)
|
||||
.ИмеетТип(Тип("ОбъектXDTO"))
|
||||
.Свойство("Number").Заполнено()
|
||||
.Свойство("Сумма").Заполнено()
|
||||
.Свойство("Покупатель").Заполнено()
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
Loading…
Reference in New Issue
Block a user