Поддержка ЮТест.Пропустить() в обработчиках событий теста - #687
Conversation
При регистрации ошибки события для событий теста дополнительно проверяем тип ошибки. И если это пропуск теста, то формируем данные ошибки пропуска, а не ошибки обработки события.
WalkthroughВ процедуру ЗарегистрироватьОшибкуСобытияИсполнения добавлена обработка случая, когда событие относится к тесту и классифицируется как пропуск. В этом случае тип ошибки переопределяется, а данные ошибки формируются через ДанныеОшибкиПропуска вместо стандартных данных ошибки обработки события. ChangesОбработка пропуска теста в обработчиках событий
Estimated code review effort: 1 (Trivial) | ~5 minutes Sequence Diagram(s)sequenceDiagram
participant Тест
participant ЗарегистрироватьОшибкуСобытияИсполнения
participant ТипОшибки
participant ДанныеОшибкиПропуска
Тест->>ЗарегистрироватьОшибкуСобытияИсполнения: ошибка события (ОписаниеСобытия.Тест задан)
ЗарегистрироватьОшибкуСобытияИсполнения->>ТипОшибки: ТипОшибки(Ошибка, ИмяМетодаТеста)
ТипОшибки-->>ЗарегистрироватьОшибкуСобытияИсполнения: Пропущен
ЗарегистрироватьОшибкуСобытияИсполнения->>ДанныеОшибкиПропуска: ДанныеОшибкиПропуска(Ошибка)
ДанныеОшибкиПропуска-->>ЗарегистрироватьОшибкуСобытияИсполнения: ДанныеОшибки
ЗарегистрироватьОшибкуСобытияИсполнения->>ЗарегистрироватьОшибкуСобытияИсполнения: Объект.Ошибки.Добавить(ДанныеОшибки)
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl (1)
36-43: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueДублирование проверки
ОписаниеСобытия.Тест <> Неопределено.Условие на строке 36 и на строке 43 проверяет одно и то же. Эти блоки можно объединить, чтобы избежать дублирования и улучшить читаемость.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl` around lines 36 - 43, В модуле ЮТРегистрацияОшибокСлужебный есть дублирование проверки ОписаниеСобытия.Тест <> Неопределено вокруг логики с ТипОшибки и ДанныеОшибкиПропуска. Объедини эти одинаковые условия в один блок, чтобы вся обработка ошибки для ОписаниеСобытия.Тест выполнялась под одной проверкой, и убери повторный if рядом с ТипОшибки/ЮТФабрикаСлужебный.ТипыОшибок().Пропущен.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl`:
- Around line 34-41: Устраните двойное формирование ошибки в
ЮТРегистрацияОшибокСлужебный: сейчас ДанныеОшибки вызывается безусловно, а затем
при Пропущен — ДанныеОшибкиПропуска, из-за чего теряются сообщения и детали.
Перестройте логику в этом месте так, чтобы для события теста выбирался только
один путь формирования результата: либо обычный ДанныеОшибки, либо
ДанныеОшибкиПропуска, а не оба. Ориентируйтесь на паттерн из
ЗарегистрироватьОшибкуВыполненияТеста, где используется взаимоисключающий вызов
нужной функции.
---
Nitpick comments:
In `@exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl`:
- Around line 36-43: В модуле ЮТРегистрацияОшибокСлужебный есть дублирование
проверки ОписаниеСобытия.Тест <> Неопределено вокруг логики с ТипОшибки и
ДанныеОшибкиПропуска. Объедини эти одинаковые условия в один блок, чтобы вся
обработка ошибки для ОписаниеСобытия.Тест выполнялась под одной проверкой, и
убери повторный if рядом с ТипОшибки/ЮТФабрикаСлужебный.ТипыОшибок().Пропущен.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: e1121c68-d725-4908-8485-e55eb6526ceb
📒 Files selected for processing (1)
exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl
| ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки); | ||
|
|
||
| // Обработка пропуска теста для событий теста. | ||
| Если ОписаниеСобытия.Тест <> Неопределено Тогда | ||
| ТипОшибки = ТипОшибки(Ошибка, ОписаниеСобытия.Тест.ПолноеИмяМетода); | ||
| Если ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().Пропущен Тогда | ||
| ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка); | ||
| КонецЕсли; | ||
| КонецЕсли; |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Двойной вызов ДанныеОшибки и ДанныеОшибкиПропуска приводит к потере данных.
На строке 34 ДанныеОшибки вызывается безусловно, выполняя ДобавитьСообщенияПользователю() (которая через ПолучитьСообщенияПользователю(Истина) очищает очередь сообщений) и ДеталиОшибки() (которая очищает контекст деталей). Затем, при пропуске, ДанныеОшибкиПропуска на строке 39 снова вызывает ДобавитьСообщенияПользователю(), но очередь уже пуста. Сообщения пользователя и детали ошибки остаются привязанными к отброшенному объекту ДанныеОшибки и теряются в финальных данных ошибки пропуска.
Для сравнения, ЗарегистрироватьОшибкуВыполненияТеста (строки 72–86) использует взаимоисключающий паттерн — вызывается только одна из функций формирования данных ошибки.
🔧 Предлагаемое исправление
Процедура ЗарегистрироватьОшибкуСобытияИсполнения(ИмяСобытия, ОписаниеСобытия, Ошибка) Экспорт
ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().ОшибкаОбработкиСобытия;
Пояснение = ЮТСообщенияСлужебный.СообщениеОбОшибкеСобытия(ИмяСобытия, Ошибка);
- ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки);
- // Обработка пропуска теста для событий теста.
- Если ОписаниеСобытия.Тест <> Неопределено Тогда
- ТипОшибки = ТипОшибки(Ошибка, ОписаниеСобытия.Тест.ПолноеИмяМетода);
- Если ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().Пропущен Тогда
- ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка);
- КонецЕсли;
- КонецЕсли;
+
+ Если ОписаниеСобытия.Тест <> Неопределено Тогда
+ ТипОшибки = ТипОшибки(Ошибка, ОписаниеСобытия.Тест.ПолноеИмяМетода);
+ КонецЕсли;
+
+ Если ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().Пропущен Тогда
+ ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка);
+ Иначе
+ ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки);
+ КонецЕсли;
Если ОписаниеСобытия.Тест <> Неопределено Тогда📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки); | |
| // Обработка пропуска теста для событий теста. | |
| Если ОписаниеСобытия.Тест <> Неопределено Тогда | |
| ТипОшибки = ТипОшибки(Ошибка, ОписаниеСобытия.Тест.ПолноеИмяМетода); | |
| Если ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().Пропущен Тогда | |
| ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка); | |
| КонецЕсли; | |
| КонецЕсли; | |
| Если ОписаниеСобытия.Тест <> Неопределено Тогда | |
| ТипОшибки = ТипОшибки(Ошибка, ОписаниеСобытия.Тест.ПолноеИмяМетода); | |
| КонецЕсли; | |
| Если ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().Пропущен Тогда | |
| ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка); | |
| Иначе | |
| ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки); | |
| КонецЕсли; |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl`
around lines 34 - 41, Устраните двойное формирование ошибки в
ЮТРегистрацияОшибокСлужебный: сейчас ДанныеОшибки вызывается безусловно, а затем
при Пропущен — ДанныеОшибкиПропуска, из-за чего теряются сообщения и детали.
Перестройте логику в этом месте так, чтобы для события теста выбирался только
один путь формирования результата: либо обычный ДанныеОшибки, либо
ДанныеОшибкиПропуска, а не оба. Ориентируйтесь на паттерн из
ЗарегистрироватьОшибкуВыполненияТеста, где используется взаимоисключающий вызов
нужной функции.
| ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки); | ||
|
|
||
| // Обработка пропуска теста для событий теста. | ||
| Если ОписаниеСобытия.Тест <> Неопределено Тогда |
There was a problem hiding this comment.
Думаю надо расширить, не только для тестов но и для модулей/наборов
There was a problem hiding this comment.
гм. а там какое поведение ожидаем? что должны заскипать все тесты модуля/набора?
There was a problem hiding this comment.
нам же еще важно, чтоб в отчетности все отразилось корректно
|
еще заметили, что скип в лог в данном случае попадает как ошибка что не ок |
Описание изменений
При регистрации ошибки события для событий теста дополнительно проверяем тип ошибки. И если это пропуск теста, то формируем данные ошибки пропуска, а не ошибки обработки события.
Close #686
Summary by CodeRabbit