1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-01-23 18:54:40 +02:00

Merge pull request #186 from bia-technologies/feature/169

Сокращение сообщения об ошибке
This commit is contained in:
Koryakin Aleksey 2023-10-03 02:23:11 +03:00 committed by GitHub
commit 67e287eb80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 203 additions and 56 deletions

View File

@ -236,6 +236,20 @@
КонецФункции КонецФункции
// КонтекстОшибки
// Возвращает служебный контекст, содержит дополнительные детали ошибки теста
// Параметры:
// ПолучитьССервера - Булево - Получить значение из серверного контекста
//
// Возвращаемое значение:
// Неопределено, Массив из Строка- Детали ошибки
Функция КонтекстДеталиОшибки(ПолучитьССервера = Ложь) Экспорт
//@skip-check constructor-function-return-section
Возврат ЗначениеКонтекста(ИмяКонтекстаДеталиОшибки(), ПолучитьССервера);
КонецФункции
Функция ОписаниеКонтекста() Экспорт Функция ОписаниеКонтекста() Экспорт
Описание = Новый Структура; Описание = Новый Структура;
@ -293,6 +307,12 @@
КонецПроцедуры КонецПроцедуры
Процедура УстановитьКонтекстДеталиОшибки(Знач ДанныеКонтекста) Экспорт
УстановитьЗначениеКонтекста(ИмяКонтекстаДеталиОшибки(), ДанныеКонтекста);
КонецПроцедуры
Процедура УдалитьКонтекст() Экспорт Процедура УдалитьКонтекст() Экспорт
#Если Клиент Тогда #Если Клиент Тогда
@ -354,4 +374,10 @@
КонецФункции КонецФункции
Функция ИмяКонтекстаДеталиОшибки()
Возврат "ДеталиОшибки";
КонецФункции
#КонецОбласти #КонецОбласти

View File

@ -137,8 +137,8 @@
Исключение Исключение
Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки("Ошибка загрузки настроек из файла");
ВызватьИсключение СтрШаблон("Ошибка загрузки настроек из файла: '%1'", Ошибка); ВызватьИсключение;
КонецПопытки; КонецПопытки;

View File

