Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lector5(Stud).doc
Скачиваний:
3
Добавлен:
02.05.2019
Размер:
181.25 Кб
Скачать

2.3 Тестирование обработчика за счет эмуляции ошибок

Эмуляция ошибок весьма полезна при тестировании программы и обработке ситуаций, эквивалентных ошибке Visual Basic периода выполнения. Чтобы протестировать программу на предмет обработки всех возможных ошибок, может понадобиться сгенерировать некоторые из них прямо в коде. Это позволяет сделать метод Raise объекта Err. Данному методу передается список именованных аргументов, определяющих его действие. Как только встречается оператор Resume, вызывается метод Clear объекта Err. Поэтому, чтобы передать ошибку предыдущему в стеке вызовов обработчику, ее нужно сгенерировать повторно.

Иногда нужно определить нестандартные ошибки в дополнение к тем, что уже определены в Visual Basic. Если необходимо генерировать и перехватывать нестандартные ошибки, необходимо присвоить им соответствующие коды, используя константу vbObjectError как базовое значение. Эта константа резервирует коды предопределенных ошибок в диапазоне от vbObjectError до vbObjectError + 512. Оперируя с кодами, превышающими последнее значение, можно быть уверенным, что они не вызовут конфликтов в будущих версиях Visual Basic. Определив коды нестандартных ошибок, можно использовать их при вызове метода Raise так же, как встроенные. В этом случае свойство Description объекта Err возвращает стандартное описание – «Application-defined or object-defined error» («ошибка, определенная приложением или объектом»). Можно изменить это описание, указав соответствующую строку при вызове метода Raise.

2.4 Строчная обработка ошибок

Проверяя специфическую строку кода, способную привести к ошибке, реализуется строчная обработка ошибок (inline error handing). В таком случае можно писать функции и операторы, возвращающие коды ошибок; генерировать ошибки Visual Basic в вызванных процедурах и обрабатывать их в вызывающих процедурах; создавать функции, которые возвращают тип данных Variant, и использовать эти данные, чтобы сообщить об ошибке вызывающей процедуре.

Есть несколько способов вернуть код ошибки. Простейший – создать функции, возвращающие в случае ошибки ее код. Главное в строчной обработке ошибок – немедленная проверка на ошибку после выполнения каждого оператора или вызова функции. В этом случае можно создать обработчик, рассчитанный на определенную группу ошибок. Такой подход не требует реального появления ошибок периода выполнения.

Другой способ состоит в генерации ошибки Visual Basic в вызываемой процедуре и ее обработке строчным обработчиком ошибок в вызывающей процедуре. Если создана функция, которая при неудаче генерирует ошибку, то оператор On Error Resume Next, добавленный перед вызовом этой функции, в случае ошибки заставляет программу перейти к следующему за вызовом функции оператору, не выполняя подпрограмму обработки ошибок. Оператор On Error Resume Next сопровождается кодом обработки ошибок. Этот код проверяет свойства объекта Err и определяет, была ли ошибка и каков ее номер. Если Err.Number содержит ненулевое значение, значит, произошла ошибка, и программа может предпринять соответствующие действия в зависимости от значения свойств объекта Err. Если функция просто возвращала результат вычисления или код ошибки, вычисленное значение могло бы попасть в диапазон кодов ошибок, и вызывающая процедура не отличила бы ошибку от результата. Еще один способ вернуть информацию об ошибке, построен на особенностях типа данных Variant и связанных с ним функций. В Variant есть метка, которая указывает тип содержащихся в переменной данных; одним из типов может быть код ошибки Visual Basic. Поэтому можно написать функцию, возвращающую значение типа Variant, и использовать его метку, сообщая вызывающей процедуре об ошибке.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]