-
Notifications
You must be signed in to change notification settings - Fork 5
feat: Обработка ошибок при подключении тестовых наборов и добавление сломанного набора #3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…сломанного набора - Добавлена обработка ошибок при подключении тестовых наборов. Если при подключении тестового набора возникает ошибка, то создается декоратор, который помечает набор как сломанный и добавляет информацию об ошибке в отчет. - Добавлен новый тестовый набор "СломанныйНабор", который содержит синтаксическую ошибку. - Обновлен тест "Обнаружитель", чтобы учитывать новый тестовый набор "СломанныйНабор". - Добавлена запись причин падения тестов в JUnit отчет.
WalkthroughВнесены изменения во внутреннюю логику загрузки и обработки тестовых наборов: теперь при неудачной загрузке тестового файла или отсутствии конструктора для набора динамически создаётся декоратор, выбрасывающий ошибку при инициализации. В отчёте JUnit теперь выводятся подробные причины ошибок. Добавлен тестовый набор с ошибкой и обновлены соответствующие тесты. Changes
Sequence Diagram(s)sequenceDiagram
participant TestRunner
participant TestSetLoader
participant DecoratorBuilder
participant TypeSystem
TestRunner->>TestSetLoader: Загрузить тест-набор
alt Успех и есть конструктор
TestSetLoader-->>TestRunner: Возвращает тест-набор
else Нет конструктора или ошибка загрузки
TestSetLoader->>DecoratorBuilder: Создать декоратор с ошибкой
DecoratorBuilder->>TypeSystem: Зарегистрировать декоратор
TestSetLoader-->>TestRunner: Возвращает декоратор-набор
end
TestRunner->>TestSetLoader: Добавить связывание при необходимости
Assessment against linked issues
Poem
Note ⚡️ AI Code Reviews for VS Code, Cursor, WindsurfCodeRabbit now has a plugin for VS Code, Cursor and Windsurf. This brings AI code reviews directly in the code editor. Each commit is reviewed immediately, finding bugs before the PR is raised. Seamless context handoff to your AI code agent ensures that you can easily incorporate review feedback. Note ⚡️ Faster reviews with cachingCodeRabbit now supports caching for code and dependencies, helping speed up reviews. This means quicker feedback, reduced wait times, and a smoother review experience overall. Cached data is encrypted and stored securely. This feature will be automatically enabled for all accounts on May 16th. To opt out, configure 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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (4)
src/core/internal/Классы/ЗаготовкаТестирование.os (2)
35-38
: Повторное чтение файла ради поиска конструктора — лишний ввод-выводМетод
ЕстьКонструктор()
каждый раз открывает и целиком читает файл.
При большом количестве наборов это будет заметно замедлять обнаружение тестов.Рассмотрите возможность:
- Кэшировать результат проверки по пути файла.
- Останавливать чтение после достижения конца секции заголовков/первых N КБ.
- Использовать результат
ПодключитьСценарий
, если он возвращает модуль, и проверять конструктор рефлексией.Это улучшит производительность без потери функциональности.
82-90
: Микро-оптимизация функцииЕстьКонструктор
Сейчас читается весь текст файла, а далее выполняется два поиска подстроки. Можно значительно снизить потребление памяти, если искать конструкцию построчно, завершив цикл сразу после первого совпадения.
Пример минимального изменения:
-ЧтениеТекста = Новый ЧтениеТекста(Путь, КодировкаТекста.UTF8); -ТекстСценария = ЧтениеТекста.Прочитать(); -ЧтениеТекста.Закрыть(); -ЕстьКонструктор = СтрНайти(ТекстСценария, "Процедура ПриСозданииОбъекта") > 0 - Или СтрНайти(ТекстСценария, "Procedure OnObjectCreation") > 0; +ЧтениеТекста = Новый ЧтениеТекста(Путь, КодировкаТекста.UTF8); +ЕстьКонструктор = Ложь; +Пока Не ЧтениеТекста.КонецФайла() И Не ЕстьКонструктор Цикл + СтрокаФайла = ЧтениеТекста.ПрочитатьСтроку(); + Если СтрНайти(СтрокаФайла, "Процедура ПриСозданииОбъекта") > 0 + Или СтрНайти(СтрокаФайла, "Procedure OnObjectCreation") > 0 Тогда + ЕстьКонструктор = Истина; + КонецЕсли; +КонецЦикла; +ЧтениеТекста.Закрыть();При десятках/сотнях файлов выгода будет ощутимой.
tests/Обнаружитель.os (2)
56-72
: Добавьте явную проверку отсутствия тестов в «СломанномНаборе»Сейчас для нового набора проверяются метаданные, но не гарантируется, что у него действительно 0 тестов.
Рекомендуется сразу после блокаПроверитьТестНабор(...)
добавить проверку длины коллекции детей:ПоверитьТестНабор( … ); + +Ожидаем.Что( + ТестПлан.Дети().Получить(ИндексНабора).Дети() +).ИмеетДлину(0);Так тест явно зафиксирует контракт «сломанный набор ≡ пустой».
19-20
: Общее замечание по поддержке индексовЧисло наборов увеличено до 10, индексы вручную сдвинуты в нескольких местах.
Чтобы избежать ошибок при добавлении очередных наборов, рассмотрите вариант вычислять индекс через поиск по имени:ИндексНабора = ТестПлан.Дети().Индекс("СломанныйНабор");
Это избавит от рутинного обновления магических чисел.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
src/core/internal/Классы/ЗаготовкаТестирование.os
(3 hunks)src/core/internal/Классы/РепортерJUnit.os
(2 hunks)tests/fixtures/СломанныйНабор.os
(1 hunks)tests/Обнаружитель.os
(9 hunks)
🔇 Additional comments (3)
tests/fixtures/СломанныйНабор.os (1)
1-1
: Файл-заглушка выглядит корректноФайл служит для симуляции некорректного тестового сценария, поэтому «мусорное» содержимое и отсутствие завершающего перевода строки допустимы.
Дополнительных замечаний нет.src/core/internal/Классы/ЗаготовкаТестирование.os (1)
41-62
: Декоратор для «сломанных» наборов реализован корректноСоздание динамического типа с полем
Ошибка
и процедуройПередВсеми
, вызывающей исключение, полностью решает задачу: набор присутствует в плане, но падает при инициализации. Логика регистрации в системе типов и последующего биндинга выглядит надёжно.src/core/internal/Классы/РепортерJUnit.os (1)
117-118
: Отличное дополнение к отчетности JUnit!Реализация добавления причин ошибок в отчеты JUnit значительно улучшает диагностику проблем. Теперь причины ошибок будут отображаться в элементе
system-err
, что соответствует спецификации JUnit и делает отчеты более информативными.Обработка коллекции причин с пропуском первого стека вызовов и использование форматированного вывода через
ТестированиеСлужебный.ПодробноеОписаниеОшибки
обеспечивает читаемый и структурированный вывод ошибок.Also applies to: 122-132, 165-172
Closes #2
Summary by CodeRabbit