@ -26,10 +26,11 @@
// ИмяСобытия - Строка // ИмяСобытия - Строка
// ОписаниеСобытия - см. ЮТФабрика.ОписаниеСобытияИсполненияТестов // ОписаниеСобытия - см. ЮТФабрика.ОписаниеСобытияИсполненияТестов
// Ошибка - ИнформацияОбОшибке // Ошибка - ИнформацияОбОшибке
// - Строка
Процедура ЗарегистрироватьОшибкуСобытияИсполнения(ИмяСобытия, ОписаниеСобытия, Ошибка) Экспорт Процедура ЗарегистрироватьОшибкуСобытияИсполнения(ИмяСобытия, ОписаниеСобытия, Ошибка) Экспорт
ТипОшибки = ЮТФабрика.ТипыОшибок().ОшибкаОбработкиСобытия; ТипОшибки = ЮТФабрика.ТипыОшибок().ОшибкаОбработкиСобытия;
Пояснение = СтрШаблон("%1 '%2': %3", ТипОшибки, ИмяСобытия, Ошибка.Описание); Пояснение = ЮТСообщенияСлужебный.СообщениеОбОшибкеСобытия(ИмяСобытия, Ошибка);
ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки); ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки);
Если ОписаниеСобытия.Тест <> Неопределено Тогда Если ОписаниеСобытия.Тест <> Неопределено Тогда
@ -70,7 +71,7 @@
ИначеЕсли ТипОшибки = ЮТФабрика.ТипыОшибок().Пропущен Тогда ИначеЕсли ТипОшибки = ЮТФабрика.ТипыОшибок().Пропущен Тогда
ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка); ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка);
Иначе Иначе
ДанныеОшибки = ДанныеОшибки(Ошибка, Ошибка.Описание, ТипОшибки); ДанныеОшибки = ДанныеОшибки(Ошибка, ЮТСообщенияСлужебный.КраткоеСообщениеОшибки(Ошибка), ТипОшибки);
КонецЕсли; КонецЕсли;
Тест.Ошибки.Добавить(ДанныеОшибки); Тест.Ошибки.Добавить(ДанныеОшибки);
@ -131,7 +132,7 @@
ОбъектПроверки = "проверяемое значение") Экспорт ОбъектПроверки = "проверяемое значение") Экспорт
УстановитьДанныеОшибкиСравнения(ПроверяемоеЗначение, ОжидаемоеЗначение); УстановитьДанныеОшибкиСравнения(ПроверяемоеЗначение, ОжидаемоеЗначение);
ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки); ТекстСообщения = ЮТСообщенияСлужебный.ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки);
ВызватьОшибкуПроверки(ТекстСообщения, ОписаниеПроверки); ВызватьОшибкуПроверки(ТекстСообщения, ОписаниеПроверки);
КонецПроцедуры КонецПроцедуры
@ -147,7 +148,7 @@
Процедура СгенерироватьОшибкуУтверждения(ОписаниеПроверки, Сообщение, ПроверяемоеЗначение, ОбъектПроверки = "проверяемое значение") Экспорт Процедура СгенерироватьОшибкуУтверждения(ОписаниеПроверки, Сообщение, ПроверяемоеЗначение, ОбъектПроверки = "проверяемое значение") Экспорт
УстановитьДанныеОшибкиУтверждения(ПроверяемоеЗначение); УстановитьДанныеОшибкиУтверждения(ПроверяемоеЗначение);
ТекстСообщения = ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки); ТекстСообщения = ЮТСообщенияСлужебный.ФорматированныйТекстОшибкиУтверждения(ОписаниеПроверки, Сообщение, ОбъектПроверки);
ВызватьОшибкуПроверки(ТекстСообщения, ОписаниеПроверки); ВызватьОшибкуПроверки(ТекстСообщения, ОписаниеПроверки);
КонецПроцедуры КонецПроцедуры
@ -186,7 +187,7 @@
Процедура ЗарегистрироватьОшибкуИнициализацииДвижка(Ошибка, Описание) Экспорт Процедура ЗарегистрироватьОшибкуИнициализацииДвижка(Ошибка, Описание) Экспорт
Ошибка(Ошибка, Описание); СообщитьОбОшибке(Ошибка, Описание);
КонецПроцедуры КонецПроцедуры
@ -324,42 +325,6 @@
КонецПроцедуры КонецПроцедуры
// Форматированный текст ошибки утверждения.
//
// Параметры:
// ОписаниеПроверки - см. ЮТФабрика.ОписаниеПроверки
// ТекстОжидания - Строка - Описание ожидания
// ОбъектПроверки - Строка - Объект проверки
//
// Возвращаемое значение:
// Строка - Форматированный текст ошибки утверждения
Функция ФорматированныйТекстОшибкиУтверждения(Знач ОписаниеПроверки, ТекстОжидания, ОбъектПроверки) Экспорт
Если ЗначениеЗаполнено(ОписаниеПроверки.ОбъектПроверки.ИмяСвойства) Тогда
ВставкаСвойство = СтрШаблон(" содержит свойство `%1`, которое", ОписаниеПроверки.ОбъектПроверки.ИмяСвойства);
Иначе
ВставкаСвойство = "";
КонецЕсли;
Если ЗначениеЗаполнено(ОписаниеПроверки.ОбъектПроверки.Представление) Тогда
ПредставлениеЗначения = ОписаниеПроверки.ОбъектПроверки.Представление;
Иначе
ПредставлениеЗначения = СтрШаблон("`%1`", ОписаниеПроверки.ОбъектПроверки.Значение);
КонецЕсли;
// Заголовок сообщения
ТекстСообщения = "";
// Тело сообщения
ТекстСообщения = СтрШаблон("ожидали, что %1 %2%3 %4, но это не так.",
ОбъектПроверки,
ПредставлениеЗначения,
ВставкаСвойство,
ТекстОжидания);
Возврат ТекстСообщения;
КонецФункции
Функция ДобавитьОписания(ТекстОшибки, ОписаниеПроверки = Неопределено) Экспорт Функция ДобавитьОписания(ТекстОшибки, ОписаниеПроверки = Неопределено) Экспорт
Если ОписаниеПроверки <> Неопределено Тогда Если ОписаниеПроверки <> Неопределено Тогда
@ -399,18 +364,60 @@
КонецПроцедуры КонецПроцедуры
Процедура ДобавитьПояснениеОшибки(Пояснение) Экспорт
Детали = ЮТКонтекст.КонтекстДеталиОшибки();
Установить = Детали = Неопределено;
Если Установить Тогда
Детали = Новый Массив();
КонецЕсли;
Детали.Добавить(Пояснение);
Если Установить Тогда
ЮТКонтекст.УстановитьКонтекстДеталиОшибки(Детали);
КонецЕсли;
КонецПроцедуры
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
#Область КонструкторыОписанийОшибки #Область КонструкторыОписанийОшибки
Функция ДанныеОшибки(Ошибка, Сообщение, ТипОшибки) Функция ДанныеОшибки(Ошибка, Знач Сообщение, ТипОшибки)
#Если Сервер Тогда
Детали = ЮТКонтекст.КонтекстДеталиОшибки(Истина);
#Иначе
ДеталиСервер = ЮТКонтекст.КонтекстДеталиОшибки(Истина);
ДеталиКлиент = ЮТКонтекст.КонтекстДеталиОшибки();
Если ЗначениеЗаполнено(ДеталиКлиент) И ЗначениеЗаполнено(ДеталиСервер) Тогда
ЮТОбщий.ДополнитьМассив(ДеталиСервер, ДеталиКлиент);
Детали = ДеталиСервер;
ИначеЕсли ЗначениеЗаполнено(ДеталиКлиент) Тогда
Детали = ДеталиКлиент;
ИначеЕсли ЗначениеЗаполнено(ДеталиСервер) Тогда
Детали = ДеталиСервер;
Иначе
Детали = Неопределено;
КонецЕсли;
#КонецЕсли
Если ЗначениеЗаполнено(Детали) Тогда
ЮТКонтекст.УстановитьКонтекстДеталиОшибки(Новый Массив());
Детали.Добавить(Сообщение);
Сообщение = СтрСоединить(Детали, Символы.ПС);
КонецЕсли;
ДанныеОшибки = ЮТФабрика.ОписаниеВозникшейОшибки(ТипОшибки + ": " + Сообщение); ДанныеОшибки = ЮТФабрика.ОписаниеВозникшейОшибки(ТипОшибки + ": " + Сообщение);
Если Ошибка <> Неопределено Тогда Если Ошибка <> Неопределено Тогда
ДанныеОшибки.Стек = ПодробноеПредставлениеОшибки(Ошибка); ДанныеОшибки.Стек = СтекОшибки(Ошибка);
КонецЕсли; КонецЕсли;
ДанныеОшибки.ТипОшибки = ТипОшибки; ДанныеОшибки.ТипОшибки = ТипОшибки;
ДобавитьСообщенияПользователю(ДанныеОшибки); ДобавитьСообщенияПользователю(ДанныеОшибки);
@ -419,13 +426,23 @@
КонецФункции КонецФункции
Функция СтекОшибки(Ошибка)
Если ТипЗнч(Ошибка) = Тип("ИнформацияОбОшибке") Тогда
Возврат ПодробноеПредставлениеОшибки(Ошибка);
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Функция ДанныеОшибкиУтверждений(Ошибка) Функция ДанныеОшибкиУтверждений(Ошибка)
Описание = ИзвлечьТекстОшибки(Ошибка, ПрефиксОшибкиУтверждений()); Описание = ИзвлечьТекстОшибки(Ошибка, ПрефиксОшибкиУтверждений());
ДанныеОшибки = ЮТФабрика.ОписаниеОшибкиСравнения(Описание); ДанныеОшибки = ЮТФабрика.ОписаниеОшибкиСравнения(Описание);
ДанныеОшибки.Стек = ПодробноеПредставлениеОшибки(Ошибка); ДанныеОшибки.Стек = СтекОшибки(Ошибка);
ДобавитьСообщенияПользователю(ДанныеОшибки); ДобавитьСообщенияПользователю(ДанныеОшибки);
СтруктураОшибки = ЮТКонтекст.КонтекстОшибки(); СтруктураОшибки = ЮТКонтекст.КонтекстОшибки();
@ -472,10 +489,9 @@
КонецФункции КонецФункции
Процедура Ошибка(Ошибка, Описание) Процедура СообщитьОбОшибке(Ошибка, Описание)
ТекстОшибки = ПредставлениеОшибки(Описание, Ошибка); ЮТОбщий.СообщитьПользователю(ПредставлениеОшибки(Описание, Ошибка));
ЮТОбщий.СообщитьПользователю(ТекстОшибки);
КонецПроцедуры КонецПроцедуры

