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

Merge pull request #48 from alkoleft/feature/restore

Немножко полезного кода
This commit is contained in:
Maximov Valery 2023-02-10 08:51:42 +03:00 committed by GitHub
commit 3f9363464a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 329 additions and 29 deletions

View File

@ -58,13 +58,20 @@
КонецФункции
// Прогон
// Переводит мокито в режим прогона тестов
// Вызов этого метода обязателен перед выполнением тестового прогона метода
Процедура Прогон() Экспорт
// Переводит мокито в режим прогона тестов
// Вызов этого метода обязателен перед выполнением тестового прогона метода
//
// Параметры:
// СброситьСтатистику - Булево - Сбросить статистику прошлых прогонов
Процедура Прогон(СброситьСтатистику = Истина) Экспорт
Режимы = МокитоСлужебный.РежимыРаботы();
МокитоСлужебный.УстановитьРежим(Режимы.Тестирование);
Если СброситьСтатистику Тогда
МокитоСлужебный.ОчиститьСтатистику();
КонецЕсли;
КонецПроцедуры
// Проверить.
@ -139,7 +146,7 @@
// см. МокитоСлужебный.ОписаниеМаскиПараметра
Функция ТипизированныйПараметр(Тип) Экспорт
МаскаПараметра = МокитоСлужебный.ОписаниеМаскиПараметра(МокитоСлужебный.ТипыУсловийПараметров().Тип, 1);
МаскаПараметра = МокитоСлужебный.ОписаниеМаскиПараметра(МокитоСлужебный.ТипыУсловийПараметров().Тип, 10);
МаскаПараметра.Вставить("Тип", Тип);
Возврат МаскаПараметра;

View File

@ -224,7 +224,7 @@
Иначе
Условия.Добавить(Новый Структура("Режим, Значение, Приоритет", "Значение", Параметр, 10));
Условия.Добавить(Новый Структура("Режим, Значение, Приоритет", "Значение", Параметр, 100));
КонецЕсли;

View File

@ -46,24 +46,28 @@
// ОбщийМодуль
Функция КоличествоВызовов(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) Экспорт
Параметры = ПараметрыПроверки();
Если МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода) Тогда
СтруктураВызоваМетода = ИмяМетода;
Иначе
СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Параметры.ПроверяемыйОбъект, ИмяМетода, ПараметрыВызова);
КонецЕсли;
Если СтруктураВызоваМетода.Объект <> Параметры.ПроверяемыйОбъект Тогда
ВызватьИсключение "Установлен другой проверяемый объект";
КонецЕсли;
Параметры.СтруктураВызоваМетода = СтруктураВызоваМетода;
СпозиционироватьсяНаМетоде(ИмяМетода, ПараметрыВызова);
Возврат МокитоПроверки;
КонецФункции
// Возвращает информацию о вызовах метода.
//
// Параметры:
// ИмяМетода - Строка - Имя метода проверяемого объекта
// - Произвольный - Вызов метода проверяемого объекта
// ПараметрыВызова - Массив из Произвольный - Параметры вызова метода проверяемого объекта, необходим при указании имени метода
// Возвращаемое значение:
// Массив из см. МокитоСлужебный.СтруктураВызоваМетода - Вызовы метода
Функция Вызовы(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) Экспорт
СпозиционироватьсяНаМетоде(ИмяМетода, ПараметрыВызова);
Возврат СтатистикаВызовов();
КонецФункции
// Равно.
// Проверяет подобранные вызовы. Их количество должно быть равно переданному значение, иначе вызывается исключение
// Параметры:
@ -269,4 +273,22 @@
КонецФункции
Процедура СпозиционироватьсяНаМетоде(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено)
Параметры = ПараметрыПроверки();
Если МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода) Тогда
СтруктураВызоваМетода = ИмяМетода;
Иначе
СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Параметры.ПроверяемыйОбъект, ИмяМетода, ПараметрыВызова);
КонецЕсли;
Если СтруктураВызоваМетода.Объект <> Параметры.ПроверяемыйОбъект Тогда
ВызватьИсключение "Установлен другой проверяемый объект";
КонецЕсли;
Параметры.СтруктураВызоваМетода = СтруктураВызоваМетода;
КонецПроцедуры
#КонецОбласти

View File

