1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-01-05 12:50:36 +02:00

Merge pull request #235 from bia-technologies/feature/234

234 / Реанимация работы движка после поломки контекста
This commit is contained in:
Koryakin Aleksey 2024-01-12 20:16:34 +03:00 committed by GitHub
commit 4becf9ca91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 106 additions and 26 deletions

View File

@ -76,15 +76,17 @@
Результаты = Новый Массив();
Для Каждого Тест Из Набор.Тесты Цикл
ВТранзакции = Ложь;
ПередКаждымТестом(ТестовыйМодуль, Набор, Тест, ВТранзакции);
Тест.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах();
ЮТСобытия.ПередКаждымТестом(ТестовыйМодуль, Набор, Тест);
ВыполнитьТестовыйМетод(Тест);
ЮТСобытия.ПослеКаждогоТеста(ТестовыйМодуль, Набор, Тест);
Тест.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Тест.ДатаСтарта;
ОбработатьЗавершениеТеста(Тест);
ПослеКаждогоТеста(ТестовыйМодуль, Набор, Тест, ВТранзакции);
Тест.Статус = ЮТРегистрацияОшибок.СтатусВыполненияТеста(Тест);
Результаты.Добавить(Тест);
КонецЦикла;
@ -97,10 +99,48 @@
КонецФункции
Процедура ОбработатьЗавершениеТеста(Тест)
Процедура ПередКаждымТестом(ТестовыйМодуль, Набор, Тест, ВТранзакции)
Тест.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Тест.ДатаСтарта;
Тест.Статус = ЮТРегистрацияОшибок.СтатусВыполненияТеста(Тест);
#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
ВТранзакции = ЮТНастройкиВыполнения.ВТранзакции();
Если ВТранзакции Тогда
НачатьТранзакцию();
КонецЕсли;
#КонецЕсли
ЮТСобытия.ПередКаждымТестом(ТестовыйМодуль, Набор, Тест);
КонецПроцедуры
Процедура ПослеКаждогоТеста(ТестовыйМодуль, Набор, Тест, ВТранзакции)
Если ЮТКонтекст.ДанныеКонтекста() = Неопределено Тогда // Сломан контекст
ОбновитьПовторноИспользуемыеЗначения();
ОтменитьТранзакциюТеста(Тест, ВТранзакции);
ЮТСобытия.ПослеКаждогоТеста(ТестовыйМодуль, Набор, Тест);
Иначе
ЮТСобытия.ПослеКаждогоТеста(ТестовыйМодуль, Набор, Тест);
ОтменитьТранзакциюТеста(Тест, ВТранзакции);
КонецЕсли;
КонецПроцедуры
Процедура ОтменитьТранзакциюТеста(Тест, ВТранзакции)
#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
Если ВТранзакции Тогда
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
Иначе
ЮТРегистрацияОшибок.ЗарегистрироватьПростуюОшибкуВыполнения(Тест, "Обнаружено лишне закрытие транзакции");
КонецЕсли;
КонецЕсли;
Пока ТранзакцияАктивна() Цикл
ОтменитьТранзакцию();
ЮТРегистрацияОшибок.ЗарегистрироватьПростуюОшибкуВыполнения(Тест, "Обнаружена незакрытая транзакция");
КонецЦикла;
#КонецЕсли
КонецПроцедуры

View File

@ -84,12 +84,6 @@
ПолучитьСообщенияПользователю(Истина);
#КонецЕсли
#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
Если ЮТНастройкиВыполнения.ВТранзакции() Тогда
НачатьТранзакцию();
КонецЕсли;
#КонецЕсли
ВызватьОбработкуСобытий(ЮТОбщий.ЗначениеВМассиве("ПередКаждымТестом", "ПередТестом"), ОписаниеСобытия);
КонецПроцедуры
@ -106,18 +100,6 @@
ВызватьОбработкуСобытий(ЮТОбщий.ЗначениеВМассиве("ПослеТеста", "ПослеКаждогоТеста"), ОписаниеСобытия);
#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
Если ЮТНастройкиВыполнения.ВТранзакции() Тогда
ОтменитьТранзакцию();
КонецЕсли;
Пока ТранзакцияАктивна() Цикл
ОтменитьТранзакцию();
ЮТРегистрацияОшибок.ЗарегистрироватьПростуюОшибкуВыполнения(Тест, "Обнаружена незакрытая транзакция");
КонецЦикла;
#КонецЕсли
Уровни = ЮТФабрика.УровниИсполнения();
КонтекстИсполнения = ЮТКонтекст.КонтекстИсполнения();
КонтекстИсполнения.Уровень = Уровни.НаборТестов;

View File

@ -0,0 +1,48 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// 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,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="4f57696f-566f-4995-8e38-4b135636d17f">
<name>ОМ_ЮТИсполнительКлиентСервер</name>
<synonym>
<key>ru</key>
<value>ЮТИсполнитель клиент сервер</value>
</synonym>
<server>true</server>
</mdclass:CommonModule>

View File

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

View File

@ -34,6 +34,7 @@
<commonModules>CommonModule.ОМ_ЮТест</commonModules>
<commonModules>CommonModule.ОМ_ЮТестПереопределяемый</commonModules>
<commonModules>CommonModule.ОМ_ЮТЗапросы</commonModules>
<commonModules>CommonModule.ОМ_ЮТИсполнительКлиентСервер</commonModules>
<commonModules>CommonModule.ОМ_ЮТКонструкторТестовыхДанных</commonModules>
<commonModules>CommonModule.ОМ_ЮТМетаданные</commonModules>
<commonModules>CommonModule.ОМ_ЮТПодражатель_Банки</commonModules>