View File

@ -0,0 +1,92 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// 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 %2%3 %4, но это не так.",
ОбъектПроверки,
ПредставлениеЗначения,
ВставкаСвойство,
ТекстОжидания);
Возврат ТекстСообщения;
КонецФункции
// Сообщение об ошибке события.
//
// Параметры:
// ИмяСобытия - Строка
// Ошибка - Строка - Текст ошибки
// - ИнформацияОбОшибке - ошибка выполнения
//
// Возвращаемое значение:
// Строка - Сообщение об ошибке события
Функция СообщениеОбОшибкеСобытия(ИмяСобытия, Ошибка) Экспорт
ТипОшибки = ЮТФабрика.ТипыОшибок().ОшибкаОбработкиСобытия;
Возврат СтрШаблон("%1 '%2': %3", ТипОшибки, ИмяСобытия, КраткоеСообщениеОшибки(Ошибка));
КонецФункции
Функция КраткоеСообщениеОшибки(Ошибка) Экспорт
Если ЭтоИнформацияОбОшибке(Ошибка) Тогда
Возврат КраткоеПредставлениеОшибки(Ошибка);
Иначе
Возврат Ошибка;
КонецЕсли;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ЭтоИнформацияОбОшибке(Ошибка) Экспорт
Возврат ТипЗнч(Ошибка) = Тип("ИнформацияОбОшибке");
КонецФункции
#КонецОбласти

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="12de2656-e7f8-42f9-b620-006310aa949e">
<name>ЮТСообщенияСлужебный</name>
<synonym>
<key>ru</key>
<value>Сообщения служебный</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -437,7 +437,9 @@
Попытка Попытка
Результат = РегулярныеВыражения.Совпадает(ПроверяемаяСтрока, РегулярноеВыражение); Результат = РегулярныеВыражения.Совпадает(ПроверяемаяСтрока, РегулярноеВыражение);
Исключение Исключение
ВызватьИсключение РегулярныеВыражения.ОписаниеОшибки; ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки("Ошибка проверки строки по шаблону " + РегулярноеВыражение);
ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(РегулярныеВыражения.ОписаниеОшибки);
ВызватьИсключение;
КонецПопытки; КонецПопытки;
Возврат Результат; Возврат Результат;
@ -636,7 +638,7 @@
ШаблонСообщения = ЮТПредикатыКлиентСервер.ШаблонВыражения(ПараметрыПроверки.ВидСравнения); ШаблонСообщения = ЮТПредикатыКлиентСервер.ШаблонВыражения(ПараметрыПроверки.ВидСравнения);
Сообщение = СтрШаблон(ШаблонСообщения, ПараметрыПроверки.ОжидаемоеЗначение); Сообщение = СтрШаблон(ШаблонСообщения, ПараметрыПроверки.ОжидаемоеЗначение);
ТекстОшибки = ЮТРегистрацияОшибок.ФорматированныйТекстОшибкиУтверждения(ПараметрыПроверки, Сообщение, ПараметрыПроверки.ТекстПроверяемоеЗначение); ТекстОшибки = ЮТСообщенияСлужебный.ФорматированныйТекстОшибкиУтверждения(ПараметрыПроверки, Сообщение, ПараметрыПроверки.ТекстПроверяемоеЗначение);
ТекстОшибки = ЮТРегистрацияОшибок.ДобавитьОписания(ТекстОшибки, ПараметрыПроверки); ТекстОшибки = ЮТРегистрацияОшибок.ДобавитьОписания(ТекстОшибки, ПараметрыПроверки);
ЮТРегистрацияОшибок.ДобавитьОшибкуСравненияКРезультатуПроверки(РезультатПроверки, ЮТРегистрацияОшибок.ДобавитьОшибкуСравненияКРезультатуПроверки(РезультатПроверки,

View File

@ -292,9 +292,8 @@
Исключение Исключение
Сообщение = СтрШаблон("Не удалось записать объект `%1` (%2) ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(СтрШаблон("Не удалось записать объект `%1` (%2)", Объект, ТипЗнч(Объект)));
|%3", Объект, ТипЗнч(Объект), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение;
ВызватьИсключение Сообщение;
КонецПопытки; КонецПопытки;

View File

@ -48,8 +48,8 @@
СериализаторXDTO.ЗаписатьJSON(Запись, Тип); СериализаторXDTO.ЗаписатьJSON(Запись, Тип);
Возврат Запись.Закрыть(); Возврат Запись.Закрыть();
Исключение Исключение
ВызватьИсключение СтрШаблон("Не удалось определить индетификатор типа для `%1` ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(СтрШаблон("Не удалось определить идетификатор типа для `%1`", Тип));
|%2", Тип, ОписаниеОшибки()); ВызватьИсключение;
КонецПопытки; КонецПопытки;
#КонецЕсли #КонецЕсли

View File

@ -94,6 +94,7 @@
<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> <commonModules>CommonModule.ЮТСравнениеСервер</commonModules>
<commonModules>CommonModule.ЮТСтроки</commonModules> <commonModules>CommonModule.ЮТСтроки</commonModules>