@ -35,6 +35,19 @@
КонецПроцедуры
// Настройки.
//
// Возвращаемое значение:
// Структура - Настройки:
// * Метод - Строка
// * Реакция - Строка
// * Настройки - Строка
// * Перехват - Строка
// * Режим - Строка - см. РежимыРаботы
// * Статистика - Структура - Статистика вызовов:
// * Вызовы - Соответствие из Структура
// * ПараметрыОбучения - Структура
// * ПараметрыПроверки - Структура
Функция Настройки() Экспорт
Настройки = ЮТКонтекст.ЗначениеКонтекста(КлючНастроек());
@ -263,6 +276,8 @@
#КонецОбласти
#Область Статистика
Функция СтатистикаВызовов(Знач Объект, ИмяМетода) Экспорт
Если ЭтоОбъект(Объект) Тогда
@ -279,6 +294,15 @@
КонецФункции
Процедура ОчиститьСтатистику() Экспорт
Настройки = Настройки();
Настройки.Статистика.Вызовы.Очистить();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ПередКаждымТестом(ОписаниеСобытия) Экспорт
@ -383,19 +407,33 @@
Функция НайтиРеакцию(ПараметрыПерехватаМетода, СтруктураВызоваМетода)
Реакция = Неопределено;
Приоритет = 0;
ПараметрыВызова = СтруктураВызоваМетода.Параметры;
Для Каждого ВозможнаяРеакция Из ПараметрыПерехватаМетода.Реакции Цикл
ПриоритетыРеакций = Новый Массив();
ЛучшийПриоритет = 0;
Для Каждого Реакция Из ПараметрыПерехватаМетода.Реакции Цикл
ПриоритетВозможнойРеакции = ПроверитьРеакцию(ВозможнаяРеакция, ПараметрыВызова);
ПриоритетРеакции = ПроверитьРеакцию(Реакция, ПараметрыВызова);
ПриоритетыРеакций.Добавить(Новый Структура("Приоритет, Реакция", ПриоритетРеакции, Реакция));
Если ПриоритетВозможнойРеакции > Приоритет Тогда
Реакция = ВозможнаяРеакция;
Приоритет = ПриоритетВозможнойРеакции;
Если ЛучшийПриоритет < ПриоритетРеакции Тогда
ЛучшийПриоритет = ПриоритетРеакции;
КонецЕсли;
КонецЦикла;
Реакция = Неопределено;
Для Каждого ПриоритетРеакции Из ПриоритетыРеакций Цикл
Если ПриоритетРеакции.Приоритет = ЛучшийПриоритет Тогда
Реакция = ПриоритетРеакции.Реакция;
Иначе
Продолжить;
КонецЕсли;
Если Реакция.Действие <> Неопределено И НЕ Реакция.Действие.Обработано Тогда
Прервать;
КонецЕсли;
КонецЦикла;

View File

@ -191,12 +191,13 @@
//
// Возвращаемое значение:
// Произвольный - Созданный объект или ссылка на него
Функция Записать(ВернутьОбъект = Ложь) Экспорт
Функция Записать(ВернутьОбъект = Ложь, ОбменДаннымиЗагрузка = Ложь) Экспорт
Контекст = Контекст();
ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства;
ПараметрыЗаписи.ОбменДаннымиЗагрузка = ОбменДаннымиЗагрузка;
Возврат ЮТТестовыеДанныеВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект);

View File

@ -369,7 +369,18 @@
КонецФункции
// Удаляет переданные объекта
//
// Параметры:
// Ссылки - Массив из ЛюбаяСсылка
Процедура Удалить(Ссылки) Экспорт
ЮТТестовыеДанныеВызовСервера.Удалить(Ссылки);
КонецПроцедуры
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
// Экспортные процедуры и функции для служебного использования внутри подсистемы
/////////////////////////////////////////////////////////////////////////////////

View File

@ -143,6 +143,20 @@
КонецФункции
Процедура Удалить(Знач Ссылки) Экспорт
Если ТипЗнч(Ссылки) <> Тип("Массив") Тогда
Ссылки = ЮТОбщий.ЗначениеВМассиве(Ссылки);
КонецЕсли;
Для Каждого Ссылка Из Ссылки Цикл
Ссылка.ПолучитьОбъект().Удалить();
КонецЦикла;
КонецПроцедуры
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
// Экспортные процедуры и функции для служебного использования внутри подсистемы

