oscript-library / asserts

Библиотека утверждений (assertions) для 1Script
10 stars 4 forks source link

Fix #7. Добавлен вывод стек-трейса при исключении #8

Closed nixel2007 closed 5 years ago

nixel2007 commented 5 years ago

Выглядит вот так: image

При желании можно обернуть на проверку версии оскрипта (метод ПолучитьСтекВызовов есть только в 1.0.21 и новее), либо явно повысить требуемую версию движка (что предпочтительнее)

nixel2007 commented 5 years ago

@EvilBeaver тесты падают с таким вот странным эксепшеном (приходяшим из движка - точнее рефлектора)

{Модуль C:\Users\user\AppData\Local\ovm\current\lib\asserts\src\bdd-asserts.os / Ошибка в строке: 336 / [Failed] Ожидали, что Вставить ВЫБРОСИТ ИСКЛЮЧЕНИЕ СОДЕРЖАЩЕЕ ТЕКСТ <Недостаточно фактических параметров>, а был текст <{Модуль C:\Users\user\AppData\Local\ovm\current\lib\asserts\src\bdd-asserts.os / Ошибка в строке: 257 / Внешнее исключение (System.ArgumentNullException): Значение не может быть неопределенным.
Имя параметра: key}>.
Стек трейс:
  C:\Users\user\AppData\Local\ovm\current\lib\asserts\src\bdd-asserts.os / Метод ВыбрасываетИсключение / Строка 268
    C:\Users\user\AppData\Local\ovm\current\lib\asserts\tests\bdd-assertions-tests.os / Метод ТестДолжен_Проверить_ЧтоВыбрасываетсяИсключение / Строка 280
      C:\Users\user\AppData\Local\ovm\current\lib\asserts\tests\bdd-assertions-tests.os / Метод $entry / Строка 290}
artbear commented 5 years ago

При желании можно обернуть на проверку версии оскрипта (метод ПолучитьСтекВызовов есть только в 1.0.21 и новее), либо явно повысить требуемую версию движка (что предпочтительнее)

Да, лучше повысить требования к версии

artbear commented 5 years ago

А подробное представление ошибки не подойдет вместо использования стека вызовов?

Правда, здесь движковые ошибки могут прилетать.

artbear commented 5 years ago

Предлагаю код чуть-чуть упростить - вместо ручного слияния строк в конце использовать тот же массив СтекТрейс

СтекТрейс = Новый Массив;
СтекТрейс.Добавить(ТекстИсключения);
СтекТрейс.Добавить("Стек трейс:");

Для Каждого КадрСтекаВызовов Из СтекВызовов Цикл
    ...
КонецЦикла;

ВызватьИсключение СтрСоединить(СтекТрейс, Символы.ПС);
nixel2007 commented 5 years ago

Я думал об этом, но тогда имя переменной врет. Надо либо её переименовывать, либо оставлять как есть.

nixel2007 commented 5 years ago

Подробное представление ошибки не отдает стек трейс, емнип. Максимум дерево причин (из информации об ошибке)

artbear commented 5 years ago

Я думал об этом, но тогда имя переменной врет. Надо либо её переименовывать, либо оставлять как есть.

Переименовать легче по принципу бойскаута

artbear commented 5 years ago

Подробное представление ошибки не отдает стек трейс, емнип.

недавно добавлялся метод ПодробноеПредставление (или что-то подобное), который как раз и показывает стек-трейс движка.

мне @EvilBeaver показывал как раз для ассертов - кажется, Формат или другой метод падал, и на основании стек-трейса я смог сделать исправляющий пулл-реквест

nixel2007 commented 5 years ago

@EvilBeaver ты понимаешь, о чем Артур?

@artbear вроде концептуально смысл пр это не поменяет, да? Переменную поправлю только завтра уже.

nixel2007 commented 5 years ago

@artbear готово.

EvilBeaver commented 5 years ago

@nixel2007 я не очень понял.. Какое-то исключение откуда-то прилетает? Надо что-то фиксить в движке?

EvilBeaver commented 5 years ago

@artbear: недавно добавлялся метод ПодробноеПредставление (или что-то подобное), который как раз и показывает стек-трейс движка.

Нет, метод ПодробноеОписаниеОшибки / DetailedDescription() был всегда и он показывает стектрейс уровня C#, не 1С.

Поведение 1С-ного метода ПодробноеПредставлениеОшибки не менялось. Стектрейс туда не включается.

nixel2007 commented 5 years ago

@nixel2007 я не очень понял.. Какое-то исключение откуда-то прилетает? Надо что-то фиксить в движке?

@EvilBeaver да. попробуй запустить тестирование через 1testrunner -runall tests. словишь эксепшен как у меня. вероятнее всего в мастере/девелопе тоже вылетит, т.к. я не менял код, который падает.

artbear commented 5 years ago

Нет, метод ПодробноеОписаниеОшибки / DetailedDescription() был всегда и он показывает стектрейс уровня C#, не 1С.

Поведение 1С-ного метода ПодробноеПредставлениеОшибки не менялось. Стектрейс туда не включается.

@EvilBeaver @nixel2007 Подозреваю, что подробное представление стек-трейса полезно не только для утверждений текущего пакета, но и в других случаях, пакетах, скриптах.

Предлагаю добавить показ стек-трейса 1С в одном из методов движка.

Например, к методу ПодробноеОписаниеОшибки / DetailedDescription() в дополнение к стеку C# или в ПодробноеПредставлениеОшибки или еще куда-нибудь в движок.