Как поймать падение в "при открытии" формы


#1

Пытаюсь написать тест открытия существующих документов “Регламентированный отчет” в бухе (толстый клиент, неуправляемые формы).
Проблема следующая:
При открытии формы документа выставляется отказ и открывается основная форма связанного с ним отчета.
При открытии отчета опять выставляется отказ для основной формы и открывается специализированная, которая падает в процедуре “при открытии” и выдаеь окно с ошибкой пользователю.
После нажатия ОК исполнение кода продолжается и тест считается успешно выполненным.
Я пока вышел из положения скопипастив код из “перед открытием” документа и отчета в тест обработку, которая у меня падает при попытке закрыть неоткрывшуюся форму, но у такого решения два недостатка:

  1. Существенный: ОК пользователь все-таки должен нажимать
  2. Архитектурный: если “перед открытием” документа или отчета поменяется, а я не замечу, то поведение теста начнет отличаться от реальности

#2

Сложный вопрос, простого ответа к сожалению нет.
Если говорить про регл. отчетность, то у тебя скорей всего следующее обновление добавит новую форму, т.е. просто скопировать код “перед открытием” невозможно.
В тоже время у тебя нет возможности получить открытые окна и вызвать там экспортный метод.

Как вариант, я бы наверное анализировал метаданные отчета “регл. отчет” и пытался бы вызвать именно самую последнюю форму, для проверки формирования.

Имхо, между “вообще не тестируется” и архитектурная проблема, лучше пусть будет архитектурная проблема.


#3

Если говорить про регл. отчетность, то у тебя скорей всего следующее
обновление добавит новую форму, т.е. просто скопировать код “перед
открытием” невозможно.

Код “перед открытием” я копирую из основной формы отчета(та что отвечает за выбор конкретной формы), так что проблем с добавлением новых нет, получается та, что надо. Но кажется “форма.Открыть()” все равно падает в соседнем потоке, и для работы теста требуется пользователь, что будет нажимать “ОК”.


#4

А можно в личке участок кода который хочется покрыть тестом ? что-то мне не нравится во всем в этом.


#6

Да, собираюсь проверить все существующие в боевой базе. Частая существующая ошибка - изменяется состав полей, а обработчики по переходу к новой версии формы включать забывают, в результате старые документы перестают открываться. (чаще всего происходит в режиме быстрей-быстрей отдается форма с частичным функционалом для формирования “как есть” и потом с т.з. разработчика версия одна, а в базе успевают насохранять промежуточной. )
Но дело не в этом, воспроизвел пример на тест базе из состава xUnitFor1C:

  1. Простой пример: добавляю справочник, в него основную форму, в ней

    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Отказ = Истина;
    ВызватьИсключение “Ой”;
    КонецПроцедуры
    запускаю тест открытия всех форм. Вскакивает сообщение об ошибке и тестирование останавливается пока не нажмешь ОК руками.
    Это то, к чему я свел свою беду, и дальнейших вариантов улучшения не вижу.

  2. Второй вариант, хуже:
    Добавляем справочник, в нем две формы: основная и падающая (ФормаЭлементаДляПадения).
    Код основной формы:

    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    //Отказ = Истина;
    Форма = ПолучитьФорму(“ФормаЭлементаДляПадения”);
    Форма.Открыть();
    КонецПроцедуры

    Процедура ПриОткрытии()
    ПодключитьОбработчикОжидания(“ЗакройМеня”,0.2, Истина);
    КонецПроцедуры

    Процедура Закройменя()
    Закрыть();
    КонецПроцедуры

Код падающей формы:

Процедура ПриОткрытии()
    ВызватьИсключение "Ой";
КонецПроцедуры

При тесте открытия форм выдается сообщение об ошибке, требуется реакция пользователя, но тест проходит успешно.
Эта ситуация максимально приближена к моей исходной проблеме. Вызывать сразу из теста “падающую” форму не хорошо, так как основная форма в реальности настраивает состояние объекта отчета, но так как основная форма практически никогда не меняется, то я скопипастил код основной формы в тестовую обработку и получил проблему из пункта 1, то есть тестирование в автоматизированном, а не автоматическом режиме.

ЗЫ не нашел способа прикреплять файлы, если что-то осталось не понятным, пишите, выложу ссылку на дропбокс с конфой.


#8

У меня не управляемые формы. Попробую 8.3.5, но боюсь это не правили.


#10

Извини, пропустил твой ответ.
База https://www.dropbox.com/s/5jy0or38u9i0euw/ЮТестСНеперехваченнымПадением1Cv8.dt?dl=0
Проверяю при помощи обычной xUnitFor1C\Tests\CommonApp\тесты_ОткрытиеФормКонфигурации