View File

@ -31,3 +31,19 @@
КонецЕсли;
КонецФункции
&Вместо("Методы")
Функция Расш1_Методы() Экспорт
ПараметрыМетода = Новый Массив;
ПрерватьВыполнение = Ложь;
Результат = Мокито.АнализВызова(Интеграция, "Методы", ПараметрыМетода, ПрерватьВыполнение);
Если НЕ ПрерватьВыполнение Тогда
Возврат ПродолжитьВызов();
Иначе
Возврат Результат;
КонецЕсли;
КонецФункции

View File

@ -22,7 +22,9 @@
ЮТТесты
.ДобавитьТест("Обучение")
.ДобавитьТест("Обучение_ЦепочкаВызовов")
.ДобавитьТест("Проверить")
.ДобавитьТест("Прогон_НакоплениеСтатистики").СПараметрами(Истина).СПараметрами(Ложь)
.ДобавитьСерверныйТест("МокированиеМетодовСсылочныхОбъектов")
;
@ -62,6 +64,24 @@
КонецПроцедуры
Процедура Обучение_ЦепочкаВызовов() Экспорт
Адрес = "service.com";
Мокито.Обучение(Интеграция)
.Когда("ВыполнитьЗапрос").Вернуть(0)
.Когда(Интеграция.ВыполнитьЗапрос(Адрес)).Вернуть(1)
.Когда(Интеграция.ВыполнитьЗапрос(Адрес)).Вернуть(2)
.Когда(Интеграция.ВыполнитьЗапрос(Адрес)).Вернуть(3)
.Прогон();
ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес), "Вызов 1").Равно(1);
ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес), "Вызов 2").Равно(2);
ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес), "Вызов 3").Равно(3);
ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес), "Вызов 4").Равно(3);
ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос("Адрес"), "Вызов 5").Равно(0);
КонецПроцедуры
Процедура Проверить() Экспорт
ЛюбойПараметр = Мокито.ЛюбойПараметр();
@ -87,6 +107,17 @@
.КоличествоВызовов(Интеграция.ВыполнитьЗапрос(Мокито.ТипизированныйПараметр(Тип("Строка")), ЛюбойПараметр)).Равно(2)
;
ВызовыМетода = Мокито.Проверить(Интеграция).Вызовы("ВыполнитьЗапрос");
ЮТест.ОжидаетЧто(ВызовыМетода, "Вызовы метода ВыполнитьЗапрос")
.ИмеетТип("Массив")
.ИмеетДлину(3)
.КаждыйЭлементСодержитСвойствоСоЗначением("Объект", Интеграция)
.КаждыйЭлементСодержитСвойствоСоЗначением("ИмяМетода", "ВыполнитьЗапрос")
.КаждыйЭлементСодержитСвойство("Параметры")
.Свойство("[0].Параметры[0]").Равно("Адрес")
.Свойство("[1].Параметры[0]").Равно(Адрес)
.Свойство("[2].Параметры[1]").Равно(2);
КонецПроцедуры
#Если Сервер Тогда
@ -165,6 +196,40 @@
КонецПроцедуры
#КонецЕсли
Процедура Прогон_НакоплениеСтатистики(НакоплениеСтатистики) Экспорт
Описание = ?(НакоплениеСтатистики, "Накопление статистики", "Сброс статистки");
Адрес = "service.com";
Мокито.Обучение(Интеграция)
.Когда("ВыполнитьЗапрос").Вернуть(1)
.Наблюдать("Методы")
.Прогон();
Интеграция.ВыполнитьЗапрос(Адрес);
Интеграция.Методы();
Мокито.Проверить(Интеграция)
.КоличествоВызовов("ВыполнитьЗапрос").Равно(1)
.КоличествоВызовов("Методы").Равно(1);
Мокито.Прогон(НЕ НакоплениеСтатистики);
Интеграция.ВыполнитьЗапрос(Адрес);
Интеграция.Методы();
Если НакоплениеСтатистики Тогда
Мокито.Проверить(Интеграция)
.КоличествоВызовов("ВыполнитьЗапрос").Равно(2)
.КоличествоВызовов("Методы").Равно(2);
Иначе
Мокито.Проверить(Интеграция)
.КоличествоВызовов("ВыполнитьЗапрос").Равно(1)
.КоличествоВызовов("Методы").Равно(1);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -0,0 +1,66 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//
/////////////////////////////////////////////////////////////////////////////////
// Экспортные процедуры и функции, предназначенные для использования другими
// объектами конфигурации или другими программами
/////////////////////////////////////////////////////////////////////////////////
#Область СлужебныйПрограммныйИнтерфейс
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
.ДобавитьТест("Удалить");
;
КонецПроцедуры
Процедура Удалить() Экспорт
Ссылки = Новый Массив;
Ссылки.Добавить(ЮТест.Данные().СоздатьЭлемент("Справочники.Банки"));
Ссылки.Добавить(ЮТест.Данные().СоздатьДокумент("Документы.ПриходТовара"));
Ссылки.Добавить(
ЮТест.Данные()
.КонструкторОбъекта("Документы.ПриходТовара")
.Провести()
);
Для Каждого Ссылка Из Ссылки Цикл
СсылкаСуществует = ПомощникТестированияВызовСервера.СсылкаСуществует(Ссылка);
ЮТест.ОжидаетЧто(СсылкаСуществует, "Ссылка на несуществующий объект").ЭтоИстина();
КонецЦикла;
ЮТТестовыеДанные.Удалить(Ссылки);
Для Каждого Ссылка Из Ссылки Цикл
СсылкаСуществует = ПомощникТестированияВызовСервера.СсылкаСуществует(Ссылка);
ЮТест.ОжидаетЧто(СсылкаСуществует, "Объект не удален по ссылке").ЭтоЛожь();
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#КонецОбласти

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="87209e33-355d-4495-9c74-f774c7572055">
<name>ОМ_ЮТТестовыеДанные</name>
<synonym>
<key>ru</key>
<value>О м тестовые данные</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -93,7 +93,7 @@
Наборы = ЮТЧитатель.ЗагрузитьТесты(ПараметрыЗапуска);
ЮТест.ОжидаетЧто(Наборы, "Прочитанные наборы расширения tests")
.ИмеетДлину(11);
.ИмеетДлину(12);
КонецПроцедуры

View File

@ -0,0 +1,37 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//
///////////////////////////////////////////////////////////////////
// ПрограммныйИнтерфейс
// Экспортные процедуры и функции для прикладного использования
///////////////////////////////////////////////////////////////////
#Область ПрограммныйИнтерфейс
Функция СсылкаСуществует(Знач Ссылка) Экспорт
ИмяТаблицы = Ссылка.Метаданные().ПолноеИмя();
ТекстЗапроса = СтрШаблон("ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ %1 ГДЕ Ссылка = &Ссылка", ИмяТаблицы);
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Возврат НЕ Запрос.Выполнить().Пустой();
КонецФункции
#КонецОбласти

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="88f72d9b-2cef-4ea0-882b-50bc299dfa4e">
<name>ПомощникТестированияВызовСервера</name>
<synonym>
<key>ru</key>
<value>Помощник тестирования вызов сервера</value>
</synonym>
<server>true</server>
<serverCall>true</serverCall>
</mdclass:CommonModule>

View File

@ -30,11 +30,13 @@
<commonModules>CommonModule.ОМ_ОшибкаЗагрузкиСценариев</commonModules>
<commonModules>CommonModule.ОМ_ЮТест</commonModules>
<commonModules>CommonModule.ОМ_ЮТКонструкторТестовыхДанных</commonModules>
<commonModules>CommonModule.ОМ_ЮТТестовыеДанные</commonModules>
<commonModules>CommonModule.ОМ_ЮТТестовыеДанныеСлужебный</commonModules>
<commonModules>CommonModule.ОМ_ЮТТесты</commonModules>
<commonModules>CommonModule.ОМ_ЮТУтверждения</commonModules>
<commonModules>CommonModule.ОМ_ЮТФильтрация</commonModules>
<commonModules>CommonModule.ОМ_ЮТЧитатель</commonModules>
<commonModules>CommonModule.ПомощникТестированияВызовСервера</commonModules>
<catalogs>Catalog.Встречи</catalogs>
<catalogs>Catalog.Товары</catalogs>
<documents>Document.ПриходТовара</documents>